config SUPERH
	def_bool y
	select ARCH_MIGHT_HAVE_PC_PARPORT
	select EXPERT
	select CLKDEV_LOOKUP
	select HAVE_IDE if HAS_IOPORT_MAP
	select HAVE_MEMBLOCK
	select HAVE_MEMBLOCK_NODE_MAP
	select ARCH_DISCARD_MEMBLOCK
	select HAVE_OPROFILE
	select HAVE_GENERIC_DMA_COHERENT
	select HAVE_ARCH_TRACEHOOK
	select HAVE_DMA_API_DEBUG
	select HAVE_DMA_ATTRS
	select HAVE_PERF_EVENTS
	select HAVE_DEBUG_BUGVERBOSE
	select ARCH_HAVE_CUSTOM_GPIO_H
	select ARCH_HAVE_NMI_SAFE_CMPXCHG if (GUSA_RB || CPU_SH4A)
	select PERF_USE_VMALLOC
	select HAVE_DEBUG_KMEMLEAK
	select HAVE_KERNEL_GZIP
	select HAVE_KERNEL_BZIP2
	select HAVE_KERNEL_LZMA
	select HAVE_KERNEL_XZ
	select HAVE_KERNEL_LZO
	select HAVE_UID16
	select ARCH_WANT_IPC_PARSE_VERSION
	select HAVE_SYSCALL_TRACEPOINTS
	select HAVE_REGS_AND_STACK_ACCESS_API
	select MAY_HAVE_SPARSE_IRQ
	select IRQ_FORCED_THREADING
	select RTC_LIB
	select GENERIC_ATOMIC64
	select GENERIC_IRQ_SHOW
	select GENERIC_SMP_IDLE_THREAD
	select GENERIC_IDLE_POLL_SETUP
	select GENERIC_CLOCKEVENTS
	select GENERIC_CMOS_UPDATE if SH_SH03 || SH_DREAMCAST
	select GENERIC_STRNCPY_FROM_USER
	select GENERIC_STRNLEN_USER
	select HAVE_MOD_ARCH_SPECIFIC if DWARF_UNWINDER
	select MODULES_USE_ELF_RELA
	select OLD_SIGSUSPEND
	select OLD_SIGACTION
	select HAVE_ARCH_AUDITSYSCALL
	help
	  The SuperH is a RISC processor targeted for use in embedded systems
	  and consumer electronics; it was also used in the Sega Dreamcast
	  gaming console.  The SuperH port has a home page at
	  <http://www.linux-sh.org/>.

config SUPERH32
	def_bool ARCH = "sh"
	select HAVE_KPROBES
	select HAVE_KRETPROBES
	select HAVE_IOREMAP_PROT if MMU && !X2TLB
	select HAVE_FUNCTION_TRACER
	select HAVE_FTRACE_MCOUNT_RECORD
	select HAVE_DYNAMIC_FTRACE
	select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE
	select ARCH_WANT_IPC_PARSE_VERSION
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_ARCH_KGDB
	select HAVE_HW_BREAKPOINT
	select HAVE_MIXED_BREAKPOINTS_REGS
	select PERF_EVENTS
	select ARCH_HIBERNATION_POSSIBLE if MMU
	select SPARSE_IRQ
	select HAVE_CC_STACKPROTECTOR

config SUPERH64
	def_bool ARCH = "sh64"
	select KALLSYMS

config ARCH_DEFCONFIG
	string
	default "arch/sh/configs/shx3_defconfig" if SUPERH32
	default "arch/sh/configs/cayman_defconfig" if SUPERH64

config RWSEM_GENERIC_SPINLOCK
	def_bool y

config RWSEM_XCHGADD_ALGORITHM
	bool

config GENERIC_BUG
	def_bool y
	depends on BUG && SUPERH32

config GENERIC_CSUM
	def_bool y
	depends on SUPERH64

config GENERIC_HWEIGHT
	def_bool y

