Commit 7f78e0b4 authored by Ahmed S. Darwish's avatar Ahmed S. Darwish Committed by Borislav Petkov (AMD)
Browse files

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



Commit

    cbe37a4d ("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: cbe37a4d ("ASoC: Intel: avs: Configure basefw on TGL-based platforms")
Suggested-by: Borislav Petkov <bp@alien8.de>		# CONFIG_X86 removal
Signed-off-by: default avatarAhmed S. Darwish <darwi@linutronix.de>
Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
Acked-by: default avatarCezary Rojewski <cezary.rojewski@intel.com>
Link: https://lore.kernel.org/all/20250612234010.572636-3-darwi@linutronix.de
parent 93a1f0e6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+24 −13
Original line number Diff line number Diff line
@@ -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);
}

static int avs_tgl_config_basefw(struct avs_dev *adev)
/*
 * 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)
{
	struct pci_dev *pci = adev->base.pci;
	struct avs_bus_hwid hwid;
	unsigned int freq;
	int ret;
#ifdef CONFIG_X86
	unsigned int ecx;

#include <asm/cpuid/api.h>

	if (boot_cpu_data.cpuid_level < CPUID_LEAF_TSC)
		goto no_cpuid;
		return 0;

	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);
	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);
	}
#endif

no_cpuid:
	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;

	ret = avs_tgl_set_xtal_freq(adev);
	if (ret)
		return ret;

	hwid.device = pci->device;
	hwid.subsystem = pci->subsystem_vendor | (pci->subsystem_device << 16);
	hwid.revision = pci->revision;