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

mainmenu "Linux/SuperH Kernel Configuration"

config SUPERH
	bool
	default y
	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 RWSEM_GENERIC_SPINLOCK
	bool
	default y

config RWSEM_XCHGADD_ALGORITHM
	bool

config GENERIC_HARDIRQS
	bool
	default y

config GENERIC_IRQ_PROBE
	bool
	default y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config ARCH_MAY_HAVE_PC_FDC
	bool
	default y

source "init/Kconfig"

menu "System type"

choice
	prompt "SuperH system type"
	default SH_UNKNOWN

config SH_SOLUTION_ENGINE
	bool "SolutionEngine"
	help
	  Select SolutionEngine if configuring for a Hitachi SH7709
	  or SH7750 evaluation board.

config SH_7751_SOLUTION_ENGINE
	bool "SolutionEngine7751"
	help
	  Select 7751 SolutionEngine if configuring for a Hitachi SH7751
	  evaluation board.

config SH_7300_SOLUTION_ENGINE
	bool "SolutionEngine7300"
	help
	  Select 7300 SolutionEngine if configuring for a Hitachi SH7300(SH-Mobile V)
	  evaluation board.

config SH_73180_SOLUTION_ENGINE
       bool "SolutionEngine73180"
       help
         Select 73180 SolutionEngine if configuring for a Hitachi SH73180(SH-Mobile 3)
         evaluation board.

config SH_7751_SYSTEMH
	bool "SystemH7751R"
	help
	  Select SystemH if you are configuring for a Renesas SystemH
	  7751R evaluation board.

config SH_STB1_HARP
	bool "STB1_Harp"

config SH_STB1_OVERDRIVE
	bool "STB1_Overdrive"

config SH_HP620
	bool "HP620"
	help
	  Select HP620 if configuring for a HP jornada HP620.
	  More information (hardware only) at
	  <http://www.hp.com/jornada/>.

config SH_HP680
	bool "HP680"
	help
	  Select HP680 if configuring for a HP Jornada HP680.
	  More information (hardware only) at
	  <http://www.hp.com/jornada/products/680/>.

config SH_HP690
	bool "HP690"
	help
	  Select HP690 if configuring for a HP Jornada HP690.
	  More information (hardware only)
	  at <http://www.hp.com/jornada/products/680/>.

config SH_CQREEK
	bool "CqREEK"
	help
	  Select CqREEK if configuring for a CqREEK SH7708 or SH7750.
	  More information at
	  <http://sources.redhat.com/ecos/hardware.html#SuperH>.

config SH_DMIDA
	bool "DMIDA"
	help
	  Select DMIDA if configuring for a DataMyte 4000 Industrial
	  Digital Assistant. More information at <http://www.dmida.com/>.

config SH_EC3104
	bool "EC3104"
	help
	  Select EC3104 if configuring for a system with an Eclipse
	  International EC3104 chip, e.g. the Harris AD2000.

config SH_SATURN
	bool "Saturn"
	help
	  Select Saturn if configuring for a SEGA Saturn.

config SH_DREAMCAST
	bool "Dreamcast"
	help
	  Select Dreamcast if configuring for a SEGA Dreamcast.
	  More information at
	  <http://www.m17n.org/linux-sh/dreamcast/>.  There is a
	  Dreamcast project is at <http://linuxdc.sourceforge.net/>.

config SH_CAT68701
	bool "CAT68701"

config SH_BIGSUR
	bool "BigSur"

config SH_SH2000
	bool "SH2000"
	help
	  SH-2000 is a single-board computer based around SH7709A chip
	  intended for embedded applications.
	  It has an Ethernet interface (CS8900A), direct connected
	  Compact Flash socket, three serial ports and PC-104 bus.
	  More information at <http://sh2000.sh-linux.org>.

config SH_ADX
	bool "ADX"

config SH_MPC1211
	bool "MPC1211"

config SH_SH03
	bool "SH03"
	help
	  CTP/PCI-SH03 is a CPU module computer that produced
	  by Interface Corporation.
	  It is compact and excellent in durability.
	  It will play an active part in your factory or laboratory
	  as a FA computer.
	  More information at <http://www.interface.co.jp>

config SH_SECUREEDGE5410
	bool "SecureEdge5410"
	help
	  Select SecureEdge5410 if configuring for a SnapGear SH board.
	  This includes both the OEM SecureEdge products as well as the
	  SME product line.