config GENERIC_CALIBRATE_DELAY
	bool

config GENERIC_LOCKBREAK
	def_bool y
	depends on SMP && PREEMPT

config ARCH_SUSPEND_POSSIBLE
	def_bool n

config ARCH_HIBERNATION_POSSIBLE
	def_bool n

config SYS_SUPPORTS_APM_EMULATION
	bool
	select ARCH_SUSPEND_POSSIBLE

config SYS_SUPPORTS_HUGETLBFS
	bool

config SYS_SUPPORTS_SMP
	bool

config SYS_SUPPORTS_NUMA
	bool

config SYS_SUPPORTS_PCI
	bool

config STACKTRACE_SUPPORT
	def_bool y

config LOCKDEP_SUPPORT
	def_bool y

config HAVE_LATENCYTOP_SUPPORT
	def_bool y

config ARCH_HAS_ILOG2_U32
	def_bool n

config ARCH_HAS_ILOG2_U64
	def_bool n

config NO_IOPORT_MAP
	def_bool !PCI
	depends on !SH_CAYMAN && !SH_SH4202_MICRODEV && !SH_SHMIN && \
		   !SH_HP6XX && !SH_SOLUTION_ENGINE

config IO_TRAPPED
	bool

config SWAP_IO_SPACE
	bool

config DMA_COHERENT
	bool

config DMA_NONCOHERENT
	def_bool !DMA_COHERENT

config NEED_DMA_MAP_STATE
	def_bool DMA_NONCOHERENT

config NEED_SG_DMA_LENGTH
	def_bool y

source "init/Kconfig"

source "kernel/Kconfig.freezer"

menu "System type"

#
# Processor families
#
config CPU_SH2
	bool
	select SH_INTC

config CPU_SH2A
	bool
	select CPU_SH2
	select UNCACHED_MAPPING

config CPU_SH3
	bool
	select CPU_HAS_INTEVT
	select CPU_HAS_SR_RB
	select SH_INTC
	select SYS_SUPPORTS_SH_TMU

config CPU_SH4
	bool
	select CPU_HAS_INTEVT
	select CPU_HAS_SR_RB
	select CPU_HAS_FPU if !CPU_SH4AL_DSP
	select SH_INTC
	select SYS_SUPPORTS_SH_TMU
	select SYS_SUPPORTS_HUGETLBFS if MMU

config CPU_SH4A
	bool
	select CPU_SH4

config CPU_SH4AL_DSP
	bool
	select CPU_SH4A
	select CPU_HAS_DSP

config CPU_SH5
	bool
	select CPU_HAS_FPU
	select SYS_SUPPORTS_SH_TMU
	select SYS_SUPPORTS_HUGETLBFS if MMU

config CPU_SHX2
	bool

config CPU_SHX3
	bool
	select DMA_COHERENT
	select SYS_SUPPORTS_SMP
	select SYS_SUPPORTS_NUMA

config ARCH_SHMOBILE
	bool
	select ARCH_SUSPEND_POSSIBLE
	select PM
	select PM_RUNTIME

config CPU_HAS_PMU
       depends on CPU_SH4 || CPU_SH4A
       default y
       bool

if SUPERH32

choice
	prompt "Processor sub-type selection"

#
# Processor subtypes
#

# SH-2 Processor Support

config CPU_SUBTYPE_SH7619
	bool "Support SH7619 processor"
	select CPU_SH2
	select SYS_SUPPORTS_SH_CMT

# SH-2A Processor Support

config CPU_SUBTYPE_SH7201
	bool "Support SH7201 processor"
	select CPU_SH2A
	select CPU_HAS_FPU
	select SYS_SUPPORTS_SH_MTU2
 
config CPU_SUBTYPE_SH7203
	bool "Support SH7203 processor"
	select CPU_SH2A
	select CPU_HAS_FPU
	select SYS_SUPPORTS_SH_CMT
	select SYS_SUPPORTS_SH_MTU2
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select PINCTRL

