# SPDX-License-Identifier: GPL-2.0
# Hexagon configuration
comment "Linux Kernel Configuration for Hexagon"

config HEXAGON
	def_bool y
	select ARCH_32BIT_OFF_T
	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
	select ARCH_NO_PREEMPT
	select ARCH_WANT_FRAME_POINTERS
	select DMA_GLOBAL_POOL
	select HAVE_PAGE_SIZE_4KB
	select HAVE_PAGE_SIZE_16KB
	select HAVE_PAGE_SIZE_64KB
	select HAVE_PAGE_SIZE_256KB
	select FRAME_POINTER
	# 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 GPIOLIB
	# select HAVE_CLK
	select GENERIC_ATOMIC64
	select HAVE_PERF_EVENTS
	# GENERIC_ALLOCATOR is used by dma_alloc_coherent()
	select GENERIC_ALLOCATOR
	select GENERIC_IRQ_PROBE
	select GENERIC_IRQ_SHOW
	select HAVE_ARCH_KGDB
	select HAVE_ARCH_TRACEHOOK
	select NEED_SG_DMA_LENGTH
	select GENERIC_IOREMAP
	select GENERIC_SMP_IDLE_THREAD
	select STACKTRACE_SUPPORT
	select GENERIC_CLOCKEVENTS_BROADCAST
	select LOCK_MM_AND_FIND_VMA
	select MODULES_USE_ELF_RELA
	select GENERIC_CPU_DEVICES
	select ARCH_WANT_LD_ORPHAN_WARN
	select TRACE_IRQFLAGS_SUPPORT
	help
	  Qualcomm Hexagon is a processor architecture designed for high
	  performance and low power across a wide variety of applications.

config HEXAGON_PHYS_OFFSET
	def_bool y
	help
	  Platforms that don't load the kernel at zero set this.

config LOCKDEP_SUPPORT
	def_bool y

config EARLY_PRINTK
	def_bool y

config MMU
	def_bool y

config NO_IOPORT_MAP
	def_bool y

config GENERIC_CSUM
	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"
	help
	  Support for the Comet platform.

endchoice

config HEXAGON_ARCH_VERSION
	int "Architecture version"
	default 2

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 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.

source "kernel/Kconfig.hz"

endmenu
