# Hexagon configuration
comment "Linux Kernel Configuration for Hexagon"

config HEXAGON
	def_bool y
	select HAVE_OPROFILE
	select USE_GENERIC_SMP_HELPERS if SMP
	# Other pending projects/to-do items.
	# select HAVE_REGS_AND_STACK_ACCESS_API
	# select HAVE_HW_BREAKPOINT if PERF_EVENTS
	# select ARCH_HAS_CPU_IDLE_WAIT
	# select ARCH_WANT_OPTIONAL_GPIOLIB
	# select ARCH_REQUIRE_GPIOLIB
	# select HAVE_CLK
	# select IRQ_PER_CPU
	select HAVE_IRQ_WORK
	# select GENERIC_PENDING_IRQ if SMP
	select GENERIC_ATOMIC64
	select HAVE_PERF_EVENTS
	select HAVE_GENERIC_HARDIRQS
	# GENERIC_ALLOCATOR is used by dma_alloc_coherent()
	select GENERIC_ALLOCATOR
	select GENERIC_IRQ_SHOW
	select HAVE_ARCH_KGDB
	select HAVE_ARCH_TRACEHOOK
	select NO_IOPORT
	select GENERIC_IOMAP
	select GENERIC_SMP_IDLE_THREAD
	# mostly generic routines, with some accelerated ones
	---help---
	  Qualcomm Hexagon is a processor architecture designed for high
	  performance and low power across a wide variety of applications.

config HEXAGON_ARCH_V1
	bool

config HEXAGON_ARCH_V2
	bool

config HEXAGON_ARCH_V3
	bool

config HEXAGON_ARCH_V4
	bool

config FRAME_POINTER
	def_bool y

config LOCKDEP_SUPPORT
	def_bool y

config PCI
	def_bool n

config EARLY_PRINTK
	def_bool y

config KTIME_SCALAR
	def_bool y

config MMU
	def_bool y

config TRACE_IRQFLAGS_SUPPORT
	def_bool y

config GENERIC_CSUM
	def_bool y

#
# Use the generic interrupt handling code in kernel/irq/:
#
config GENERIC_IRQ_PROBE
	def_bool y

#config ZONE_DMA
#	bool
#	default y

config HAS_DMA
	bool
	select HAVE_DMA_ATTRS
	default y

config NEED_SG_DMA_LENGTH
	def_bool y

config RWSEM_GENERIC_SPINLOCK
	def_bool n

config RWSEM_XCHGADD_ALGORITHM
	def_bool y

config GENERIC_FIND_NEXT_BIT
	def_bool y

config GENERIC_HWEIGHT
	def_bool y

config GENERIC_TIME
	def_bool y

config GENERIC_CLOCKEVENTS
	def_bool y

config GENERIC_CLOCKEVENTS_BROADCAST
	def_bool y

config STACKTRACE_SUPPORT
	def_bool y
	select STACKTRACE

config GENERIC_BUG
	def_bool y
	depends on BUG

config BUG
	def_bool y

menu "Machine selection"

choice
	prompt "System type"
	default HEXAGON_ARCH_V2

config HEXAGON_COMET
	bool "Comet Board"
	select HEXAGON_ARCH_V2
	---help---
	  Support for the Comet platform.

endchoice

config HEXAGON_VM
	def_bool y

config CMDLINE
	string "Default kernel command string"
	default ""
	help
	  On some platforms, there is currently no way for the boot loader
	  to pass arguments to the kernel. For these, you should supply some
	  command-line options at build time by entering them here.  At a
	  minimum, you should specify the memory size and the root device
	  (e.g., mem=64M root=/dev/nfs).

config HEXAGON_ANGEL_TRAPS
	bool "Use Angel Traps"
	default n
	---help---
	  Enable angel debug traps (for printk's).

config SMP
	bool "Multi-Processing support"
	---help---
	  Enables SMP support in the kernel.  If unsure, say "Y"

config NR_CPUS
	int "Maximum number of CPUs" if SMP
	range 2 6 if SMP
	default "1" if !SMP
	default "6" if SMP
	---help---
	  This allows you to specify the maximum number of CPUs which this
	  kernel will support.  The maximum supported value is 6 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.

choice
	prompt "Kernel page size"
	default PAGE_SIZE_4KB
	---help---
	  Changes the default page size; use with caution.

config PAGE_SIZE_4KB
	bool "4KB"

config PAGE_SIZE_16KB
	bool "16KB"

config PAGE_SIZE_64KB
	bool "64KB"

config PAGE_SIZE_256KB
	bool "256KB"

endchoice

source "mm/Kconfig"

source "kernel/Kconfig.hz"
source "kernel/time/Kconfig"

config GENERIC_GPIO
	bool "Generic GPIO support"
	default n

endmenu

source "init/Kconfig"
source "drivers/Kconfig"
source "fs/Kconfig"

menu "Executable File Formats"
source "fs/Kconfig.binfmt"
endmenu

source "net/Kconfig"
source "security/Kconfig"
source "crypto/Kconfig"
source "lib/Kconfig"

menu "Kernel hacking"
source "lib/Kconfig.debug"
endmenu