config CPU_SUBTYPE_SH7206
	bool "Support SH7206 processor"
	select CPU_SH2A
	select SYS_SUPPORTS_SH_CMT
	select SYS_SUPPORTS_SH_MTU2

config CPU_SUBTYPE_SH7263
	bool "Support SH7263 processor"
	select CPU_SH2A
	select CPU_HAS_FPU
	select SYS_SUPPORTS_SH_CMT
	select SYS_SUPPORTS_SH_MTU2

config CPU_SUBTYPE_SH7264
	bool "Support SH7264 processor"
	select CPU_SH2A
	select CPU_HAS_FPU
	select SYS_SUPPORTS_SH_CMT
	select SYS_SUPPORTS_SH_MTU2
	select PINCTRL

config CPU_SUBTYPE_SH7269
	bool "Support SH7269 processor"
	select CPU_SH2A
	select CPU_HAS_FPU
	select SYS_SUPPORTS_SH_CMT
	select SYS_SUPPORTS_SH_MTU2
	select PINCTRL

config CPU_SUBTYPE_MXG
	bool "Support MX-G processor"
	select CPU_SH2A
	select SYS_SUPPORTS_SH_MTU2
	help
	  Select MX-G if running on an R8A03022BG part.

# SH-3 Processor Support

config CPU_SUBTYPE_SH7705
	bool "Support SH7705 processor"
	select CPU_SH3

config CPU_SUBTYPE_SH7706
	bool "Support SH7706 processor"
	select CPU_SH3
	help
	  Select SH7706 if you have a 133 Mhz SH-3 HD6417706 CPU.

config CPU_SUBTYPE_SH7707
	bool "Support SH7707 processor"
	select CPU_SH3
	help
	  Select SH7707 if you have a  60 Mhz SH-3 HD6417707 CPU.

config CPU_SUBTYPE_SH7708
	bool "Support SH7708 processor"
	select CPU_SH3
	help
	  Select SH7708 if you have a  60 Mhz SH-3 HD6417708S or
	  if you have a 100 Mhz SH-3 HD6417708R CPU.

config CPU_SUBTYPE_SH7709
	bool "Support SH7709 processor"
	select CPU_SH3
	help
	  Select SH7709 if you have a  80 Mhz SH-3 HD6417709 CPU.

config CPU_SUBTYPE_SH7710
	bool "Support SH7710 processor"
	select CPU_SH3
	select CPU_HAS_DSP
	help
	  Select SH7710 if you have a SH3-DSP SH7710 CPU.

config CPU_SUBTYPE_SH7712
	bool "Support SH7712 processor"
	select CPU_SH3
	select CPU_HAS_DSP
	help
	  Select SH7712 if you have a SH3-DSP SH7712 CPU.

config CPU_SUBTYPE_SH7720
	bool "Support SH7720 processor"
	select CPU_SH3
	select CPU_HAS_DSP
	select SYS_SUPPORTS_SH_CMT
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select USB_OHCI_SH if USB_OHCI_HCD
	select PINCTRL
	help
	  Select SH7720 if you have a SH3-DSP SH7720 CPU.

config CPU_SUBTYPE_SH7721
	bool "Support SH7721 processor"
	select CPU_SH3
	select CPU_HAS_DSP
	select SYS_SUPPORTS_SH_CMT
	select USB_OHCI_SH if USB_OHCI_HCD
	help
	  Select SH7721 if you have a SH3-DSP SH7721 CPU.

# SH-4 Processor Support

config CPU_SUBTYPE_SH7750
	bool "Support SH7750 processor"
	select CPU_SH4
	help
	  Select SH7750 if you have a 200 Mhz SH-4 HD6417750 CPU.

config CPU_SUBTYPE_SH7091
	bool "Support SH7091 processor"
	select CPU_SH4
	help
	  Select SH7091 if you have an SH-4 based Sega device (such as
	  the Dreamcast, Naomi, and Naomi 2).

