config MMU
	bool
	default y

config ZONE_DMA
	bool
	default y

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

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config NO_IOPORT_MAP
	def_bool y if !PCI

config FORCE_MAX_ZONEORDER
	int
	default 6

config TRACE_IRQFLAGS_SUPPORT
	depends on ETRAX_ARCH_V32
	def_bool y

config STACKTRACE_SUPPORT
	def_bool y

config LOCKDEP_SUPPORT
	depends on ETRAX_ARCH_V32
	def_bool y

config CRIS
	bool
	default y
	select HAVE_IDE
	select GENERIC_ATOMIC64
	select HAVE_UID16
	select VIRT_TO_BUS
	select ARCH_WANT_IPC_PARSE_VERSION
	select GENERIC_IRQ_SHOW
	select GENERIC_IOMAP
	select MODULES_USE_ELF_RELA
	select CLONE_BACKWARDS2
	select HAVE_EXIT_THREAD if ETRAX_ARCH_V32
	select OLD_SIGSUSPEND
	select OLD_SIGACTION
	select GPIOLIB
	select IRQ_DOMAIN if ETRAX_ARCH_V32
	select OF if ETRAX_ARCH_V32
	select OF_EARLY_FLATTREE if ETRAX_ARCH_V32
	select CLKSRC_MMIO if ETRAX_ARCH_V32
	select GENERIC_CLOCKEVENTS if ETRAX_ARCH_V32
	select GENERIC_SCHED_CLOCK if ETRAX_ARCH_V32
	select HAVE_DEBUG_BUGVERBOSE if ETRAX_ARCH_V32
	select HAVE_NMI

config HZ
	int
	default 100

config NR_CPUS
	int
	default "1"

config BUILTIN_DTB
	string "DTB to build into the kernel image"
	depends on OF

source "init/Kconfig"

source "kernel/Kconfig.freezer"

menu "General setup"

source "fs/Kconfig.binfmt"

config ETRAX_CMDLINE
	string "Kernel command line"
	default "root=/dev/mtdblock3"
	help
	  Pass additional commands to the kernel.

config ETRAX_WATCHDOG
	bool "Enable ETRAX watchdog"
	help
	  Enable the built-in watchdog timer support on ETRAX based embedded
	  network computers.

config ETRAX_WATCHDOG_NICE_DOGGY
	bool "Disable watchdog during Oops printouts"
	depends on ETRAX_WATCHDOG
	help
	  By enabling this you make sure that the watchdog does not bite while
	  printing oopses. Recommended for development systems but not for
	  production releases.

config ETRAX_FAST_TIMER
       bool "Enable ETRAX fast timer API"
       help
         This options enables the API to a fast timer implementation using
	 timer1 to get sub jiffie resolution timers (primarily one-shot
	 timers).
	 This is needed if CONFIG_ETRAX_SERIAL_FAST_TIMER is enabled.

config ETRAX_KMALLOCED_MODULES
	bool "Enable module allocation with kmalloc"
	help
	  Enable module allocation with kmalloc instead of vmalloc.

source "kernel/Kconfig.preempt"

source mm/Kconfig

endmenu

menu "Hardware setup"

choice
	prompt "Processor type"
	default ETRAX100LX

config ETRAX100LX
	bool "ETRAX-100LX-v1"
	select ARCH_USES_GETTIMEOFFSET
	help
	  Support version 1 of the ETRAX 100LX.

config ETRAX100LX_V2
	bool "ETRAX-100LX-v2"
	select ARCH_USES_GETTIMEOFFSET
	help
	  Support version 2 of the ETRAX 100LX.

config ETRAXFS
	bool "ETRAX-FS-V32"
	help
	  Support CRIS V32.

config CRIS_MACH_ARTPEC3
        bool "ARTPEC-3"
        help
          Support Axis ARTPEC-3.

endchoice

config ETRAX_ARCH_V10
       bool
       default y if ETRAX100LX || ETRAX100LX_V2
       default n if !(ETRAX100LX || ETRAX100LX_V2)
       select TTY

config ETRAX_ARCH_V32
       bool
       default y if (ETRAXFS || CRIS_MACH_ARTPEC3)
       default n if !(ETRAXFS || CRIS_MACH_ARTPEC3)

config ETRAX_DRAM_SIZE
	int "DRAM size (dec, in MB)"
	default "8"
	help
	  Size of DRAM (decimal in MB) typically 2, 8 or 16.

config ETRAX_VMEM_SIZE
       int "Video memory size (dec, in MB)"
       depends on ETRAX_ARCH_V32 && !ETRAXFS
       default 8 if !ETRAXFS
       help
	Size of Video accessible memory (decimal, in MB).

