# SPDX-License-Identifier: GPL-2.0-only
menuconfig SND_SOC_SOF_TOPLEVEL
	bool "Sound Open Firmware Support"
	help
	  This adds support for Sound Open Firmware (SOF). SOF is free and
	  generic open source audio DSP firmware for multiple devices.
	  Say Y if you have such a device that is supported by SOF.
	  If unsure select "N".

if SND_SOC_SOF_TOPLEVEL

config SND_SOC_SOF_PCI_DEV
	tristate

config SND_SOC_SOF_PCI
	tristate "SOF PCI enumeration support"
	depends on PCI
	help
	  This adds support for PCI enumeration. This option is
	  required to enable Intel Skylake+ devices.
	  For backwards-compatibility with previous configurations the selection will
	  be used as default for platform-specific drivers.
	  Say Y if you need this option.
	  If unsure select "N".

config SND_SOC_SOF_ACPI
	tristate "SOF ACPI enumeration support"
	depends on ACPI || COMPILE_TEST
	help
	  This adds support for ACPI enumeration. This option is required
	  to enable Intel Broadwell/Baytrail/Cherrytrail devices.
	  For backwards-compatibility with previous configurations the selection will
	  be used as default for platform-specific drivers.
	  Say Y if you need this option.
	  If unsure select "N".

config SND_SOC_SOF_ACPI_DEV
	tristate

config SND_SOC_SOF_OF
	tristate "SOF OF enumeration support"
	depends on OF
	help
	  This adds support for Device Tree enumeration. This option is
	  required to enable i.MX8 or Mediatek devices.
	  Say Y if you need this option. If unsure select "N".

config SND_SOC_SOF_OF_DEV
	tristate

config SND_SOC_SOF_COMPRESS
	bool
	select SND_SOC_COMPRESS

config SND_SOC_SOF_DEBUG_PROBES
	tristate
	select SND_SOC_SOF_CLIENT
	select SND_SOC_COMPRESS
	help
	  This option enables the data probing feature that can be used to
	  gather data directly from specific points of the audio pipeline.
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.

config SND_SOC_SOF_CLIENT
	tristate
	select AUXILIARY_BUS
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.

config SND_SOC_SOF_DEVELOPER_SUPPORT
	bool "SOF developer options support"
	depends on EXPERT && SND_SOC_SOF
	help
	  This option unlocks SOF developer options for debug/performance/
	  code hardening.
	  Distributions should not select this option, only SOF development
	  teams should select it.
	  Say Y if you are involved in SOF development and need this option.
	  If not, select N.

if SND_SOC_SOF_DEVELOPER_SUPPORT

config SND_SOC_SOF_FORCE_PROBE_WORKQUEUE
	bool "SOF force probe workqueue"
	select SND_SOC_SOF_PROBE_WORK_QUEUE
	help
	  This option forces the use of a probe workqueue, which is only used
	  when HDaudio is enabled due to module dependencies. Forcing this
	  option is intended for debug only, but this should not add any
	  functional issues in nominal cases.
	  Say Y if you are involved in SOF development and need this option.
	  If not, select N.

config SND_SOC_SOF_NOCODEC
	tristate

config SND_SOC_SOF_NOCODEC_SUPPORT
	bool "SOF nocodec static mode support"
	help
	  This adds support for a dummy/nocodec machine driver fallback
	  option if no known codec is detected. This is typically only
	  enabled for developers or devices where the sound card is
	  controlled externally.
	  This option is mutually exclusive at build time with the Intel HDAudio support.
	  Selecting it may have negative impacts and prevent e.g. microphone
	  functionality from being enabled on Intel CoffeeLake and later
	  platforms.
	  Distributions should not select this option!
	  Say Y if you need this nocodec fallback option.
	  If unsure select "N".

config SND_SOC_SOF_STRICT_ABI_CHECKS
	bool "SOF strict ABI checks"
	help
	  This option enables strict ABI checks for firmware and topology
	  files.
	  When these files are more recent than the kernel, the kernel
	  will handle the functionality it supports and may report errors
	  during topology creation or run-time usage if new functionality
	  is invoked.
	  This option will stop topology creation and firmware load upfront.
	  It is intended for SOF CI/releases and not for users or distros.
	  Say Y if you want strict ABI checks for an SOF release.
	  If you are not involved in SOF releases and CI development,
	  select "N".

config SND_SOC_SOF_ALLOW_FALLBACK_TO_NEWER_IPC_VERSION
	bool "SOF allow fallback to newer IPC version"
	help
	  This option will allow the kernel to try to 'fallback' to a newer IPC
	  version if there are missing firmware files to satisfy the default IPC
	  version.
	  IPC version fallback to older versions is not affected by this option,
	  it is always available.
	  Say Y if you are involved in SOF development and need this option.
	  If not, select N.

config SND_SOC_SOF_DEBUG
	bool "SOF debugging features"
	help
	  This option can be used to enable or disable individual SOF firmware
	  and driver debugging options.
	  Say Y if you are debugging SOF FW or drivers.
	  If unsure select "N".

if SND_SOC_SOF_DEBUG

config SND_SOC_SOF_NOCODEC_DEBUG_SUPPORT
	bool "SOF nocodec debug mode support"
	depends on !SND_SOC_SOF_NOCODEC_SUPPORT
	help
	  This adds support for a dummy/nocodec machine driver fallback
	  option.
	  Unlike the SND_SOC_SOF_NOCODEC_SUPPORT, this option is NOT
	  mutually exclusive at build with the Intel HDAudio support. The
	  selection will be done depending on command line or modprobe.d settings
	  Distributions should not select this option!
	  Say Y if you need this nocodec debug fallback option.
	  If unsure select "N".

