ASoC: Intel: avs: Include CPUID header at file scope

Commit

    cbe37a4d2b ("ASoC: Intel: avs: Configure basefw on TGL-based platforms")

includes the main CPUID header from within a C function.  This works by
luck and forbids valid refactoring inside that header.

Include the CPUID header at file scope instead.

Remove the COMPILE_TEST build flag so that the CONFIG_X86 conditionals can
be removed.  The driver gets enough compilation testing already on x86.

For clarity, refactor the CPUID(0x15) code into its own function without
changing any of the driver's logic.

Fixes: cbe37a4d2b ("ASoC: Intel: avs: Configure basefw on TGL-based platforms")
Suggested-by: Borislav Petkov <bp@alien8.de>		# CONFIG_X86 removal
Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Acked-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://lore.kernel.org/all/20250612234010.572636-3-darwi@linutronix.de
This commit is contained in:
Ahmed S. Darwish
2026-03-27 03:15:16 +01:00
committed by Borislav Petkov (AMD)
parent 93a1f0e613
commit 7f78e0b46e
2 changed files with 27 additions and 16 deletions

View File

@@ -95,7 +95,7 @@ config SND_SOC_INTEL_KEEMBAY
config SND_SOC_INTEL_AVS
tristate "Intel AVS driver"
depends on X86 || COMPILE_TEST
depends on X86
depends on PCI
depends on COMMON_CLK
select ACPI_NHLT if ACPI

View File

@@ -7,6 +7,7 @@
//
#include <linux/pci.h>
#include <asm/cpuid/api.h>
#include "avs.h"
#include "debug.h"
#include "messages.h"
@@ -38,28 +39,38 @@ static int avs_tgl_dsp_core_stall(struct avs_dev *adev, u32 core_mask, bool stal
return avs_dsp_core_stall(adev, core_mask, stall);
}
/*
* Succeed if CPUID(0x15) is not available, or if the nominal core crystal clock
* frequency cannot be enumerated from it. There is nothing to do in both cases.
*/
static int avs_tgl_set_xtal_freq(struct avs_dev *adev)
{
unsigned int freq;
int ret;
if (boot_cpu_data.cpuid_level < CPUID_LEAF_TSC)
return 0;
freq = cpuid_ecx(CPUID_LEAF_TSC);
if (freq) {
ret = avs_ipc_set_fw_config(adev, 1, AVS_FW_CFG_XTAL_FREQ_HZ, sizeof(freq), &freq);
if (ret)
return AVS_IPC_RET(ret);
}
return 0;
}
static int avs_tgl_config_basefw(struct avs_dev *adev)
{
struct pci_dev *pci = adev->base.pci;
struct avs_bus_hwid hwid;
int ret;
#ifdef CONFIG_X86
unsigned int ecx;
#include <asm/cpuid/api.h>
ret = avs_tgl_set_xtal_freq(adev);
if (ret)
return ret;
if (boot_cpu_data.cpuid_level < CPUID_LEAF_TSC)
goto no_cpuid;
ecx = cpuid_ecx(CPUID_LEAF_TSC);
if (ecx) {
ret = avs_ipc_set_fw_config(adev, 1, AVS_FW_CFG_XTAL_FREQ_HZ, sizeof(ecx), &ecx);
if (ret)
return AVS_IPC_RET(ret);
}
#endif
no_cpuid:
hwid.device = pci->device;
hwid.subsystem = pci->subsystem_vendor | (pci->subsystem_device << 16);
hwid.revision = pci->revision;