config ETRAX_FLASH_BUSWIDTH
	int "Buswidth of NOR flash in bytes"
	default "2"
	help
	  Width in bytes of the NOR Flash bus (1, 2 or 4). Is usually 2.

config ETRAX_FLASH1_SIZE
       int "FLASH1 size (dec, in MB. 0 = Unknown)"
       default "0"

choice
	prompt "Product debug-port"
	default ETRAX_DEBUG_PORT0

config ETRAX_DEBUG_PORT0
	bool "Serial-0"
	help
	  Choose a serial port for the ETRAX debug console.  Default to
	  port 0.

config ETRAX_DEBUG_PORT1
	bool "Serial-1"
	help
	  Use serial port 1 for the console.

config ETRAX_DEBUG_PORT2
	bool "Serial-2"
	help
	  Use serial port 2 for the console.

config ETRAX_DEBUG_PORT3
	bool "Serial-3"
	help
	  Use serial port 3 for the console.

config ETRAX_DEBUG_PORT_NULL
	bool "disabled"
	help
	  Disable serial-port debugging.

endchoice

choice
	prompt "Kernel GDB port"
	depends on ETRAX_KGDB
	default ETRAX_KGDB_PORT0
	help
	  Choose a serial port for kernel debugging.  NOTE: This port should
	  not be enabled under Drivers for built-in interfaces (as it has its
	  own initialization code) and should not be the same as the debug port.

config ETRAX_KGDB_PORT0
	bool "Serial-0"
	help
	  Use serial port 0 for kernel debugging.

config ETRAX_KGDB_PORT1
	bool "Serial-1"
	help
	  Use serial port 1 for kernel debugging.

config ETRAX_KGDB_PORT2
	bool "Serial-2"
	help
	  Use serial port 2 for kernel debugging.

config ETRAX_KGDB_PORT3
	bool "Serial-3"
	help
	  Use serial port 3 for kernel debugging.

endchoice

source arch/cris/arch-v10/Kconfig
source arch/cris/arch-v32/Kconfig

endmenu

source "net/Kconfig"

# bring in ETRAX built-in drivers
menu "Drivers for built-in interfaces"
source arch/cris/arch-v10/drivers/Kconfig
source arch/cris/arch-v32/drivers/Kconfig

config ETRAX_AXISFLASHMAP
	bool "Axis flash-map support"
	select MTD
	select MTD_CFI
	select MTD_CFI_AMDSTD
	select MTD_JEDECPROBE if ETRAX_ARCH_V32
	select MTD_BLOCK
	select MTD_COMPLEX_MAPPINGS
	help
	  This option enables MTD mapping of flash devices.  Needed to use
	  flash memories.  If unsure, say Y.

config ETRAX_SYNCHRONOUS_SERIAL
	bool "Synchronous serial-port support"
	help
	  Select this to enable the synchronous serial port driver.

config ETRAX_SYNCHRONOUS_SERIAL_PORT0
	bool "Synchronous serial port 0 enabled"
	depends on ETRAX_SYNCHRONOUS_SERIAL
	help
	  Enabled synchronous serial port 0.

config ETRAX_SYNCHRONOUS_SERIAL0_DMA
	bool "Enable DMA on synchronous serial port 0."
	depends on ETRAX_SYNCHRONOUS_SERIAL_PORT0
	help
	  A synchronous serial port can run in manual or DMA mode.
	  Selecting this option will make it run in DMA mode.

config ETRAX_SYNCHRONOUS_SERIAL_PORT1
	bool "Synchronous serial port 1 enabled"
	depends on ETRAX_SYNCHRONOUS_SERIAL && (ETRAXFS || ETRAX_ARCH_V10)
	help
	  Enabled synchronous serial port 1.

config ETRAX_SYNCHRONOUS_SERIAL1_DMA
	bool "Enable DMA on synchronous serial port 1."
	depends on ETRAX_SYNCHRONOUS_SERIAL_PORT1
	help
	  A synchronous serial port can run in manual or DMA mode.
	  Selecting this option will make it run in DMA mode.

choice
	prompt "Network LED behavior"
	depends on ETRAX_ETHERNET
	default ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY

config ETRAX_NETWORK_LED_ON_WHEN_LINK
	bool "LED_on_when_link"
	help
	  Selecting LED_on_when_link will light the LED when there is a
	  connection and will flash off when there is activity.

	  Selecting LED_on_when_activity will light the LED only when
	  there is activity.

	  This setting will also affect the behaviour of other activity LEDs
	  e.g. Bluetooth.

config ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY
	bool "LED_on_when_activity"
	help
	  Selecting LED_on_when_link will light the LED when there is a
	  connection and will flash off when there is activity.

	  Selecting LED_on_when_activity will light the LED only when
	  there is activity.

	  This setting will also affect the behaviour of other activity LEDs
	  e.g. Bluetooth.

endchoice

choice
	prompt "Ser0 DMA out channel"
	depends on ETRAX_SERIAL_PORT0
	default ETRAX_SERIAL_PORT0_DMA6_OUT if ETRAX_ARCH_V32
	default ETRAX_SERIAL_PORT0_NO_DMA_OUT if ETRAX_ARCH_V10

config ETRAX_SERIAL_PORT0_NO_DMA_OUT
	bool "Ser0 uses no DMA for output"
	help
	  Do not use DMA for ser0 output.

config ETRAX_SERIAL_PORT0_DMA6_OUT
	bool "Ser0 uses DMA6 for output"
	depends on ETRAXFS
	help
	  Enables the DMA6 output channel for ser0 (ttyS0).
	  If you do not enable DMA, an interrupt for each character will be
	  used when transmitting data.
	  Normally you want to use DMA, unless you use the DMA channel for
	  something else.

config ETRAX_SERIAL_PORT0_DMA0_OUT
	bool "Ser0 uses DMA0 for output"
	depends on CRIS_MACH_ARTPEC3
	help
	  Enables the DMA0 output channel for ser0 (ttyS0).
	  If you do not enable DMA, an interrupt for each character will be
	  used when transmitting data.
	  Normally you want to use DMA, unless you use the DMA channel for
	  something else.

endchoice

choice
	prompt "Ser0 DMA in channel "
	depends on ETRAX_SERIAL_PORT0
	default ETRAX_SERIAL_PORT0_NO_DMA_IN if ETRAX_ARCH_V32
	default ETRAX_SERIAL_PORT0_DMA7_IN if ETRAX_ARCH_V10
	help
	  What DMA channel to use for ser0.

config ETRAX_SERIAL_PORT0_NO_DMA_IN
	bool "Ser0 uses no DMA for input"
	help
	  Do not use DMA for ser0 input.

config ETRAX_SERIAL_PORT0_DMA7_IN
	bool "Ser0 uses DMA7 for input"
	depends on ETRAXFS
	help
	  Enables the DMA7 input channel for ser0 (ttyS0).
	  If you do not enable DMA, an interrupt for each character will be
	  used when receiving data.
	  Normally you want to use DMA, unless you use the DMA channel for
	  something else.

config ETRAX_SERIAL_PORT0_DMA1_IN
	bool "Ser0 uses DMA1 for input"
	depends on CRIS_MACH_ARTPEC3
	help
	  Enables the DMA1 input channel for ser0 (ttyS0).
	  If you do not enable DMA, an interrupt for each character will be
	  used when receiving data.
	  Normally you want to use DMA, unless you use the DMA channel for
	  something else.

endchoice

choice
	prompt "Ser1 DMA in channel "
	depends on ETRAX_SERIAL_PORT1
	default ETRAX_SERIAL_PORT1_NO_DMA_IN if ETRAX_ARCH_V32
	default ETRAX_SERIAL_PORT1_DMA9_IN if ETRAX_ARCH_V10
	help
	  What DMA channel to use for ser1.

config ETRAX_SERIAL_PORT1_NO_DMA_IN
	bool "Ser1 uses no DMA for input"
	help
	  Do not use DMA for ser1 input.

config ETRAX_SERIAL_PORT1_DMA5_IN
	bool "Ser1 uses DMA5 for input"
	depends on ETRAX_ARCH_V32
	help
	  Enables the DMA5 input channel for ser1 (ttyS1).
	  If you do not enable DMA, an interrupt for each character will be
	  used when receiving data.
	  Normally you want this on, unless you use the DMA channel for
	  something else.

config ETRAX_SERIAL_PORT1_DMA9_IN
	depends on ETRAX_ARCH_V10
	bool "Ser1 uses DMA9 for input"

endchoice


choice
	prompt "Ser1 DMA out channel"
	depends on ETRAX_SERIAL_PORT1
	default ETRAX_SERIAL_PORT1_NO_DMA_OUT if ETRAX_ARCH_V32
	default ETRAX_SERIAL_PORT1_DMA8_OUT if ETRAX_ARCH_V10
	help
	  What DMA channel to use for ser1.

config ETRAX_SERIAL_PORT1_NO_DMA_OUT
	bool "Ser1 uses no DMA for output"
	help
	  Do not use DMA for ser1 output.

