# SPDX-License-Identifier: GPL-2.0
menu "Kernel hacking"

source "lib/Kconfig.debug"

config PPC_DISABLE_WERROR
	bool "Don't build arch/powerpc code with -Werror"
	help
	  This option tells the compiler NOT to build the code under
	  arch/powerpc with the -Werror flag (which means warnings
	  are treated as errors).

	  Only enable this if you are hitting a build failure in the
	  arch/powerpc code caused by a warning, and you don't feel
	  inclined to fix it.

config PPC_WERROR
	bool
	depends on !PPC_DISABLE_WERROR
	default y

config PRINT_STACK_DEPTH
	int "Stack depth to print" if DEBUG_KERNEL
	default 64
	help
	  This option allows you to set the stack depth that the kernel
	  prints in stack traces. This can be useful if your display is
	  too small and stack traces cause important information to
	  scroll off the screen.

config HCALL_STATS
	bool "Hypervisor call instrumentation"
	depends on PPC_PSERIES && DEBUG_FS && TRACEPOINTS
	help
	  Adds code to keep track of the number of hypervisor calls made and
	  the amount of time spent in hypervisor calls.  Wall time spent in
	  each call is always calculated, and if available CPU cycles spent
	  are also calculated.  A directory named hcall_inst is added at the
	  root of the debugfs filesystem.  Within the hcall_inst directory
	  are files that contain CPU specific call statistics.

	  This option will add a small amount of overhead to all hypervisor
	  calls.

config PPC_EMULATED_STATS
	bool "Emulated instructions tracking"
	depends on DEBUG_FS
	help
	  Adds code to keep track of the number of instructions that are
	  emulated by the in-kernel emulator. Counters for the various classes
	  of emulated instructions are available under
	  powerpc/emulated_instructions/ in the root of the debugfs file
	  system. Optionally (controlled by
	  powerpc/emulated_instructions/do_warn in debugfs), rate-limited
	  warnings can be printed to the console when instructions are
	  emulated.

config CODE_PATCHING_SELFTEST
	bool "Run self-tests of the code-patching code"
	depends on DEBUG_KERNEL

config JUMP_LABEL_FEATURE_CHECKS
	bool "Enable use of jump label for cpu/mmu_has_feature()"
	depends on JUMP_LABEL
	default y
	help
	  Selecting this options enables use of jump labels for some internal
	  feature checks. This should generate more optimal code for those
	  checks.

config JUMP_LABEL_FEATURE_CHECK_DEBUG
	bool "Do extra check on feature fixup calls"
	depends on DEBUG_KERNEL && JUMP_LABEL_FEATURE_CHECKS
	help
	  This tries to catch incorrect usage of cpu_has_feature() and
	  mmu_has_feature() in the code.

	  If you don't know what this means, say N.

config FTR_FIXUP_SELFTEST
	bool "Run self-tests of the feature-fixup code"
	depends on DEBUG_KERNEL

config MSI_BITMAP_SELFTEST
	bool "Run self-tests of the MSI bitmap code"
	depends on DEBUG_KERNEL

config XMON
	bool "Include xmon kernel debugger"
	depends on DEBUG_KERNEL
	help
	  Include in-kernel hooks for the xmon kernel monitor/debugger.
	  Unless you are intending to debug the kernel, say N here.
	  Make sure to enable also CONFIG_BOOTX_TEXT on Macs. Otherwise
	  nothing will appear on the screen (xmon writes directly to the
	  framebuffer memory).
	  The cmdline option 'xmon' or 'xmon=early' will drop into xmon
	  very early during boot. 'xmon=on' will just enable the xmon
	  debugger hooks.  'xmon=off' will disable the debugger hooks
	  if CONFIG_XMON_DEFAULT is set.
	  xmon will print a backtrace on the very first invocation.
	  'xmon=nobt' will disable this autobacktrace.

config XMON_DEFAULT
	bool "Enable xmon by default"
	depends on XMON
	help
	  xmon is normally disabled unless booted with 'xmon=on'.
	  Use 'xmon=off' to disable xmon init during runtime.

config XMON_DISASSEMBLY
	bool "Include disassembly support in xmon"
	depends on XMON
	default y
	help
	  Include support for disassembling in xmon. You probably want
	  to say Y here, unless you're building for a memory-constrained
	  system.

config DEBUGGER
	bool
	depends on KGDB || XMON
	default y