config CPU_SUBTYPE_SH7750R
	bool "Support SH7750R processor"
	select CPU_SH4

config CPU_SUBTYPE_SH7750S
	bool "Support SH7750S processor"
	select CPU_SH4

config CPU_SUBTYPE_SH7751
	bool "Support SH7751 processor"
	select CPU_SH4
	help
	  Select SH7751 if you have a 166 Mhz SH-4 HD6417751 CPU,
	  or if you have a HD6417751R CPU.

config CPU_SUBTYPE_SH7751R
	bool "Support SH7751R processor"
	select CPU_SH4

config CPU_SUBTYPE_SH7760
	bool "Support SH7760 processor"
	select CPU_SH4

config CPU_SUBTYPE_SH4_202
	bool "Support SH4-202 processor"
	select CPU_SH4

# SH-4A Processor Support

config CPU_SUBTYPE_SH7723
	bool "Support SH7723 processor"
	select CPU_SH4A
	select CPU_SHX2
	select ARCH_SHMOBILE
	select ARCH_SPARSEMEM_ENABLE
	select SYS_SUPPORTS_SH_CMT
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select PINCTRL
	help
	  Select SH7723 if you have an SH-MobileR2 CPU.

config CPU_SUBTYPE_SH7724
	bool "Support SH7724 processor"
	select CPU_SH4A
	select CPU_SHX2
	select ARCH_SHMOBILE
	select ARCH_SPARSEMEM_ENABLE
	select SYS_SUPPORTS_SH_CMT
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select PINCTRL
	help
	  Select SH7724 if you have an SH-MobileR2R CPU.

config CPU_SUBTYPE_SH7734
	bool "Support SH7734 processor"
	select CPU_SH4A
	select CPU_SHX2
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select PINCTRL
	help
	  Select SH7734 if you have a SH4A SH7734 CPU.

config CPU_SUBTYPE_SH7757
	bool "Support SH7757 processor"
	select CPU_SH4A
	select CPU_SHX2
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select PINCTRL
	help
	  Select SH7757 if you have a SH4A SH7757 CPU.

config CPU_SUBTYPE_SH7763
	bool "Support SH7763 processor"
	select CPU_SH4A
	select USB_OHCI_SH if USB_OHCI_HCD
	help
	  Select SH7763 if you have a SH4A SH7763(R5S77631) CPU.

config CPU_SUBTYPE_SH7770
	bool "Support SH7770 processor"
	select CPU_SH4A

config CPU_SUBTYPE_SH7780
	bool "Support SH7780 processor"
	select CPU_SH4A

config CPU_SUBTYPE_SH7785
	bool "Support SH7785 processor"
	select CPU_SH4A
	select CPU_SHX2
	select ARCH_SPARSEMEM_ENABLE
	select SYS_SUPPORTS_NUMA
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select PINCTRL

config CPU_SUBTYPE_SH7786
	bool "Support SH7786 processor"
	select CPU_SH4A
	select CPU_SHX3
	select CPU_HAS_PTEAEX
	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select USB_OHCI_SH if USB_OHCI_HCD
	select USB_EHCI_SH if USB_EHCI_HCD
	select PINCTRL

config CPU_SUBTYPE_SHX3
	bool "Support SH-X3 processor"
	select CPU_SH4A
	select CPU_SHX3
	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
	select ARCH_REQUIRE_GPIOLIB
	select PINCTRL

# SH4AL-DSP Processor Support

config CPU_SUBTYPE_SH7343
	bool "Support SH7343 processor"
	select CPU_SH4AL_DSP
	select ARCH_SHMOBILE
	select SYS_SUPPORTS_SH_CMT

