]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
x86/cpu: Refresh DCA leaf reading code
authorDave Hansen <dave.hansen@linux.intel.com>
Fri, 13 Dec 2024 20:50:32 +0000 (12:50 -0800)
committerDave Hansen <dave.hansen@linux.intel.com>
Wed, 18 Dec 2024 14:17:34 +0000 (06:17 -0800)
The DCA leaf number is also hard-coded in the CPUID level dependency
table. Move its definition to common code and use it.

While at it, fix up the naming and types in the probe code.  All
CPUID data is provided in 32-bit registers, not 'unsigned long'.
Also stop referring to "level_9".  Move away from test_bit()
because the type is no longer an 'unsigned long'.

Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Link: https://lore.kernel.org/all/20241213205032.476A30FE%40davehans-spike.ostc.intel.com
arch/x86/include/asm/cpuid.h
arch/x86/kernel/cpu/common.c
drivers/dma/ioat/dca.c

index 13ecab94cc234c119089d9752bfdbf2cc9384bc5..8ba4d9fdc9e7875a2ea34c131f7eea05040ff68e 100644 (file)
@@ -21,7 +21,8 @@ enum cpuid_regs_idx {
        CPUID_EDX,
 };
 
-#define CPUID_MWAIT_LEAF               5
+#define CPUID_MWAIT_LEAF       0x5
+#define CPUID_DCA_LEAF         0x9
 
 #ifdef CONFIG_X86_32
 bool have_cpuid_p(void);
index 853e373d28290059034b63fec6c37c85f4865934..5ffa1f4eac38324a34ddb98ba4c4adcbb49e24e8 100644 (file)
@@ -638,7 +638,7 @@ struct cpuid_dependent_feature {
 static const struct cpuid_dependent_feature
 cpuid_dependent_features[] = {
        { X86_FEATURE_MWAIT,            CPUID_MWAIT_LEAF },
-       { X86_FEATURE_DCA,              0x00000009 },
+       { X86_FEATURE_DCA,              CPUID_DCA_LEAF },
        { X86_FEATURE_XSAVE,            0x0000000d },
        { 0, 0 }
 };
index 17f6b636711360bf2adebb470f02d1dcf136a81e..658ea2ec36f7dfe9d72b4e98f2baea9a34628a39 100644 (file)
@@ -10,6 +10,8 @@
 #include <linux/interrupt.h>
 #include <linux/dca.h>
 
+#include <asm/cpuid.h>
+
 /* either a kernel change is needed, or we need something like this in kernel */
 #ifndef CONFIG_SMP
 #include <asm/smp.h>
@@ -58,11 +60,11 @@ static int dca_enabled_in_bios(struct pci_dev *pdev)
 {
        /* CPUID level 9 returns DCA configuration */
        /* Bit 0 indicates DCA enabled by the BIOS */
-       unsigned long cpuid_level_9;
+       u32 eax;
        int res;
 
-       cpuid_level_9 = cpuid_eax(9);
-       res = test_bit(0, &cpuid_level_9);
+       eax = cpuid_eax(CPUID_DCA_LEAF);
+       res = eax & BIT(0);
        if (!res)
                dev_dbg(&pdev->dev, "DCA is disabled in BIOS\n");