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

mainmenu "Linux Kernel Configuration"

config AVR32
	def_bool y
	# With EMBEDDED=n, we get lots of stuff automatically selected
	# that we usually don't need on AVR32.
	select EMBEDDED
	select HAVE_OPROFILE
	select HAVE_KPROBES
	help
	  AVR32 is a high-performance 32-bit RISC microprocessor core,
	  designed for cost-sensitive embedded applications, with particular
	  emphasis on low power consumption and high code density.

	  There is an AVR32 Linux project with a web page at
	  http://avr32linux.org/.

config GENERIC_GPIO
	def_bool y

config GENERIC_HARDIRQS
	def_bool y

config STACKTRACE_SUPPORT
	def_bool y

config LOCKDEP_SUPPORT
	def_bool y

config TRACE_IRQFLAGS_SUPPORT
	def_bool y

config HARDIRQS_SW_RESEND
	def_bool y

config GENERIC_IRQ_PROBE
	def_bool y

config RWSEM_GENERIC_SPINLOCK
	def_bool y

config GENERIC_TIME
	def_bool y

config RWSEM_XCHGADD_ALGORITHM
	def_bool n

config ARCH_HAS_ILOG2_U32
	def_bool n

config ARCH_HAS_ILOG2_U64
	def_bool n

config GENERIC_HWEIGHT
	def_bool y

config GENERIC_CALIBRATE_DELAY
	def_bool y

config GENERIC_BUG
	def_bool y
	depends on BUG

source "init/Kconfig"

menu "System Type and features"

config SUBARCH_AVR32B
	bool
config MMU
	bool
config PERFORMANCE_COUNTERS
	bool

config PLATFORM_AT32AP
	bool
	select SUBARCH_AVR32B
	select MMU
	select PERFORMANCE_COUNTERS
	select HAVE_GPIO_LIB

#
# CPU types
#

# AP7000 derivatives
config CPU_AT32AP700X
	bool
	select PLATFORM_AT32AP
config CPU_AT32AP7000
	bool
	select CPU_AT32AP700X
config CPU_AT32AP7001
	bool
	select CPU_AT32AP700X
config CPU_AT32AP7002
	bool
	select CPU_AT32AP700X

choice
	prompt "AVR32 board type"
	default BOARD_ATSTK1000

config BOARD_ATSTK1000
	bool "ATSTK1000 evaluation board"

config BOARD_ATNGW100
	bool "ATNGW100 Network Gateway"
	select CPU_AT32AP7000
endchoice

if BOARD_ATSTK1000
source "arch/avr32/boards/atstk1000/Kconfig"
endif

choice
	prompt "Boot loader type"
	default LOADER_U_BOOT

config	LOADER_U_BOOT
	bool "U-Boot (or similar) bootloader"
endchoice

source "arch/avr32/mach-at32ap/Kconfig"

config LOAD_ADDRESS
	hex
	default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP700X=y

config ENTRY_ADDRESS
	hex
	default 0x90000000 if LOADER_U_BOOT=y && CPU_AT32AP700X=y

config PHYS_OFFSET
	hex
	default 0x10000000 if CPU_AT32AP700X=y

source "kernel/Kconfig.preempt"

config HAVE_ARCH_BOOTMEM_NODE
	def_bool n

config ARCH_HAVE_MEMORY_PRESENT
	def_bool n

config NEED_NODE_MEMMAP_SIZE
	def_bool n

config ARCH_FLATMEM_ENABLE
	def_bool y

config ARCH_DISCONTIGMEM_ENABLE
	def_bool n

config ARCH_SPARSEMEM_ENABLE
	def_bool n

source "mm/Kconfig"

config OWNERSHIP_TRACE
	bool "Ownership trace support"
	default y
	help
	  Say Y to generate an Ownership Trace message on every context switch,
	  enabling Nexus-compliant debuggers to keep track of the PID of the
	  currently executing task.

config NMI_DEBUGGING
	bool "NMI Debugging"
	default n
	help
	  Say Y here and pass the nmi_debug command-line parameter to
	  the kernel to turn on NMI debugging. Depending on the value
	  of the nmi_debug option, various pieces of information will
	  be dumped to the console when a Non-Maskable Interrupt
	  happens.

# FPU emulation goes here

source "kernel/Kconfig.hz"

config CMDLINE
	string "Default kernel command line"
	default ""
	help
	  If you don't have a boot loader capable of passing a command line string
	  to the kernel, you may specify one here. As a minimum, you should specify
	  the memory size and the root device (e.g., mem=8M, root=/dev/nfs).

endmenu

menu "Power management options"

menu "CPU Frequency scaling"

source "drivers/cpufreq/Kconfig"

config CPU_FREQ_AT32AP
	bool "CPU frequency driver for AT32AP"
	depends on CPU_FREQ && PLATFORM_AT32AP
	default n
	help
	  This enables the CPU frequency driver for AT32AP processors.

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

	  If in doubt, say N.

endmenu

endmenu

menu "Bus options"

config PCI
	bool

source "drivers/pci/Kconfig"

source "drivers/pcmcia/Kconfig"

endmenu

menu "Executable file formats"
source "fs/Kconfig.binfmt"
endmenu

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/avr32/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
