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

mainmenu "Linux/M32R Kernel Configuration"

config M32R
	bool
	default y

config SBUS
	bool

config GENERIC_ISA_DMA
	bool
	default y

config ZONE_DMA
	bool
	default y

config GENERIC_HARDIRQS
	bool
	default y

config GENERIC_IRQ_PROBE
	bool
	default y

config NO_IOPORT
	def_bool y

config NO_DMA
	def_bool y

source "init/Kconfig"


menu "Processor type and features"

choice
	prompt "Platform Type"
	default PLAT_MAPPI

config PLAT_MAPPI
	bool "Mappi-I"
	help
	  The Mappi-I is an FPGA board for SOC (System-On-a-Chip) prototyping.
	  You can operate a Linux system on this board by using an M32R
	  softmacro core, which is a fully-synthesizable functional model
	  described in Verilog-HDL.

	  The Mappi-I board was the first platform, which had been used
	  to port and develop a Linux system for the M32R processor.
	  Currently, the Mappi-II, an heir to the Mappi-I, is available.

config PLAT_USRV
	bool "uServer"
	select PLAT_HAS_INT1ICU

config PLAT_M32700UT
	bool "M32700UT"
	select PLAT_HAS_INT0ICU
	select PLAT_HAS_INT1ICU
	select PLAT_HAS_INT2ICU
	help
	  The M3T-M32700UT is an evaluation board based on uT-Engine
	  specification.  This board has an M32700 (Chaos) evaluation chip.
	  You can say Y for SMP, because the M32700 is a single chip
	  multiprocessor.

config PLAT_OPSPUT
	bool "OPSPUT"
	select PLAT_HAS_INT0ICU
	select PLAT_HAS_INT1ICU
	select PLAT_HAS_INT2ICU
	help
	  The OPSPUT is an evaluation board based on uT-Engine
	  specification.  This board has a OPSP-REP chip.

config PLAT_OAKS32R
	bool "OAKS32R"
	help
	  The OAKS32R is a tiny, inexpensive evaluation board.
	  Please note that if you say Y here and choose chip "M32102",
	  say N for MMU and select a no-MMU version kernel, otherwise
	  a kernel with MMU support will not work, because the M32102
	  is a microcontroller for embedded systems and it has no MMU.

config PLAT_MAPPI2
       bool "Mappi-II(M3A-ZA36/M3A-ZA52)"

config PLAT_MAPPI3
       bool "Mappi-III(M3A-2170)"

config PLAT_M32104UT
	bool "M32104UT"
	select PLAT_HAS_INT1ICU
	help
	  The M3T-M32104UT is an reference board based on uT-Engine
	  specification.  This board has a M32104 chip.

endchoice

choice
	prompt "Processor family"
	default CHIP_M32700

config CHIP_M32700
	bool "M32700 (Chaos)"

config CHIP_M32102
	bool "M32102"

config CHIP_M32104
	bool "M32104"
	depends on PLAT_M32104UT

config CHIP_VDEC2
       bool "VDEC2"

config CHIP_OPSP
       bool "OPSP"

endchoice

config MMU
	bool "Support for memory management hardware"
	depends on CHIP_M32700 || CHIP_VDEC2 || CHIP_OPSP
	default y

config TLB_ENTRIES
       int "TLB Entries"
       depends on CHIP_M32700 || CHIP_VDEC2 || CHIP_OPSP
       default 32 if CHIP_M32700 || CHIP_OPSP
       default 16 if CHIP_VDEC2


config ISA_M32R
        bool
	depends on CHIP_M32102 || CHIP_M32104
	default y

config ISA_M32R2
	bool
	depends on CHIP_M32700 || CHIP_VDEC2 || CHIP_OPSP
	default y

config ISA_DSP_LEVEL2
	bool
	depends on CHIP_M32700 || CHIP_OPSP
	default y

config ISA_DUAL_ISSUE
	bool
	depends on CHIP_M32700 || CHIP_OPSP
	default y

config PLAT_HAS_INT0ICU
	bool
	default n

config PLAT_HAS_INT1ICU
	bool
	default n

config PLAT_HAS_INT2ICU
	bool
	default n

config BUS_CLOCK
	int "Bus Clock [Hz] (integer)"
	default "70000000" if PLAT_MAPPI
	default "25000000" if PLAT_USRV
	default "50000000" if PLAT_MAPPI3
	default "50000000" if PLAT_M32700UT
	default "50000000" if PLAT_OPSPUT
	default "54000000" if PLAT_M32104UT
	default "33333333" if PLAT_OAKS32R
	default "20000000" if PLAT_MAPPI2

config TIMER_DIVIDE
	int "Timer divider (integer)"
	default "128"

config CPU_LITTLE_ENDIAN
        bool "Generate little endian code"
	default n