config SH_HS7751RVOIP
	bool "HS7751RVOIP"
	help
	  Select HS7751RVOIP if configuring for a Renesas Technology
	  Sales VoIP board.

config SH_RTS7751R2D
	bool "RTS7751R2D"
	help
	  Select RTS7751R2D if configuring for a Renesas Technology
	  Sales SH-Graphics board.

config SH_EDOSK7705
	bool "EDOSK7705"

config SH_SH4202_MICRODEV
	bool "SH4-202 MicroDev"
	help
	  Select SH4-202 MicroDev if configuring for a SuperH MicroDev board
	  with an SH4-202 CPU.

config SH_UNKNOWN
	bool "BareCPU"
	help
	  "Bare CPU" aka "unknown" means an SH-based system which is not one
	  of the specific ones mentioned above, which means you need to enter
	  all sorts of stuff like CONFIG_MEMORY_START because the config
	  system doesn't already know what it is.  You get a machine vector
	  without any platform-specific code in it, so things like the RTC may
	  not work.

	  This option is for the early stages of porting to a new machine.

endchoice

choice
	prompt "Processor family"
	default CPU_SH4
	help
	  This option determines the CPU family to compile for. Supported
	  targets are SH-2, SH-3, and SH-4. These options are independent of
	  CPU functionality. As such, SH-DSP users will still want to select
	  their respective processor family in addition to the DSP support
	  option.

config CPU_SH2
	bool "SH-2"
	select SH_WRITETHROUGH

config CPU_SH3
	bool "SH-3"

config CPU_SH4
	bool "SH-4"

endchoice

choice
	prompt "Processor subtype"

config CPU_SUBTYPE_SH7604
	bool "SH7604"
	depends on CPU_SH2
	help
	  Select SH7604 if you have SH7604

config CPU_SUBTYPE_SH7300
	bool "SH7300"
	depends on CPU_SH3

config CPU_SUBTYPE_SH7705
	bool "SH7705"
	depends on CPU_SH3

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

config CPU_SUBTYPE_SH7708
	bool "SH7708"
	depends on 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 "SH7709"
	depends on CPU_SH3
	help
	  Select SH7709 if you have a  80 Mhz SH-3 HD6417709 CPU.

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

config CPU_SUBTYPE_SH7751
	bool "SH7751/SH7751R"
	depends on 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_SH7760
	bool "SH7760"
	depends on CPU_SH4

config CPU_SUBTYPE_SH73180
       bool "SH73180"
       depends on CPU_SH4

config CPU_SUBTYPE_ST40STB1
       bool "ST40STB1 / ST40RA"
       depends on CPU_SH4
       help
         Select ST40STB1 if you have a ST40RA CPU.
         This was previously called the ST40STB1, hence the option name.

config CPU_SUBTYPE_ST40GX1
       bool "ST40GX1"
       depends on CPU_SH4
       help
         Select ST40GX1 if you have a ST40GX1 CPU.

config CPU_SUBTYPE_SH4_202
	bool "SH4-202"
	depends on CPU_SH4

endchoice

config SH7705_CACHE_32KB
    bool "Enable 32KB cache size for SH7705"
    depends on CPU_SUBTYPE_SH7705
    default y

config MMU
        bool "Support for memory management hardware"
	depends on !CPU_SH2
	default y
	help
	  Early SH processors (such as the SH7604) lack an MMU. In order to
	  boot on these systems, this option must not be set.

	  On other systems (such as the SH-3 and 4) where an MMU exists,
	  turning this off will boot the kernel on these machines with the
	  MMU implicitly switched off.

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

config HUGETLB_PAGE_SIZE_64K
	bool "64K"

config HUGETLB_PAGE_SIZE_1MB
	bool "1MB"

endchoice

config CMDLINE_BOOL
	bool "Default bootloader kernel arguments"

config CMDLINE
	string "Initial kernel command string"
	depends on CMDLINE_BOOL
	default "console=ttySC1,115200"