config CPU_SUBTYPE_SH7722
	bool "Support SH7722 processor"
	select CPU_SH4AL_DSP
	select CPU_SHX2
	select ARCH_SHMOBILE
	select ARCH_SPARSEMEM_ENABLE
	select SYS_SUPPORTS_NUMA
	select SYS_SUPPORTS_SH_CMT
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select PINCTRL

config CPU_SUBTYPE_SH7366
	bool "Support SH7366 processor"
	select CPU_SH4AL_DSP
	select CPU_SHX2
	select ARCH_SHMOBILE
	select ARCH_SPARSEMEM_ENABLE
	select SYS_SUPPORTS_NUMA
	select SYS_SUPPORTS_SH_CMT

endchoice

endif

if SUPERH64

choice
	prompt "Processor sub-type selection"

# SH-5 Processor Support

config CPU_SUBTYPE_SH5_101
	bool "Support SH5-101 processor"
	select CPU_SH5

config CPU_SUBTYPE_SH5_103
	bool "Support SH5-103 processor"
	select CPU_SH5

endchoice

endif

source "arch/sh/mm/Kconfig"
 
source "arch/sh/Kconfig.cpu"

source "arch/sh/boards/Kconfig"

menu "Timer and clock configuration"

config SH_PCLK_FREQ
	int "Peripheral clock frequency (in Hz)"
	depends on SH_CLK_CPG_LEGACY
	default "31250000" if CPU_SUBTYPE_SH7619
	default "33333333" if CPU_SUBTYPE_SH7770 || \
			      CPU_SUBTYPE_SH7760 || \
			      CPU_SUBTYPE_SH7705 || \
			      CPU_SUBTYPE_SH7203 || \
			      CPU_SUBTYPE_SH7206 || \
			      CPU_SUBTYPE_SH7263 || \
			      CPU_SUBTYPE_MXG
	default "60000000" if CPU_SUBTYPE_SH7751 || CPU_SUBTYPE_SH7751R
	default "66000000" if CPU_SUBTYPE_SH4_202
	default "50000000"
	help
	  This option is used to specify the peripheral clock frequency.
	  This is necessary for determining the reference clock value on
	  platforms lacking an RTC.

config SH_CLK_CPG
	def_bool y

config SH_CLK_CPG_LEGACY
	depends on SH_CLK_CPG
	def_bool y if !CPU_SUBTYPE_SH7785 && !ARCH_SHMOBILE && \
		      !CPU_SHX3 && !CPU_SUBTYPE_SH7757 && \
		      !CPU_SUBTYPE_SH7734 && !CPU_SUBTYPE_SH7264 && \
		      !CPU_SUBTYPE_SH7269

endmenu

menu "CPU Frequency scaling"
source "drivers/cpufreq/Kconfig"
endmenu

source "arch/sh/drivers/Kconfig"

endmenu

menu "Kernel features"

source kernel/Kconfig.hz

config KEXEC
	bool "kexec system call (EXPERIMENTAL)"
	depends on SUPERH32 && MMU
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
	  but it is independent of the system firmware.  And like a reboot
	  you can start any kernel with it, not just Linux.

	  The name comes from the similarity to the exec system call.

	  It is an ongoing process to be certain the hardware in a machine
	  is properly shutdown, so do not be surprised if this code does not
	  initially work for you.  As of this writing the exact hardware
	  interface is strongly in flux, so no good recommendation can be
	  made.

config CRASH_DUMP
	bool "kernel crash dumps (EXPERIMENTAL)"
	depends on SUPERH32 && BROKEN_ON_SMP
	help
	  Generate crash dump after being started by kexec.
	  This should be normally only set in special crash dump kernels
	  which are loaded in the main kernel with kexec-tools into
	  a specially reserved region and then later executed after
	  a crash by kdump/kexec. The crash dump kernel must be compiled
	  to a memory address not used by the main kernel using
	  PHYSICAL_START.

	  For more details see Documentation/kdump/kdump.txt