config ETRAX_SERIAL_PORT1_DMA8_OUT
	depends on ETRAX_ARCH_V10
	bool "Ser1 uses DMA8 for output"

config ETRAX_SERIAL_PORT1_DMA4_OUT
	depends on ETRAX_ARCH_V32
	bool "Ser1 uses DMA4 for output"
	help
	  Enables the DMA4 output channel for ser1 (ttyS1).
	  If you do not enable DMA, an interrupt for each character will be
	  used when transmitting data.
	  Normally you want this on, unless you use the DMA channel for
	  something else.

endchoice

choice
	prompt "Ser2 DMA out channel"
	depends on ETRAX_SERIAL_PORT2
	default ETRAX_SERIAL_PORT2_NO_DMA_OUT if ETRAX_ARCH_V32
	default ETRAX_SERIAL_PORT2_DMA2_OUT if ETRAX_ARCH_V10

config ETRAX_SERIAL_PORT2_NO_DMA_OUT
	bool "Ser2 uses no DMA for output"
	help
	  Do not use DMA for ser2 output.

config ETRAX_SERIAL_PORT2_DMA2_OUT
	bool "Ser2 uses DMA2 for output"
	depends on ETRAXFS || ETRAX_ARCH_V10
	help
	  Enables the DMA2 output channel for ser2 (ttyS2).
	  If you do not enable DMA, an interrupt for each character will be
	  used when transmitting data.
	  Normally you want to use DMA, unless you use the DMA channel for
	  something else.

config ETRAX_SERIAL_PORT2_DMA6_OUT
	bool "Ser2 uses DMA6 for output"
	depends on CRIS_MACH_ARTPEC3
	help
	  Enables the DMA6 output channel for ser2 (ttyS2).
	  If you do not enable DMA, an interrupt for each character will be
	  used when transmitting data.
	  Normally you want to use DMA, unless you use the DMA channel for
	  something else.

endchoice

choice
	prompt "Ser2 DMA in channel"
	depends on ETRAX_SERIAL_PORT2
	default ETRAX_SERIAL_PORT2_NO_DMA_IN if ETRAX_ARCH_V32
	default ETRAX_SERIAL_PORT2_DMA3_IN if ETRAX_ARCH_V10
	help
	  What DMA channel to use for ser2.

config ETRAX_SERIAL_PORT2_NO_DMA_IN
	bool "Ser2 uses no DMA for input"
	help
	  Do not use DMA for ser2 input.

config ETRAX_SERIAL_PORT2_DMA3_IN
	bool "Ser2 uses DMA3 for input"
	depends on ETRAXFS || ETRAX_ARCH_V10
	help
	  Enables the DMA3 input channel for ser2 (ttyS2).
	  If you do not enable DMA, an interrupt for each character will be
	  used when receiving data.
	  Normally you want to use DMA, unless you use the DMA channel for
	  something else.

config ETRAX_SERIAL_PORT2_DMA7_IN
	bool "Ser2 uses DMA7 for input"
	depends on CRIS_MACH_ARTPEC3
	help
	  Enables the DMA7 input channel for ser2 (ttyS2).
	  If you do not enable DMA, an interrupt for each character will be
	  used when receiving data.
	  Normally you want to use DMA, unless you use the DMA channel for
	  something else.

endchoice

choice
	prompt "Ser3 DMA in channel"
	depends on ETRAX_SERIAL_PORT3
	default ETRAX_SERIAL_PORT3_NO_DMA_IN if ETRAX_ARCH_V32
	default ETRAX_SERIAL_PORT3_DMA5_IN if ETRAX_ARCH_V10
	help
	  What DMA channel to use for ser3.

config ETRAX_SERIAL_PORT3_NO_DMA_IN
	bool "Ser3 uses no DMA for input"
	help
	  Do not use DMA for ser3 input.

config ETRAX_SERIAL_PORT3_DMA5_IN
	depends on ETRAX_ARCH_V10
	bool "DMA 5"

endchoice

choice
	prompt "Ser3 DMA out channel"
	depends on ETRAX_SERIAL_PORT3
	default ETRAX_SERIAL_PORT3_NO_DMA_OUT if ETRAX_ARCH_V32
	default ETRAX_SERIAL_PORT3_DMA4_OUT if ETRAX_ARCH_V10

config ETRAX_SERIAL_PORT3_NO_DMA_OUT
	bool "Ser3 uses no DMA for output"
	help
	  Do not use DMA for ser3 output.

config ETRAX_SERIAL_PORT3_DMA4_OUT
	depends on ETRAX_ARCH_V10
	bool "DMA 4"

endchoice

endmenu

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/cris/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