# Platform-specific memory start and size definitions
config MEMORY_START
	hex "Physical memory start address" if !MEMORY_SET || MEMORY_OVERRIDE
	default "0x08000000" if !MEMORY_SET || MEMORY_OVERRIDE || !MEMORY_OVERRIDE && SH_ADX || SH_MPC1211 || SH_SH03 || SH_SECUREEDGE5410 || SH_SH4202_MICRODEV
	default "0x0c000000" if !MEMORY_OVERRIDE && (SH_DREAMCAST || SH_HP600 || SH_BIGSUR || SH_SH2000 || SH_73180_SOLUTION_ENGINE || SH_7300_SOLUTION_ENGINE || SH_7751_SOLUTION_ENGINE || SH_SOLUTION_ENGINE || SH_HS7751RVOIP || SH_RTS7751R2D || SH_EDOSK7705)
	---help---
	  Computers built with Hitachi SuperH processors always
	  map the ROM starting at address zero.  But the processor
	  does not specify the range that RAM takes.

	  The physical memory (RAM) start address will be automatically
	  set to 08000000, unless you selected one of the following
	  processor types: SolutionEngine, Overdrive, HP620, HP680, HP690,
	  in which case the start address will be set to 0c000000.

	  Tweak this only when porting to a new machine which is not already
	  known by the config system.  Changing it from the known correct
	  value on any of the known systems will only lead to disaster.

config MEMORY_SIZE
	hex "Physical memory size" if !MEMORY_SET || MEMORY_OVERRIDE
	default "0x00400000" if !MEMORY_SET || MEMORY_OVERRIDE || !MEMORY_OVERRIDE && SH_ADX || !MEMORY_OVERRIDE && (SH_HP600 || SH_BIGSUR || SH_SH2000)
	default "0x01000000" if !MEMORY_OVERRIDE && SH_DREAMCAST || SH_SECUREEDGE5410 || SH_EDOSK7705
        default "0x02000000" if !MEMORY_OVERRIDE && (SH_73180_SOLUTION_ENGINE || SH_SOLUTION_ENGINE)
        default "0x04000000" if !MEMORY_OVERRIDE && (SH_7300_SOLUTION_ENGINE || SH_7751_SOLUTION_ENGINE || SH_HS7751RVOIP || SH_RTS7751R2D || SH_SH4202_MICRODEV)
	default "0x08000000" if SH_MPC1211 || SH_SH03
	help
	  This sets the default memory size assumed by your SH kernel. It can
	  be overridden as normal by the 'mem=' argument on the kernel command
	  line. If unsure, consult your board specifications or just leave it
	  as 0x00400000 which was the default value before this became
	  configurable.

config MEMORY_SET
	bool
	depends on !MEMORY_OVERRIDE && (SH_MPC1211 || SH_SH03 || SH_ADX || SH_DREAMCAST || SH_HP600 || SH_BIGSUR || SH_SH2000 || SH_7751_SOLUTION_ENGINE || SH_SOLUTION_ENGINE || SH_SECUREEDGE5410 || SH_HS7751RVOIP || SH_RTS7751R2D || SH_SH4202_MICRODEV || SH_EDOSK7705)
	default y
	help
	  This is an option about which you will never be asked a question.
	  Therefore, I conclude that you do not exist - go away.

	  There is a grue here.

# If none of the above have set memory start/size, ask the user.
config MEMORY_OVERRIDE
	bool "Override default load address and memory size"