config KEXEC_JUMP
	bool "kexec jump (EXPERIMENTAL)"
	depends on SUPERH32 && KEXEC && HIBERNATION
	help
	  Jump between original kernel and kexeced kernel and invoke
	  code via KEXEC

config PHYSICAL_START
	hex "Physical address where the kernel is loaded" if (EXPERT || CRASH_DUMP)
	default MEMORY_START
	---help---
	  This gives the physical address where the kernel is loaded
	  and is ordinarily the same as MEMORY_START.

	  Different values are primarily used in the case of kexec on panic
	  where the fail safe kernel needs to run at a different address
	  than the panic-ed kernel.

config SECCOMP
	bool "Enable seccomp to safely compute untrusted bytecode"
	depends on PROC_FS
	help
	  This kernel feature is useful for number crunching applications
	  that may need to compute untrusted bytecode during their
	  execution. By using pipes or other transports made available to
	  the process as file descriptors supporting the read/write
	  syscalls, it's possible to isolate those applications in
	  their own address space using seccomp. Once seccomp is
	  enabled via prctl, it cannot be disabled and the task is only
	  allowed to execute a few safe syscalls defined by each seccomp
	  mode.

	  If unsure, say N.

config SMP
	bool "Symmetric multi-processing support"
	depends on SYS_SUPPORTS_SMP
	---help---
	  This enables support for systems with more than one CPU. If you have
	  a system with only one CPU, say N. If you have a system with more
	  than one CPU, say Y.

	  If you say N here, the kernel will run on uni- and multiprocessor
	  machines, but will use only one CPU of a multiprocessor machine. If
	  you say Y here, the kernel will run on many, but not all,
	  uniprocessor machines. On a uniprocessor machine, the kernel
	  will run faster if you say N here.

	  People using multiprocessor machines who say Y here should also say
	  Y to "Enhanced Real Time Clock Support", below.

	  See also <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO
	  available at <http://www.tldp.org/docs.html#howto>.

	  If you don't know what to do here, say N.

config NR_CPUS
	int "Maximum number of CPUs (2-32)"
	range 2 32
	depends on SMP
	default "4" if CPU_SUBTYPE_SHX3
	default "2"
	help
	  This allows you to specify the maximum number of CPUs which this
	  kernel will support.  The maximum supported value is 32 and the
	  minimum value which makes sense is 2.

	  This is purely to save memory - each supported CPU adds
	  approximately eight kilobytes to the kernel image.

config HOTPLUG_CPU
	bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
	depends on SMP
	help
	  Say Y here to experiment with turning CPUs off and on.  CPUs
	  can be controlled through /sys/devices/system/cpu.

source "kernel/Kconfig.preempt"

config GUSA
	def_bool y
	depends on !SMP && SUPERH32
	help
	  This enables support for gUSA (general UserSpace Atomicity).
	  This is the default implementation for both UP and non-ll/sc
	  CPUs, and is used by the libc, amongst others.

	  For additional information, design information can be found 
	  in <http://lc.linux.or.jp/lc2002/papers/niibe0919p.pdf>.

	  This should only be disabled for special cases where alternate
	  atomicity implementations exist.

config GUSA_RB
	bool "Implement atomic operations by roll-back (gRB) (EXPERIMENTAL)"
	depends on GUSA && CPU_SH3 || (CPU_SH4 && !CPU_SH4A)
	help
	  Enabling this option will allow the kernel to implement some
	  atomic operations using a software implementation of load-locked/
	  store-conditional (LLSC). On machines which do not have hardware
	  LLSC, this should be more efficient than the other alternative of
	  disabling interrupts around the atomic sequence.

config HW_PERF_EVENTS
	bool "Enable hardware performance counter support for perf events"
	depends on PERF_EVENTS && CPU_HAS_PMU
	default y
	help
	  Enable hardware performance counter support for perf events. If
	  disabled, perf events will use software events only.

source "drivers/sh/Kconfig"

endmenu

menu "Boot options"

