#
# 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
	select HAVE_IDE
	select HAVE_OPROFILE
	select INIT_ALL_POSSIBLE

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

config HZ
	int
	default 100

config GENERIC_TIME
	def_bool y

config ARCH_USES_GETTIMEOFFSET
	def_bool y

source "init/Kconfig"

source "kernel/Kconfig.freezer"


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 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_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"
	select USE_GENERIC_SMP_HELPERS
	---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 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

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/m32r/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
