Commit a3d543b9 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Mark Brown

ASoC: SOF: amd: fix soundwire dependencies

The soundwire-amd driver has a bit of a layering violation requiring
the SOF driver to directly call into its exported symbols rather than
through an abstraction.

The SND_SOC_SOF_AMD_SOUNDWIRE Kconfig symbol tries to deal with the
dependency by selecting SOUNDWIRE_AMD in a complicated set of conditions,
but gets it wrong for a configuration involving SND_SOC_SOF_AMD_COMMON=y,
SND_SOC_SOF_AMD_ACP63=m, and SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE=m
SOUNDWIRE_AMD=m, which results in a link failure:

ld.lld: error: undefined symbol: sdw_amd_get_slave_info
>>> referenced by acp-common.c
ld.lld: error: undefined symbol: amd_sdw_scan_controller
ld.lld: error: undefined symbol: sdw_amd_probe
ld.lld: error: undefined symbol: sdw_amd_exit
>>> referenced by acp.c
>>>               sound/soc/sof/amd/acp.o:(amd_sof_acp_remove) in archive vmlinux.a

In essence, the SND_SOC_SOF_AMD_COMMON option cannot be built-in when
trying to link against a modular SOUNDWIRE_AMD driver.

Since CONFIG_SOUNDWIRE_AMD is a user-visible option, it really should
never be selected by another driver in the first place, so replace the
extra complexity with a normal Kconfig dependency in SND_SOC_SOF_AMD_SOUNDWIRE,
plus a top-level check that forbids any of the AMD SOF drivers from being
built-in with CONFIG_SOUNDWIRE_AMD=m.

In normal configs, they should all either be built-in or all loadable
modules anyway, so this simplification does not limit any real usecases.

Fixes: d9482184 ("ASoC: SOF: amd: add code for invoking soundwire manager helper functions")
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Link: https://msgid.link/r/20240219093900.644574-1-arnd@kernel.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent bbf3e614
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
config SND_SOC_SOF_AMD_TOPLEVEL config SND_SOC_SOF_AMD_TOPLEVEL
tristate "SOF support for AMD audio DSPs" tristate "SOF support for AMD audio DSPs"
depends on SOUNDWIRE_AMD || !SOUNDWIRE_AMD
depends on X86 || COMPILE_TEST depends on X86 || COMPILE_TEST
help help
This adds support for Sound Open Firmware for AMD platforms. This adds support for Sound Open Firmware for AMD platforms.
...@@ -62,15 +63,14 @@ config SND_SOC_SOF_ACP_PROBES ...@@ -62,15 +63,14 @@ config SND_SOC_SOF_ACP_PROBES
config SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE config SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE
tristate tristate
select SOUNDWIRE_AMD if SND_SOC_SOF_AMD_SOUNDWIRE != n
select SND_AMD_SOUNDWIRE_ACPI if ACPI select SND_AMD_SOUNDWIRE_ACPI if ACPI
config SND_SOC_SOF_AMD_SOUNDWIRE config SND_SOC_SOF_AMD_SOUNDWIRE
tristate "SOF support for SoundWire based AMD platforms" tristate "SOF support for SoundWire based AMD platforms"
default SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE default SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE
depends on SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE depends on SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE
depends on ACPI && SOUNDWIRE depends on ACPI
depends on !(SOUNDWIRE=m && SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE=y) depends on SOUNDWIRE_AMD
help help
This adds support for SoundWire with Sound Open Firmware This adds support for SoundWire with Sound Open Firmware
for AMD platforms. for AMD platforms.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment