# SPDX-License-Identifier: BSD-3-Clause

mainmenu "SOF $(PROJECTVERSION) Configuration"

comment "Compiler: $(CC_VERSION_TEXT)"

config WAITI_DELAY
	bool
	default n
	help
	  LX6 Xtensa platforms may require additional delay to flush loads
	  and stores before entering WAITI.

config HOST_PTABLE
	bool
	default n

config BOOT_LOADER
	bool
	default n

config HAVE_RESET_VECTOR_ROM
	bool
	default n
	help
	  Select if your platform has the reset vector
	  in ROM.

config IRQ_MAP
	bool
	default n

config DMA_GW
	bool
	default n

config MEM_WND
	bool
	default n

config INTEL_IOMUX
	bool
	default n

config HW_LLI
	bool
	default n
	help
	  Hardware linked list is the DW-DMA feature, which allows
	  to automatically reload the next programmed linked list
	  item from memory without stopping the transfer. Without
	  it the transfer stops after every lli read and FW needs
	  to manually setup the next transfer.

	  Any platforms with hardware linked list support
	  should set this.

config DW_DMA_AGGREGATED_IRQ
	bool
	default n
	help
	  Some platforms cannot register interrupt per DW-DMA channel
	  and have the possibility only to register interrupts per
	  DMA controller, which require manual handling of aggregated
	  irq.

	  Any platforms with DW-DMA aggregated interrupts support
	  should set this.

config DMA_SUSPEND_DRAIN
	bool
	default n
	help
	  Some platforms cannot just simple disable DMA
	  channel during the transfer, because it will
	  hang the whole DMA controller. Instead we can
	  suspend the channel and drain the FIFO in order
	  to stop the channel as soon as possible.

	  Any platforms without the ability to disable
	  the DMA channel right away should set this.

config DMA_FIFO_PARTITION
	bool
	default n
	help
	  Some platforms require to manually set DMA
	  FIFO partitions before starting any transfer.

	  Any platforms without automatic FIFO partitions
	  should set this.

config INTERRUPT_LEVEL_1
	bool
	default n
	help
	  Select if the platform supports any interrupts of level 1.
	  Disabling this option allows for less memory consumption.

config INTERRUPT_LEVEL_2
	bool
	default n
	help
	  Select if the platform supports any interrupts of level 2.
	  Disabling this option allows for less memory consumption.

config INTERRUPT_LEVEL_3
	bool
	default n
	help
	  Select if the platform supports any interrupts of level 3.
	  Disabling this option allows for less memory consumption.

config INTERRUPT_LEVEL_4
	bool
	default n
	help
	  Select if the platform supports any interrupts of level 4.
	  Disabling this option allows for less memory consumption.

config INTERRUPT_LEVEL_5
	bool
	default n
	help
	  Select if the platform supports any interrupts of level 5.
	  Disabling this option allows for less memory consumption.

rsource "src/Kconfig"

choice
	prompt "Optimization"
	default OPTIMIZE_FOR_PERFORMANCE
	help
	  Controls how compiler should optimize binary.
	  This config should affect only compiler settings and is
	  not meant to be used for conditional compilation of code.

config OPTIMIZE_FOR_PERFORMANCE
	bool "Optimize for performance"
	help
	  Apply compiler optimizations prioritizing performance.
	  It means -O2 for GCC or equivalent for other compilers.

config OPTIMIZE_FOR_SIZE
	bool "Optimize for size"
	help
	  Apply compiler optimizations prioritizing binary size.
	  It means -Os for GCC or equivalent for other compilers.

config OPTIMIZE_FOR_DEBUG
	bool "Optimize for debug"
	help
	  Apply compiler optimizations prioritizing debugging experience.
	  It means -Og for GCC or equivalent for other compilers.

config OPTIMIZE_FOR_NONE
	bool "Don't optimize"
	help
	  Apply no compiler optimizations.
	  It means -O0 for GCC or equivalent for other compilers.

endchoice

menu "Debug"

config DEBUG
	bool "Enable debug build"
	default n
	help
	  Select for debug build

config GDB_DEBUG
	bool "GDB Stub"
	default n
	help
	  Select for GDB debugging

config DEBUG_HEAP
	bool "Heap debug"
	default n
	help
	  Select for enable heap alloc debugging

config DEBUG_BLOCK_FREE
	bool "Blocks freeing debug"
	default n
	help
	  It enables checking if free was called multiple times on
	  already freed block of memory. Enabling this feature increases
	  number of memory writes and reads, due to checks for memory patterns
	  that may be performed on allocation and deallocation.

config DEBUG_LOCKS
	bool "Spinlock debug"
	default n
	help
	  It adds additional information to the spinlocks about
	  the current user of the lock. Also executes panic
	  on deadlock.

config DEBUG_LOCKS_VERBOSE
	bool "Spinlock verbose debug"
	depends on DEBUG_LOCKS
	default n
	help
	  In addition to DEBUG_LOCKS it also adds spinlock traces
	  every time the lock is acquired.

config BUILD_VM_ROM
	bool "Build VM ROM"
	default n
	help
	  Select if you want to build VM ROM

config DEBUG_IPC_COUNTERS
	bool "IPC counters"
	depends on CAVS
	depends on DEBUG
	default n
	help
	  Select for enabling tracing IPC counter in SRAM_REG mailbox

config PERFORMANCE_COUNTERS
	bool "Performance counters"
	default n
	help
	  Enables tracing of simple performance measurements.
	  A basic use case is to measure number of platform & cpu clock ticks
	  passed between two checkpoints (init() and stamp()), for example
	  total time spent on running low latency scheduler tasks.
	  Platforms that gate cpu clock in wait-for-interrupt calls may also
	  use the stamp() macro periodically to find out how long the cpu
	  was in active/sleep state between the calls and estimate the cpu load.

config DSP_RESIDENCY_COUNTERS
	bool "DSP residency counters"
	default n
	help
	  Enables simple DSP residency counters in SRAM_REG mailbox.
	  R0, R1, R2 are abstract states which can be used differently
	  based on platform implementation.

endmenu
