1

x86/cpu/intel: Replace PAT erratum model/family magic numbers with symbolic IFM references

There's an erratum that prevents the PAT from working correctly:

   https://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/pentium-dual-core-specification-update.pdf
   # Document 316515 Version 010

The kernel currently disables PAT support on those CPUs, but it
does it with some magic numbers.

Replace the magic numbers with the new "IFM" macros.

Make the check refer to the last affected CPU (INTEL_CORE_YONAH)
rather than the first fixed one. This makes it easier to find the
documentation of the erratum since Intel documents where it is
broken and not where it is fixed.

I don't think the Pentium Pro (or Pentium II) is actually affected.
But the old check included them, so it can't hurt to keep doing the
same.  I'm also not completely sure about the "Pentium M" CPUs
(models 0x9 and 0xd).  But, again, they were included in in the
old checks and were close Pentium III derivatives, so are likely
affected.

While we're at it, revise the comment referring to the erratum name
and making sure it is a quote of the language from the actual errata
doc.  That should make it easier to find in the future when the URL
inevitably changes.

Why bother with this in the first place? It actually gets rid of one
of the very few remaining direct references to c->x86{,_model}.

No change in functionality intended.

Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Len Brown <len.brown@intel.com>
Link: https://lore.kernel.org/r/20240829220042.1007820-1-dave.hansen@linux.intel.com
This commit is contained in:
Dave Hansen 2024-08-29 15:00:42 -07:00 committed by Ingo Molnar
parent c9f016e72b
commit fd82221a59
2 changed files with 12 additions and 8 deletions

View File

@ -47,6 +47,8 @@
/* Wildcard match for FAM6 so X86_MATCH_VFM(ANY) works */ /* Wildcard match for FAM6 so X86_MATCH_VFM(ANY) works */
#define INTEL_ANY IFM(X86_FAMILY_ANY, X86_MODEL_ANY) #define INTEL_ANY IFM(X86_FAMILY_ANY, X86_MODEL_ANY)
#define INTEL_PENTIUM_PRO IFM(6, 0x01)
#define INTEL_FAM6_CORE_YONAH 0x0E #define INTEL_FAM6_CORE_YONAH 0x0E
#define INTEL_CORE_YONAH IFM(6, 0x0E) #define INTEL_CORE_YONAH IFM(6, 0x0E)

View File

@ -311,16 +311,18 @@ static void early_init_intel(struct cpuinfo_x86 *c)
} }
/* /*
* There is a known erratum on Pentium III and Core Solo * PAT is broken on early family 6 CPUs, the last of which
* and Core Duo CPUs. * is "Yonah" where the erratum is named "AN7":
* " Page with PAT set to WC while associated MTRR is UC
* may consolidate to UC "
* Because of this erratum, it is better to stick with
* setting WC in MTRR rather than using PAT on these CPUs.
* *
* Enable PAT WC only on P4, Core 2 or later CPUs. * Page with PAT (Page Attribute Table) Set to USWC
* (Uncacheable Speculative Write Combine) While
* Associated MTRR (Memory Type Range Register) Is UC
* (Uncacheable) May Consolidate to UC
*
* Disable PAT and fall back to MTRR on these CPUs.
*/ */
if (c->x86 == 6 && c->x86_model < 15) if (c->x86_vfm >= INTEL_PENTIUM_PRO &&
c->x86_vfm <= INTEL_CORE_YONAH)
clear_cpu_cap(c, X86_FEATURE_PAT); clear_cpu_cap(c, X86_FEATURE_PAT);
/* /*