config MEMORY_START
	hex "Physical memory start address (hex)"
	default "08000000" if PLAT_MAPPI || PLAT_MAPPI2 || PLAT_MAPPI3
	default "08000000" if PLAT_USRV
	default "08000000" if PLAT_M32700UT
	default "08000000" if PLAT_OPSPUT
	default "04000000" if PLAT_M32104UT
	default "01000000" if PLAT_OAKS32R

config MEMORY_SIZE
	hex "Physical memory size (hex)"
	default "08000000" if PLAT_MAPPI3
	default "04000000" if PLAT_MAPPI || PLAT_MAPPI2
	default "02000000" if PLAT_USRV
	default "01000000" if PLAT_M32700UT
	default "01000000" if PLAT_OPSPUT
	default "01000000" if PLAT_M32104UT
	default "00800000" if PLAT_OAKS32R

config NOHIGHMEM
	bool
	default y

config ARCH_DISCONTIGMEM_ENABLE
	bool "Internal RAM Support"
	depends on CHIP_M32700 || CHIP_M32102 || CHIP_VDEC2 || CHIP_OPSP || CHIP_M32104
	default y

source "mm/Kconfig"

config IRAM_START
	hex "Internal memory start address (hex)"
	default "00f00000" if !CHIP_M32104
	default "00700000" if CHIP_M32104
	depends on (CHIP_M32700 || CHIP_M32102 || CHIP_VDEC2 || CHIP_OPSP || CHIP_M32104) && DISCONTIGMEM

config IRAM_SIZE
	hex "Internal memory size (hex)"
	depends on (CHIP_M32700 || CHIP_M32102 || CHIP_VDEC2 || CHIP_OPSP || CHIP_M32104) && DISCONTIGMEM
	default "00080000" if CHIP_M32700
	default "00010000" if CHIP_M32102 || CHIP_OPSP || CHIP_M32104
	default "00008000" if CHIP_VDEC2

#
# Define implied options from the CPU selection here
#

config GENERIC_LOCKBREAK
	bool
	default y
	depends on SMP && PREEMPT

config RWSEM_GENERIC_SPINLOCK
	bool
	depends on M32R
	default y

config RWSEM_XCHGADD_ALGORITHM
	bool
	default n

config ARCH_HAS_ILOG2_U32
	bool
	default n

config ARCH_HAS_ILOG2_U64
	bool
	default n

config GENERIC_FIND_NEXT_BIT
	bool
	default y

config GENERIC_HWEIGHT
	bool
	default y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config SCHED_NO_NO_OMIT_FRAME_POINTER
        bool
        default y

config PREEMPT
	bool "Preemptible Kernel"
	help
	  This option reduces the latency of the kernel when reacting to
	  real-time or interactive events by allowing a low priority process to
	  be preempted even if it is in kernel mode executing a system call.
	  This allows applications to run more reliably even when the system is
	  under load.

	  Say Y here if you are building a kernel for a desktop, embedded
	  or real-time system.  Say N if you are unsure.

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. The "Advanced Power
	  Management" code will be disabled if you say Y here.

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

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

config CHIP_M32700_TS1
	bool "Workaround code for the M32700 TS1 chip's bug"
	depends on (CHIP_M32700 && SMP)
	default 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.

# Common NUMA Features
config NUMA
	bool "Numa Memory Allocation Support"
	depends on SMP && BROKEN
	default n

config NODES_SHIFT
	int
	default "1"
	depends on NEED_MULTIPLE_NODES

# turning this on wastes a bunch of space.
# Summit needs it only when NUMA is on
config BOOT_IOREMAP
	bool
	depends on NUMA
	default n

endmenu


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

config PCI
	bool "PCI support"
	depends on BROKEN
	default n
	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.

choice
	prompt "PCI access mode"
	depends on PCI
	default PCI_GOANY

config PCI_GOBIOS
	bool "BIOS"
	---help---
	  On PCI systems, the BIOS can be used to detect the PCI devices and
	  determine their configuration. However, some old PCI motherboards
	  have BIOS bugs and may crash if this is done. Also, some embedded
	  PCI-based systems don't have any BIOS at all. Linux can also try to
	  detect the PCI hardware directly without using the BIOS.

	  With this option, you can specify how Linux should detect the PCI
	  devices. If you choose "BIOS", the BIOS will be used, if you choose
	  "Direct", the BIOS won't be used, and if you choose "Any", the
	  kernel will try the direct access method and falls back to the BIOS
	  if that doesn't work. If unsure, go with the default, which is
	  "Any".

config PCI_GODIRECT
	bool "Direct"

config PCI_GOANY
	bool "Any"

endchoice

config PCI_BIOS
	bool
	depends on PCI && (PCI_GOBIOS || PCI_GOANY)
	default y

config PCI_DIRECT
	bool
 	depends on PCI && (PCI_GODIRECT || PCI_GOANY)
	default y

source "drivers/pci/Kconfig"

config ISA
	bool "ISA support"
	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.  If you have ISA, say Y, otherwise N.

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 "kernel/Kconfig.instrumentation"

source "arch/m32r/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
