menu "Kernel hacking"

config TRACE_IRQFLAGS_SUPPORT
	bool
	default y

source "lib/Kconfig.debug"

config SH_STANDARD_BIOS
	bool "Use LinuxSH standard BIOS"
	help
	  Say Y here if your target has the gdb-sh-stub
	  package from www.m17n.org (or any conforming standard LinuxSH BIOS)
	  in FLASH or EPROM.  The kernel will use standard BIOS calls during
	  boot for various housekeeping tasks (including calls to read and
	  write characters to a system console, get a MAC address from an
	  on-board Ethernet interface, and shut down the hardware).  Note this
	  does not work with machines with an existing operating system in
	  mask ROM and no flash (WindowsCE machines fall in this category).
	  If unsure, say N.

config EARLY_SCIF_CONSOLE
	bool "Use early SCIF console"
	help
	  This enables an early console using a fixed SCIF port. This can
	  be used by platforms that are either not running the SH
	  standard BIOS, or do not wish to use the BIOS callbacks for the
	  serial I/O.

config EARLY_SCIF_CONSOLE_PORT
	hex
	depends on EARLY_SCIF_CONSOLE
	default "0xffe00000" if CPU_SUBTYPE_SH7780
	default "0xffea0000" if CPU_SUBTYPE_SH7785
	default "0xfffe9800" if CPU_SUBTYPE_SH7206
	default "0xf8420000" if CPU_SUBTYPE_SH7619
	default "0xa4400000" if CPU_SUBTYPE_SH7712 || CPU_SUBTYPE_SH7705
	default "0xa4430000" if CPU_SUBTYPE_SH7720
	default "0xffc30000" if CPU_SUBTYPE_SHX3
	default "0xffe80000" if CPU_SH4
	default "0x00000000"

config EARLY_PRINTK
	bool "Early printk support"
	depends on SH_STANDARD_BIOS || EARLY_SCIF_CONSOLE
	help
	  Say Y here to redirect kernel printk messages to the serial port
	  used by the SH-IPL bootloader, starting very early in the boot
	  process and ending when the kernel's serial console is initialised.
	  This option is only useful porting the kernel to a new machine,
	  when the kernel may crash or hang before the serial console is
	  initialised. If unsure, say N.

	  On devices that are running SH-IPL and want to keep the port
	  initialization consistent while not using the BIOS callbacks,
	  select both the EARLY_SCIF_CONSOLE and SH_STANDARD_BIOS, using
	  the kernel command line option to toggle back and forth.

config DEBUG_BOOTMEM
	depends on DEBUG_KERNEL
	bool "Debug BOOTMEM initialization"

config DEBUG_STACKOVERFLOW
	bool "Check for stack overflows"
	depends on DEBUG_KERNEL
	help
	  This option will cause messages to be printed if free stack space
	  drops below a certain limit.

config DEBUG_STACK_USAGE
	bool "Stack utilization instrumentation"
	depends on DEBUG_KERNEL
	help
	  Enables the display of the minimum amount of free stack which each
	  task has ever had available in the sysrq-T and sysrq-P debug output.

	  This option will slow down process creation somewhat.

config 4KSTACKS
	bool "Use 4Kb for kernel stacks instead of 8Kb"
	depends on DEBUG_KERNEL
	help
	  If you say Y here the kernel will use a 4Kb stacksize for the
	  kernel stack attached to each process/thread. This facilitates
	  running more threads on a system and also reduces the pressure
	  on the VM subsystem for higher order allocations. This option
	  will also use IRQ stacks to compensate for the reduced stackspace.

config SH_KGDB
	bool "Include KGDB kernel debugger"
	select FRAME_POINTER
	select DEBUG_INFO
	depends on CPU_SH3 || CPU_SH4
	help
	  Include in-kernel hooks for kgdb, the Linux kernel source level
	  debugger.  See <http://kgdb.sourceforge.net/> for more information.
	  Unless you are intending to debug the kernel, say N here.

menu "KGDB configuration options"
	depends on SH_KGDB

config MORE_COMPILE_OPTIONS
	bool "Add any additional compile options"
	help
	  If you want to add additional CFLAGS to the kernel build, enable this
	  option and then enter what you would like to add in the next question.
	  Note however that -g is already appended with the selection of KGDB.

config COMPILE_OPTIONS
	string "Additional compile arguments"
	depends on MORE_COMPILE_OPTIONS

config KGDB_NMI
	bool "Enter KGDB on NMI"
	default n

config SH_KGDB_CONSOLE
	bool "Console messages through GDB"
	depends on !SERIAL_SH_SCI_CONSOLE
	select SERIAL_CORE_CONSOLE
	default n

config KGDB_SYSRQ
	bool "Allow SysRq 'G' to enter KGDB"
	default y

comment "Serial port setup"

config KGDB_DEFPORT
	int "Port number (ttySCn)"
	default "1"

config KGDB_DEFBAUD
	int "Baud rate"
	default "115200"

choice
	prompt "Parity"
	depends on SH_KGDB
	default KGDB_DEFPARITY_N

config KGDB_DEFPARITY_N
	bool "None"

config KGDB_DEFPARITY_E
	bool "Even"

config KGDB_DEFPARITY_O
	bool "Odd"

endchoice

choice
	prompt "Data bits"
	depends on SH_KGDB
	default KGDB_DEFBITS_8

config KGDB_DEFBITS_8
	bool "8"

config KGDB_DEFBITS_7
	bool "7"

endchoice

endmenu

endmenu