config ZERO_PAGE_OFFSET
	hex
	default "0x00010000" if PAGE_SIZE_64KB || SH_RTS7751R2D || \
				SH_7751_SOLUTION_ENGINE
	default "0x00004000" if PAGE_SIZE_16KB || SH_SH03
	default "0x00002000" if PAGE_SIZE_8KB
	default "0x00001000"
	help
	  This sets the default offset of zero page.

config BOOT_LINK_OFFSET
	hex
	default "0x00210000" if SH_SHMIN
	default "0x00400000" if SH_CAYMAN
	default "0x00810000" if SH_7780_SOLUTION_ENGINE
	default "0x009e0000" if SH_TITAN
	default "0x01800000" if SH_SDK7780
	default "0x02000000" if SH_EDOSK7760
	default "0x00800000"
	help
	  This option allows you to set the link address offset of the zImage.
	  This can be useful if you are on a board which has a small amount of
	  memory.

config ENTRY_OFFSET
	hex
	default "0x00001000" if PAGE_SIZE_4KB
	default "0x00002000" if PAGE_SIZE_8KB
	default "0x00004000" if PAGE_SIZE_16KB
	default "0x00010000" if PAGE_SIZE_64KB
	default "0x00000000"

config ROMIMAGE_MMCIF
	bool "Include MMCIF loader in romImage (EXPERIMENTAL)"
	depends on CPU_SUBTYPE_SH7724
	help
	  Say Y here to include experimental MMCIF loading code in
	  romImage. With this enabled it is possible to write the romImage
	  kernel image to an MMC card and boot the kernel straight from
	  the reset vector. At reset the processor Mask ROM will load the
	  first part of the romImage which in turn loads the rest the kernel
	  image to RAM using the MMCIF hardware block.

choice
	prompt "Kernel command line"
	optional
	default CMDLINE_OVERWRITE
	help
	  Setting this option allows the kernel command line arguments
	  to be set.

config CMDLINE_OVERWRITE
	bool "Overwrite bootloader kernel arguments"
	help
	  Given string will overwrite any arguments passed in by
	  a bootloader.

config CMDLINE_EXTEND
	bool "Extend bootloader kernel arguments"
	help
	  Given string will be concatenated with arguments passed in
	  by a bootloader.

endchoice

config CMDLINE
	string "Kernel command line arguments string"
	depends on CMDLINE_OVERWRITE || CMDLINE_EXTEND
	default "console=ttySC1,115200"

endmenu

menu "Bus options"

config SUPERHYWAY
	tristate "SuperHyway Bus support"
	depends on CPU_SUBTYPE_SH4_202

config MAPLE
	bool "Maple Bus support"
	depends on SH_DREAMCAST
	help
	 The Maple Bus is SEGA's serial communication bus for peripherals
	 on the Dreamcast. Without this bus support you won't be able to
	 get your Dreamcast keyboard etc to work, so most users
	 probably want to say 'Y' here, unless you are only using the
	 Dreamcast with a serial line terminal or a remote network
	 connection.

config PCI
	bool "PCI support"
	depends on SYS_SUPPORTS_PCI
	select PCI_DOMAINS
	select GENERIC_PCI_IOMAP
	select NO_GENERIC_PCI_IOPORT_MAP
	help
	  Find out whether you have a PCI motherboard. PCI is the name of a
	  bus system, i.e. the way the CPU talks to the other stuff inside
	  your box. If you have PCI, say Y, otherwise N.

config PCI_DOMAINS
	bool

source "drivers/pci/pcie/Kconfig"

source "drivers/pci/Kconfig"

source "drivers/pcmcia/Kconfig"

source "drivers/pci/hotplug/Kconfig"

endmenu

menu "Executable file formats"

source "fs/Kconfig.binfmt"

endmenu

menu "Power management options (EXPERIMENTAL)"

source "kernel/power/Kconfig"

source "drivers/cpuidle/Kconfig"

endmenu

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/sh/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