config SND_SOC_SOF_FORCE_NOCODEC_MODE
	bool "SOF force nocodec Mode"
	depends on SND_SOC_SOF_NOCODEC_SUPPORT
	help
	  This forces SOF to use dummy/nocodec as machine driver, even
	  though there is a codec detected on the real platform. This is
	  typically only enabled for developers for debug purposes, before
	  codec/machine driver is ready, or to exclude the impact of those
	  drivers.
	  Say Y if you need this force nocodec mode option.
	  If unsure select "N".

config SND_SOC_SOF_DEBUG_XRUN_STOP
	bool "SOF stop on XRUN"
	help
	  This option forces PCMs to stop on any XRUN event. This is useful to
	  preserve any trace data and pipeline status prior to the XRUN.
	  Say Y if you are debugging SOF FW pipeline XRUNs.
	  If unsure select "N".

config SND_SOC_SOF_DEBUG_VERBOSE_IPC
	bool "SOF verbose IPC logs"
	help
	  This option enables more verbose IPC logs, with command types in
	  human-readable form instead of just 32-bit hex dumps. This is useful
	  if you are trying to debug IPC with the DSP firmware.
	  If unsure select "N".

config SND_SOC_SOF_DEBUG_FORCE_IPC_POSITION
	bool "SOF force to use IPC for position update on SKL+"
	help
	  This option forces to handle stream position update IPCs and run PCM
	  elapse to inform ALSA about that, on platforms (e.g. Intel SKL+) that
	  with other approach (e.g. HDAC DPIB/posbuf) to elapse PCM.
	  On platforms (e.g. Intel SKL-) where position update IPC is the only
	  one choice, this setting won't impact anything.
	  If you are trying to debug pointer update with position IPCs or where
	  DPIB/posbuf is not ready, select "Y".
	  If unsure select "N".

config SND_SOC_SOF_DEBUG_ENABLE_DEBUGFS_CACHE
	bool "SOF enable debugfs caching"
	help
	  This option enables caching of debugfs
	  memory -> DSP resource (memory, register, etc)
	  before the audio DSP is suspended. This will increase the suspend
	  latency and therefore should be used for debug purposes only.
	  Say Y if you want to enable caching the memory windows.
	  If unsure, select "N".

config SND_SOC_SOF_DEBUG_ENABLE_FIRMWARE_TRACE
	bool "SOF enable firmware trace"
	help
	  The firmware trace can be enabled either at build-time with
	  this option, or dynamically by setting flags in the SOF core
	  module parameter (similar to dynamic debug).
	  If unsure, select "N".

config SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST
	tristate "SOF enable IPC flood test"
	depends on SND_SOC_SOF
	select SND_SOC_SOF_CLIENT
	help
	  This option enables a separate client device for IPC flood test
	  which can be used to flood the DSP with test IPCs and gather stats
	  about response times.
	  Say Y if you want to enable IPC flood test.
	  If unsure, select "N".

config SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST_NUM
	int "Number of IPC flood test clients"
	range 1 32
	default 2
	depends on SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST
	help
	  Select the number of IPC flood test clients to be created.

config SND_SOC_SOF_DEBUG_IPC_MSG_INJECTOR
	tristate "SOF enable IPC message injector"
	depends on SND_SOC_SOF
	select SND_SOC_SOF_CLIENT
	help
	  This option enables the IPC message injector which can be used to send
	  crafted IPC messages to the DSP to test its robustness.
	  Say Y if you want to enable the IPC message injector.
	  If unsure, select "N".

config SND_SOC_SOF_DEBUG_IPC_KERNEL_INJECTOR
	tristate "SOF enable IPC kernel injector"
	depends on SND_SOC_SOF
	select SND_SOC_SOF_CLIENT
	help
	  This option enables the IPC kernel injector which can be used to send
	  crafted IPC messages to the kernel to test its robustness against
	  DSP messages.
	  Say Y if you want to enable the IPC kernel injector.
	  If unsure, select "N".

config SND_SOC_SOF_DEBUG_RETAIN_DSP_CONTEXT
	bool "SOF retain DSP context on any FW exceptions"
	help
	  This option keeps the DSP in D0 state so that firmware debug
	  information can be retained and dumped to userspace.
	  Say Y if you want to retain DSP context for FW exceptions.
	  If unsure, select "N".

endif ## SND_SOC_SOF_DEBUG

endif ## SND_SOC_SOF_DEVELOPER_SUPPORT

config SND_SOC_SOF
	tristate
	select SND_SOC_TOPOLOGY
	select SND_SOC_SOF_NOCODEC if SND_SOC_SOF_NOCODEC_SUPPORT
	select SND_SOC_SOF_NOCODEC if SND_SOC_SOF_NOCODEC_DEBUG_SUPPORT
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.
	  The selection is made at the top level and does not exactly follow
	  module dependencies but since the module or built-in type is decided
	  at the top level it doesn't matter.

config SND_SOC_SOF_PROBE_WORK_QUEUE
	bool
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.
	  When selected, the probe is handled in two steps, for example to
	  avoid lockdeps if request_module is used in the probe.

# Supported IPC versions
config SND_SOC_SOF_IPC3
	bool

config SND_SOC_SOF_IPC4
	bool

source "sound/soc/sof/amd/Kconfig"
source "sound/soc/sof/imx/Kconfig"
source "sound/soc/sof/intel/Kconfig"
source "sound/soc/sof/mediatek/Kconfig"
source "sound/soc/sof/xtensa/Kconfig"

endif
