# 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 GENERIC_PENDING_IRQ if SMP
	select HAVE_IRQ_WORK
	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
	select STACKTRACE_SUPPORT
	select KTIME_SCALAR
	select GENERIC_CLOCKEVENTS
	select GENERIC_CLOCKEVENTS_BROADCAST
	---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 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 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 STACKTRACE_SUPPORT
	def_bool y
	select STACKTRACE

config GENERIC_BUG
	def_bool y
	depends on BUG

menu "Machine selection"

choice
	prompt "System type"
	default HEXAGON_COMET

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"

config GENERIC_GPIO
	def_bool 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
