]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: Intel: avs: Check maximum valid CPUID leaf
authorAhmed S. Darwish <darwi@linutronix.de>
Fri, 27 Mar 2026 02:15:15 +0000 (03:15 +0100)
committerBorislav Petkov (AMD) <bp@alien8.de>
Fri, 27 Mar 2026 23:27:11 +0000 (00:27 +0100)
The Intel AVS driver queries CPUID(0x15) before checking if the CPUID leaf
is available.  Check the maximum-valid CPU standard leaf beforehand.

Use the CPUID_LEAF_TSC macro instead of the custom local one for the
CPUID(0x15) leaf number.

Fixes: cbe37a4d2b3c ("ASoC: Intel: avs: Configure basefw on TGL-based platforms")
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://patch.msgid.link/20260327021645.555257-2-darwi@linutronix.de
sound/soc/intel/avs/tgl.c

index afb066516101011231e016f46ddd455203c41ff0..4649d749b41e001c198ca1e08473a956e30e2d74 100644 (file)
@@ -11,8 +11,6 @@
 #include "debug.h"
 #include "messages.h"
 
-#define CPUID_TSC_LEAF 0x15
-
 static int avs_tgl_dsp_core_power(struct avs_dev *adev, u32 core_mask, bool power)
 {
        core_mask &= AVS_MAIN_CORE_MASK;
@@ -49,7 +47,11 @@ static int avs_tgl_config_basefw(struct avs_dev *adev)
        unsigned int ecx;
 
 #include <asm/cpuid/api.h>
-       ecx = cpuid_ecx(CPUID_TSC_LEAF);
+
+       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)
@@ -57,6 +59,7 @@ static int avs_tgl_config_basefw(struct avs_dev *adev)
        }
 #endif
 
+no_cpuid:
        hwid.device = pci->device;
        hwid.subsystem = pci->subsystem_vendor | (pci->subsystem_device << 16);
        hwid.revision = pci->revision;