#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/config-language.txt.
#

mainmenu "Linux/SH64 Kernel Configuration"

config SUPERH
	bool
	default y

config SUPERH64
	bool
	default y

config MMU
	bool
	default y

config QUICKLIST
	def_bool y

config RWSEM_GENERIC_SPINLOCK
	bool
	default y

config GENERIC_FIND_NEXT_BIT
	bool
	default y

config GENERIC_HWEIGHT
	bool
	default y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config GENERIC_HARDIRQS
	bool
	default y

config GENERIC_IRQ_PROBE
	bool
	default y

config RWSEM_XCHGADD_ALGORITHM
	bool

config ARCH_HAS_ILOG2_U32
	bool
	default n

config ARCH_HAS_ILOG2_U64
	bool
	default n

config ARCH_NO_VIRT_TO_BUS
	def_bool y

source init/Kconfig

menu "System type"

choice
	prompt "SuperH system type"
	default SH_SIMULATOR

config SH_SIMULATOR
	bool "Simulator"

config SH_CAYMAN
	bool "Cayman"

config SH_HARP
	bool "ST50-Harp"

endchoice

choice
	prompt "Processor family"
	default CPU_SH5

config CPU_SH5
	bool "SH-5"

endchoice

choice
	prompt "Processor type"

config CPU_SUBTYPE_SH5_101
	bool "SH5-101"
	depends on CPU_SH5

config CPU_SUBTYPE_SH5_103
	bool "SH5-103"
	depends on CPU_SH5

endchoice

choice
	prompt "Endianness"
	default LITTLE_ENDIAN

config LITTLE_ENDIAN
	bool "Little-Endian"

config BIG_ENDIAN
	bool "Big-Endian"

endchoice

config SH_FPU
	bool "FPU support"
	default y

config SH64_FPU_DENORM_FLUSH
	depends on SH_FPU
	bool "Flush floating point denorms to zero"

choice
	prompt "Page table levels"
	default SH64_PGTABLE_2_LEVEL

config SH64_PGTABLE_2_LEVEL
	bool "2"

config SH64_PGTABLE_3_LEVEL
	bool "3"

endchoice

choice
	prompt "HugeTLB page size"
	depends on HUGETLB_PAGE && MMU
	default HUGETLB_PAGE_SIZE_64K

config HUGETLB_PAGE_SIZE_64K
	bool "64K"

config HUGETLB_PAGE_SIZE_1MB
	bool "1MB"

config HUGETLB_PAGE_SIZE_512MB
	bool "512MB"

endchoice

config SH64_USER_MISALIGNED_FIXUP
	bool "Fixup misaligned loads/stores occurring in user mode"

comment "Memory options"

config CACHED_MEMORY_OFFSET
	hex "Cached Area Offset"
	default "20000000"

config MEMORY_START
	hex "Physical memory start address"
	default "80000000"

config MEMORY_SIZE_IN_MB
	int "Memory size (in MB)"
	default "8" if SH_SIMULATOR
	default "64"

comment "Cache options"

choice
	prompt "DCache mode"
	default DCACHE_DISABLED if SH_SIMULATOR
	default DCACHE_WRITE_BACK

config DCACHE_WRITE_BACK
	bool "Write-back"
	depends on !SH_SIMULATOR

config DCACHE_WRITE_THROUGH
	bool "Write-through"
	depends on !SH_SIMULATOR

config DCACHE_DISABLED
	bool "Disabled"

endchoice

config ICACHE_DISABLED
	bool "ICache Disabling"

config PCIDEVICE_MEMORY_START
	hex
	default "C0000000"

config DEVICE_MEMORY_START
	hex
	default "E0000000"

config FLASH_MEMORY_START
	hex "Flash memory/on-chip devices start address"
	default "00000000"

config PCI_BLOCK_START
	hex "PCI block start address"
	default "40000000"

comment "CPU Subtype specific options"

config SH64_ID2815_WORKAROUND
	bool "Include workaround for SH5-101 cut2 silicon defect ID2815"

comment "Misc options"

config HEARTBEAT
	bool "Heartbeat LED"
	depends on SH_CAYMAN

config HDSP253_LED
	bool "Support for HDSP-253 LED"
	depends on SH_CAYMAN

config SH_DMA
	tristate "DMA controller (DMAC) support"

config PREEMPT
	bool "Preemptible Kernel (EXPERIMENTAL)"
	depends on EXPERIMENTAL

source "mm/Kconfig"

endmenu

menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"

config ISA
	bool

config SBUS
	bool

config PCI
	bool "PCI support"
	depends on SH_CAYMAN
	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. Other bus systems are ISA, EISA, MicroChannel (MCA) or
	  VESA. If you have PCI, say Y, otherwise N.

	  The PCI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>, contains valuable
	  information about which PCI hardware does work under Linux and which
	  doesn't.

config SH_PCIDMA_NONCOHERENT
	bool "Cache and PCI noncoherent"
	depends on PCI
	default y
	help
	  Enable this option if your platform does not have a CPU cache which
	  remains coherent with PCI DMA. It is safest to say 'Y', although you
	  will see better performance if you can say 'N', because the PCI DMA
	  code will not have to flush the CPU's caches. If you have a PCI host
	  bridge integrated with your SH CPU, refer carefully to the chip specs
	  to see if you can say 'N' here. Otherwise, leave it as 'Y'.

source "drivers/pci/Kconfig"

source "drivers/pcmcia/Kconfig"

source "drivers/pci/hotplug/Kconfig"

endmenu

menu "Executable file formats"

source "fs/Kconfig.binfmt"

endmenu

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/sh64/oprofile/Kconfig"

source "arch/sh64/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