config BDI_SWITCH
	bool "Include BDI-2000 user context switcher"
	depends on DEBUG_KERNEL && PPC32
	help
	  Include in-kernel support for the Abatron BDI2000 debugger.
	  Unless you are intending to debug the kernel with one of these
	  machines, say N here.

config BOOTX_TEXT
	bool "Support for early boot text console (BootX or OpenFirmware only)"
	depends on PPC_BOOK3S
	help
	  Say Y here to see progress messages from the boot firmware in text
	  mode. Requires either BootX or Open Firmware.

config PPC_EARLY_DEBUG
	bool "Early debugging (dangerous)"
	help
	  Say Y to enable some early debugging facilities that may be available
	  for your processor/board combination. Those facilities are hacks
	  intended to debug problems early during boot, this should not be
	  enabled in a production kernel.
	  Note that enabling this will also cause the kernel default log level
	  to be pushed to max automatically very early during boot

choice
	prompt "Early debugging console"
	depends on PPC_EARLY_DEBUG
	help
	  Use the selected console for early debugging. Careful, if you
	  enable debugging for the wrong type of machine your kernel
	  _will not boot_.

config PPC_EARLY_DEBUG_BOOTX
	bool "BootX or OpenFirmware"
	depends on BOOTX_TEXT
	help
	  Select this to enable early debugging for a machine using BootX
	  or OpenFirmware.

config PPC_EARLY_DEBUG_LPAR
	bool "LPAR HV Console"
	depends on PPC_PSERIES && HVC_CONSOLE
	help
	  Select this to enable early debugging for a machine with a HVC
	  console on vterm 0.

config PPC_EARLY_DEBUG_LPAR_HVSI
	bool "LPAR HVSI Console"
	depends on PPC_PSERIES && HVC_CONSOLE
	help
	  Select this to enable early debugging for a machine with a HVSI
	  console on a specified vterm.

config PPC_EARLY_DEBUG_G5
	bool "Apple G5"
	depends on PPC_PMAC64
	help
	  Select this to enable early debugging for Apple G5 machines.

config PPC_EARLY_DEBUG_RTAS_PANEL
	bool "RTAS Panel"
	depends on PPC_RTAS
	help
	  Select this to enable early debugging via the RTAS panel.

config PPC_EARLY_DEBUG_RTAS_CONSOLE
	bool "RTAS Console"
	depends on PPC_RTAS
	select UDBG_RTAS_CONSOLE
	help
	  Select this to enable early debugging via the RTAS console.

config PPC_EARLY_DEBUG_MAPLE
	bool "Maple real mode"
	depends on PPC_MAPLE
	help
	  Select this to enable early debugging for Maple.

config PPC_EARLY_DEBUG_PAS_REALMODE
	bool "PA Semi real mode"
	depends on PPC_PASEMI
	help
	  Select this to enable early debugging for PA Semi.
	  Output will be on UART0.

config PPC_EARLY_DEBUG_44x
	bool "Early serial debugging for IBM/AMCC 44x CPUs"
	depends on 44x
	help
	  Select this to enable early debugging for IBM 44x chips via the
	  inbuilt serial port.  If you enable this, ensure you set
          PPC_EARLY_DEBUG_44x_PHYSLOW below to suit your target board.

config PPC_EARLY_DEBUG_40x
	bool "Early serial debugging for IBM/AMCC 40x CPUs"
	depends on 40x
	help
	  Select this to enable early debugging for IBM 40x chips via the
	  inbuilt serial port. This works on chips with a 16550 compatible
	  UART. Xilinx chips with uartlite cannot use this option.

config PPC_EARLY_DEBUG_CPM
	bool "Early serial debugging for Freescale CPM-based serial ports"
	depends on SERIAL_CPM=y
	help
	  Select this to enable early debugging for Freescale chips
	  using a CPM-based serial port.  This assumes that the bootwrapper
	  has run, and set up the CPM in a particular way.

config PPC_EARLY_DEBUG_USBGECKO
	bool "Early debugging through the USB Gecko adapter"
	depends on GAMECUBE_COMMON
	select USBGECKO_UDBG
	help
	  Select this to enable early debugging for Nintendo GameCube/Wii
	  consoles via an external USB Gecko adapter.

