#
# 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_CLK
	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 GENERIC_CLOCKEVENTS
	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"

source "kernel/Kconfig.freezer"

menu "System Type and features"

source "kernel/time/Kconfig"

config SUBARCH_AVR32B
	bool
config MMU
	bool
config PERFORMANCE_COUNTERS
	bool

config PLATFORM_AT32AP
	bool
	select SUBARCH_AVR32B
	select MMU
	select PERFORMANCE_COUNTERS
	select ARCH_REQUIRE_GPIOLIB
	select GENERIC_ALLOCATOR

#
# 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 QUICKLIST
	def_bool y

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"

source "kernel/power/Kconfig"

config ARCH_SUSPEND_POSSIBLE
	def_bool y

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"
