# Intel CAVS SoC family configuration options
#
# Copyright (c) 2020 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config SOC_FAMILY_INTEL_ADSP
	select WINSTREAM
	select ARCH_SUPPORTS_COREDUMP
	select CPU_HAS_DCACHE
	bool

if SOC_FAMILY_INTEL_ADSP

config SOC_FAMILY
	string
	default "intel_adsp"

# Select SoC Part No. and configuration options
source "soc/xtensa/intel_adsp/*/Kconfig.soc"

DT_COMPAT_INTEL_ADSP_HOST_IPC := intel,adsp-host-ipc
DT_COMPAT_INTEL_ADSP_IDC := intel,adsp-idc

config INTEL_ADSP_IPC
	bool "Driver for the host IPC interrupt delivery"
	default $(dt_compat_enabled,$(DT_COMPAT_INTEL_ADSP_HOST_IPC)) if !SOF
	default $(dt_compat_enabled,$(DT_COMPAT_INTEL_ADSP_IDC)) if !SOF
	help
	  Driver for the host IPC interrupt delivery mechanism.
	  Currently SOF has its own driver for this hardware.

config MEMORY_WIN_0_SIZE
	int "Size of memory window 0"
	default 8192
	help
	  Size of memory window 0.

	  This window is used for firmware status & outbox/uplink mbox.

config MEMORY_WIN_1_SIZE
	int "Size of memory window 1"
	default 8192
	help
	  Size of memory window 1.

	  This window is used for inbox/downlink mbox.

config MEMORY_WIN_2_SIZE
	int "Size of memory window 2"
	default 8192
	help
	  Size of memory window 2.

	  This window is used for debug.

config MEMORY_WIN_3_SIZE
	int "Size of memory window 3"
	default 8192
	help
	  Size of memory window 3.

	  This window is used for trace.

config ADSP_CLOCK
	bool
	help
	  Driver for the CAVS clocks. Allow type of clock (and
	  thus frequency) to be chosen.

config HP_SRAM_RESERVE
	int "Bytes to reserve at start of HP-SRAM"
	default 65536
	help
	  Bytes to reserve at the start of HP-SRAM.  Zephyr will not
	  place any symbols here, though the host windows have
	  addresses here.  The SOF application also makes direct use
	  of this region, so be very careful changing this value.

config ADSP_TRACE_SIMCALL
	bool "Emit SIMCALL output in addition to window tracing"
	help
	  When true, the trace_out layer will also use a SIMCALL
	  instruction to emit the passed data to the standard output
	  of an enclosing simulator process.  All window contents will
	  remain identical.

config ADSP_NEED_POWER_ON_CACHE
	bool
	help
	  Need to power cache SRAM banks on.

config ADSP_INIT_HPSRAM
	bool
	default y
	help
	  Need to init HP SRAM.

config ADSP_POWER_DOWN_HPSRAM
	bool
	default n if ZTEST
	default y
	help
	 Switch off HP SRAM during power down.

config ADSP_DISABLE_L2CACHE_AT_BOOT
	bool

config ADSP_IMR_CONTEXT_SAVE
	bool "Saves FW context into IMR before core is shut down"
	default n
	help
	  When true, FW will store its entire context into IMR before
	  entering D3 state. Later this context can be used to FW restore
	  when Host power up DSP again.

endif # SOC_FAMILY_INTEL_ADSP
