]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86/cpufeatures: Add support for L3 Smart Data Cache Injection Allocation Enforcement
authorBabu Moger <babu.moger@amd.com>
Thu, 13 Nov 2025 00:57:27 +0000 (18:57 -0600)
committerBorislav Petkov (AMD) <bp@alien8.de>
Fri, 21 Nov 2025 21:03:07 +0000 (22:03 +0100)
Smart Data Cache Injection (SDCI) is a mechanism that enables direct insertion
of data from I/O devices into the L3 cache. By directly caching data from I/O
devices rather than first storing the I/O data in DRAM, SDCI reduces demands on
DRAM bandwidth and reduces latency to the processor consuming the I/O data.

The SDCIAE (SDCI Allocation Enforcement) PQE feature allows system software to
control the portion of the L3 cache used for SDCI.

When enabled, SDCIAE forces all SDCI lines to be placed into the L3 cache
partitions identified by the highest-supported L3_MASK_n register, where n is
the maximum supported CLOSID.

Add CPUID feature bit that can be used to configure SDCIAE.

The SDCIAE feature details are documented in:

  AMD64 Architecture Programmer's Manual Volume 2: System Programming
     Publication # 24593 Revision 3.41 section 19.4.7 L3 Smart Data Cache
    Injection Allocation Enforcement (SDCIAE).

available at https://bugzilla.kernel.org/show_bug.cgi?id=206537

Signed-off-by: Babu Moger <babu.moger@amd.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Acked-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://patch.msgid.link/83ca10d981c48e86df2c3ad9658bb3ba3544c763.1762995456.git.babu.moger@amd.com
arch/x86/include/asm/cpufeatures.h
arch/x86/kernel/cpu/cpuid-deps.c
arch/x86/kernel/cpu/scattered.c

index 4091a776e37aaed67ca93b0a0cd23cc25dbc33d4..2abee3e9dc7537ae4abb67cded2228f8c8bcd269 100644 (file)
 #define X86_FEATURE_ABMC               (21*32+15) /* Assignable Bandwidth Monitoring Counters */
 #define X86_FEATURE_MSR_IMM            (21*32+16) /* MSR immediate form instructions */
 
+#define X86_FEATURE_SDCIAE             (21*32+18) /* L3 Smart Data Cache Injection Allocation Enforcement */
+
 /*
  * BUG word(s)
  */
index 46efcbd6afa41ce8201229612fc082a3f3760868..87e78586395b183aafd514186077fe3a2e9ab252 100644 (file)
@@ -72,6 +72,7 @@ static const struct cpuid_dep cpuid_deps[] = {
        { X86_FEATURE_CQM_MBM_LOCAL,            X86_FEATURE_CQM_LLC   },
        { X86_FEATURE_BMEC,                     X86_FEATURE_CQM_MBM_TOTAL   },
        { X86_FEATURE_BMEC,                     X86_FEATURE_CQM_MBM_LOCAL   },
+       { X86_FEATURE_SDCIAE,                   X86_FEATURE_CAT_L3    },
        { X86_FEATURE_AVX512_BF16,              X86_FEATURE_AVX512VL  },
        { X86_FEATURE_AVX512_FP16,              X86_FEATURE_AVX512BW  },
        { X86_FEATURE_ENQCMD,                   X86_FEATURE_XSAVES    },
index caa4dc885c214f70b7667154e151eefc34dc2f33..d113863a8eab031be4c7aa98ef8aa45809caa9e2 100644 (file)
@@ -53,6 +53,7 @@ static const struct cpuid_bit cpuid_bits[] = {
        { X86_FEATURE_SMBA,                     CPUID_EBX,  2, 0x80000020, 0 },
        { X86_FEATURE_BMEC,                     CPUID_EBX,  3, 0x80000020, 0 },
        { X86_FEATURE_ABMC,                     CPUID_EBX,  5, 0x80000020, 0 },
+       { X86_FEATURE_SDCIAE,                   CPUID_EBX,  6, 0x80000020, 0 },
        { X86_FEATURE_TSA_SQ_NO,                CPUID_ECX,  1, 0x80000021, 0 },
        { X86_FEATURE_TSA_L1_NO,                CPUID_ECX,  2, 0x80000021, 0 },
        { X86_FEATURE_AMD_WORKLOAD_CLASS,       CPUID_EAX, 22, 0x80000021, 0 },