# SPDX-License-Identifier: GPL-2.0-only
menuconfig SND_SOC_SOF_TOPLEVEL
	bool "Sound Open Firmware (SOF) platforms"
	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