# XXX: break these out into the board-specific configs below
config CF_ENABLER
	bool "Compact Flash Enabler support"
	depends on SH_ADX || SH_SOLUTION_ENGINE || SH_UNKNOWN || SH_CAT68701 || SH_SH03
	---help---
	  Compact Flash is a small, removable mass storage device introduced
	  in 1994 originally as a PCMCIA device.  If you say `Y' here, you
	  compile in support for Compact Flash devices directly connected to
	  a SuperH processor.  A Compact Flash FAQ is available at
	  <http://www.compactflash.org/faqs/faq.htm>.

	  If your board has "Directly Connected" CompactFlash at area 5 or 6,
	  you may want to enable this option.  Then, you can use CF as
	  primary IDE drive (only tested for SanDisk).

	  If in doubt, select 'N'.

choice
	prompt "Compact Flash Connection Area"
	depends on CF_ENABLER
	default CF_AREA6

config CF_AREA5
	bool "Area5"
	help
	  If your board has "Directly Connected" CompactFlash, You should
	  select the area where your CF is connected to.

	  - "Area5" if CompactFlash is connected to Area 5 (0x14000000)
	  - "Area6" if it is connected to Area 6 (0x18000000)

	  "Area6" will work for most boards. For ADX, select "Area5".

config CF_AREA6
	bool "Area6"

endchoice

config CF_BASE_ADDR
	hex
	depends on CF_ENABLER
	default "0xb8000000" if CF_AREA6
	default "0xb4000000" if CF_AREA5

# The SH7750 RTC module is disabled in the Dreamcast
config SH_RTC
	bool
	depends on !SH_DREAMCAST && !SH_SATURN && !SH_7300_SOLUTION_ENGINE && !SH_73180_SOLUTION_ENGINE
	default y
	help
	  Selecting this option will allow the Linux kernel to emulate
	  PC's RTC.

	  If unsure, say N.

config SH_FPU
	bool "FPU support"
	depends on !CPU_SH3
	default y
	help
	  Selecting this option will enable support for SH processors that
	  have FPU units (ie, SH77xx).

	  This option must be set in order to enable the FPU.

config SH_DSP
	bool "DSP support"
	depends on !CPU_SH4
	default y
	help
	  Selecting this option will enable support for SH processors that
	  have DSP units (ie, SH2-DSP and SH3-DSP). It is safe to say Y here
	  by default, as the existance of the DSP will be probed at runtime.

	  This option must be set in order to enable the DSP.

config SH_ADC
	bool "ADC support"
	depends on CPU_SH3
	default y
	help
	  Selecting this option will allow the Linux kernel to use SH3 on-chip
	  ADC module.

	  If unsure, say N.

config SH_HP600
	bool
	depends on SH_HP620 || SH_HP680 || SH_HP690
	default y

config CPU_SUBTYPE_ST40
       bool
       depends on CPU_SUBTYPE_ST40STB1 || CPU_SUBTYPE_ST40GX1
       default y

source "mm/Kconfig"

config ZERO_PAGE_OFFSET
	hex "Zero page offset"
	default "0x00001000" if !(SH_MPC1211 || SH_SH03)
	default "0x00004000" if SH_MPC1211 || SH_SH03
	help
	  This sets the default offset of zero page.

# XXX: needs to lose subtype for system type
config ST40_LMI_MEMORY
	bool "Memory on LMI"
	depends on CPU_SUBTYPE_ST40STB1

config MEMORY_START
	hex
	depends on CPU_SUBTYPE_ST40STB1 && ST40_LMI_MEMORY
	default "0x08000000"

config MEMORY_SIZE
	hex
	depends on CPU_SUBTYPE_ST40STB1 && ST40_LMI_MEMORY
	default "0x00400000"

config MEMORY_SET
	bool
	depends on CPU_SUBTYPE_ST40STB1 && ST40_LMI_MEMORY
	default y

config BOOT_LINK_OFFSET
	hex "Link address offset for booting"
	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 CPU_LITTLE_ENDIAN
	bool "Little Endian"
	help
	  Some SuperH machines can be configured for either little or big
	  endian byte order. These modes require different kernels. Say Y if
	  your machine is little endian, N if it's a big endian machine.

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

config UBC_WAKEUP
	bool "Wakeup UBC on startup"
	help
	  Selecting this option will wakeup the User Break Controller (UBC) on
	  startup. Although the UBC is left in an awake state when the processor
	  comes up, some boot loaders misbehave by putting the UBC to sleep in a
	  power saving state, which causes issues with things like ptrace().

	  If unsure, say N.

config SH_WRITETHROUGH
	bool "Use write-through caching"
	default y if CPU_SH2
	help
	  Selecting this option will configure the caches in write-through
	  mode, as opposed to the default write-back configuration.

	  Since there's sill some aliasing issues on SH-4, this option will
	  unfortunately still require the majority of flushing functions to
	  be implemented to deal with aliasing.

	  If unsure, say N.

config SH_OCRAM
	bool "Operand Cache RAM (OCRAM) support"
	help
	  Selecting this option will automatically tear down the number of
	  sets in the dcache by half, which in turn exposes a memory range.

	  The addresses for the OC RAM base will vary according to the
	  processor version. Consult vendor documentation for specifics.

	  If unsure, say N.

config SH_STORE_QUEUES
	bool "Support for Store Queues"
	depends on CPU_SH4
	help
	  Selecting this option will enable an in-kernel API for manipulating
	  the store queues integrated in the SH-4 processors.

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

	  If you say N here, the kernel will run on single 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,
	  singleprocessor machines. On a singleprocessor 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 the <file:Documentation/smp.txt>,
	  <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 "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 HS7751RVOIP_CODEC
	bool "Support VoIP Codec section"
	depends on SH_HS7751RVOIP
	help
	  Selecting this option will support CODEC section.

config RTS7751R2D_REV11
	bool "RTS7751R2D Rev. 1.1 board support"
	depends on SH_RTS7751R2D
	help
	  Selecting this option will support version rev. 1.1.

config SH_PCLK_CALC
	bool
	default n if CPU_SUBTYPE_SH7300 || CPU_SUBTYPE_SH73180
	default y
	help
	  This option will cause the PCLK value to be probed at run-time. It
	  will display a notification if the probed value has greater than a
	  1% variance of the hardcoded CONFIG_SH_PCLK_FREQ.

config SH_PCLK_FREQ
	int "Peripheral clock frequency (in Hz)"
	default "50000000" if CPU_SUBTYPE_SH7750
	default "60000000" if CPU_SUBTYPE_SH7751
	default "33333333" if CPU_SUBTYPE_SH7300
	default "27000000" if CPU_SUBTYPE_SH73180
	default "66000000" if CPU_SUBTYPE_SH4_202
	default "1193182"
	help
	  This option is used to specify the peripheral clock frequency. This
	  option must be set for each processor in order for the kernel to
	  function reliably. If no sane default exists, we use a default from
	  the legacy i8254. Any discrepancies will be reported on boot time
	  with an auto-probed frequency which should be considered the proper
	  value for your hardware.

menu "CPU Frequency scaling"

source "drivers/cpufreq/Kconfig"

config SH_CPU_FREQ
	tristate "SuperH CPU Frequency driver"
	depends on CPU_FREQ
	select CPU_FREQ_TABLE
	help
	  This adds the cpufreq driver for SuperH. At present, only
	  the SH-4 is supported.

	  For details, take a look at <file:Documentation/cpu-freq>.

	  If unsure, say N.

endmenu

source "arch/sh/drivers/dma/Kconfig"

source "arch/sh/cchips/Kconfig"

config HEARTBEAT
	bool "Heartbeat LED"
	depends on SH_MPC1211 || SH_SH03 || SH_CAT68701 || SH_STB1_HARP || SH_STB1_OVERDRIVE || SH_BIGSUR || SH_7751_SOLUTION_ENGINE || SH_7300_SOLUTION_ENGINE || SH_73180_SOLUTION_ENGINE || SH_SOLUTION_ENGINE || SH_RTS7751R2D || SH_SH4202_MICRODEV
	help
	  Use the power-on LED on your machine as a load meter.  The exact
	  behavior is platform-dependent, but normally the flash frequency is
	  a hyperbolic function of the 5-minute load average.

config RTC_9701JE
	tristate "EPSON RTC-9701JE support"
	depends on SH_RTS7751R2D
	help
	  Selecting this option will support EPSON RTC-9701JE.

endmenu

config ISA_DMA_API
	bool
	depends on MPC1211
	default y

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

# Even on SuperH devices which don't have an ISA bus,
# this variable helps the PCMCIA modules handle
# IRQ requesting properly -- Greg Banks.
#
# Though we're generally not interested in it when
# we're not using PCMCIA, so we make it dependent on
# PCMCIA outright. -- PFM.
config ISA
	bool
	default y if PCMCIA || SMC91X
	help
	  Find out whether you have ISA slots on your motherboard.  ISA 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 PCI, EISA, MicroChannel
	  (MCA) or VESA.  ISA is an older system, now being displaced by PCI;
	  newer boards don't support it.  If you have ISA, say Y, otherwise N.

config EISA
	bool
	---help---
	  The Extended Industry Standard Architecture (EISA) bus was
	  developed as an open alternative to the IBM MicroChannel bus.

	  The EISA bus provided some of the features of the IBM MicroChannel
	  bus while maintaining backward compatibility with cards made for
	  the older ISA bus.  The EISA bus saw limited use between 1988 and
	  1995 when it was made obsolete by the PCI bus.

	  Say Y here if you are building a kernel for an EISA-based machine.

	  Otherwise, say N.

config MCA
	bool
	help
	  MicroChannel Architecture is found in some IBM PS/2 machines and
	  laptops.  It is a bus system similar to PCI or ISA. See
	  <file:Documentation/mca.txt> (and especially the web page given
	  there) before attempting to build an MCA bus kernel.

config SBUS
	bool

config MAPLE
	tristate "Maple Bus support"
	depends on SH_DREAMCAST
	default y

source "arch/sh/drivers/pci/Kconfig"

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/sh/oprofile/Kconfig"

source "arch/sh/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