config PPC_EARLY_DEBUG_PS3GELIC
	bool "Early debugging through the PS3 Ethernet port"
	depends on PPC_PS3
	select PS3GELIC_UDBG
	help
	  Select this to enable early debugging for the PlayStation3 via
	  UDP broadcasts sent out through the Ethernet port.

config PPC_EARLY_DEBUG_OPAL_RAW
	bool "OPAL raw console"
	depends on HVC_OPAL
	help
	  Select this to enable early debugging for the PowerNV platform
	  using a "raw" console

config PPC_EARLY_DEBUG_OPAL_HVSI
	bool "OPAL hvsi console"
	depends on HVC_OPAL
	help
	  Select this to enable early debugging for the PowerNV platform
	  using an "hvsi" console

config PPC_EARLY_DEBUG_MEMCONS
	bool "In memory console"
	help
	  Select this to enable early debugging using an in memory console.
	  This console provides input and output buffers stored within the
	  kernel BSS and should be safe to select on any system. A debugger
	  can then be used to read kernel output or send input to the console.
endchoice

config PPC_MEMCONS_OUTPUT_SIZE
	int "In memory console output buffer size"
	depends on PPC_EARLY_DEBUG_MEMCONS
	default 4096
	help
	  Selects the size of the output buffer (in bytes) of the in memory
	  console.

config PPC_MEMCONS_INPUT_SIZE
	int "In memory console input buffer size"
	depends on PPC_EARLY_DEBUG_MEMCONS
	default 128
	help
	  Selects the size of the input buffer (in bytes) of the in memory
	  console.

config PPC_EARLY_DEBUG_OPAL
	def_bool y
	depends on PPC_EARLY_DEBUG_OPAL_RAW || PPC_EARLY_DEBUG_OPAL_HVSI


config PPC_EARLY_DEBUG_HVSI_VTERMNO
	hex "vterm number to use with early debug HVSI"
	depends on PPC_EARLY_DEBUG_LPAR_HVSI
	default "0x30000000"
	help
	  You probably want 0x30000000 for your first serial port and
	  0x30000001 for your second one

config PPC_EARLY_DEBUG_OPAL_VTERMNO
	hex "vterm number to use with OPAL early debug"
	depends on PPC_EARLY_DEBUG_OPAL
	default "0"
	help
	  This correspond to which /dev/hvcN you want to use for early
	  debug.

	  On OPAL v2, this will be 0 for network console and 1 or 2 for
	  the machine built-in serial ports.

config PPC_EARLY_DEBUG_44x_PHYSLOW
	hex "Low 32 bits of early debug UART physical address"
	depends on PPC_EARLY_DEBUG_44x
	default "0x40000200"
	help
	  You probably want 0x40000200 for ebony boards and
          0x40000300 for taishan

config PPC_EARLY_DEBUG_44x_PHYSHIGH
	hex "EPRN of early debug UART physical address"
	depends on PPC_EARLY_DEBUG_44x
	default "0x1"

config PPC_EARLY_DEBUG_40x_PHYSADDR
	hex "Early debug UART physical address"
	depends on PPC_EARLY_DEBUG_40x
	default "0xef600300"

config PPC_EARLY_DEBUG_CPM_ADDR
	hex "CPM UART early debug transmit descriptor address"
	depends on PPC_EARLY_DEBUG_CPM
	default "0xfa202008" if PPC_EP88XC
	default "0xf0001ff8" if CPM2
	default "0xff002008" if CPM1
	help
	  This specifies the address of the transmit descriptor
	  used for early debug output.  Because it is needed before
	  platform probing is done, all platforms selected must
	  share the same address.

config FAIL_IOMMU
	bool "Fault-injection capability for IOMMU"
	depends on FAULT_INJECTION
	depends on PCI || IBMVIO
	help
	  Provide fault-injection capability for IOMMU. Each device can
	  be selectively enabled via the fail_iommu property.

	  If you are unsure, say N.

config PPC_PTDUMP
        bool "Export kernel pagetable layout to userspace via debugfs"
        depends on DEBUG_KERNEL && DEBUG_FS
        help
	  This option exports the state of the kernel pagetables to a
	  debugfs file. This is only useful for kernel developers who are
	  working in architecture specific areas of the kernel - probably
	  not a good idea to enable this feature in a production kernel.

	  If you are unsure, say N.

config PPC_HTDUMP
	def_bool y
	depends on PPC_PTDUMP && PPC_BOOK3S

endmenu
