/* Intel stepping information */
#define CPUID_STEPPING_KABYLAKE_ES 0x8 // Kaby Lake S/H/U/Y ES
#define CPUID_STEPPING_COFFEELAKE_A 0xA // Coffee Lake U/S/H
-#define CPUID_STEPPING_COFFEELAKE_B 0xB // Coffee Lake S/H
+#define CPUID_STEPPING_COFFEELAKE_C 0xC // Last Coffee Lake stepping
#define CPUID_STEPPING_CASCADELAKE_A 0x5 // Cascade Lake A-step
#define CPUID_STEPPING_CASCADELAKE_B 0x6 // Cascade Lake B-step
#define CPUID_STEPPING_WHISKEYLAKE 0xB // Whiskey Lake U
/* Assumes the CPU manufacturer is Intel. */
return CPUID_FAMILY_IS_P6(v) &&
((CPUID_EFFECTIVE_MODEL(v) == CPUID_MODEL_KABYLAKE_9E &&
- (CPUID_EFFECTIVE_STEPPING(v) == CPUID_STEPPING_COFFEELAKE_A ||
- CPUID_EFFECTIVE_STEPPING(v) == CPUID_STEPPING_COFFEELAKE_B)) ||
+ CPUID_EFFECTIVE_STEPPING(v) >= CPUID_STEPPING_COFFEELAKE_A &&
+ CPUID_EFFECTIVE_STEPPING(v) <= CPUID_STEPPING_COFFEELAKE_C) ||
(CPUID_EFFECTIVE_MODEL(v) == CPUID_MODEL_KABYLAKE_8E &&
CPUID_EFFECTIVE_STEPPING(v) == CPUID_STEPPING_COFFEELAKE_A));
}
CPUID_MODEL_IS_KABYLAKE(uint32 v) // IN: %eax from CPUID with %eax=1.
{
/* Assumes the CPU manufacturer is Intel. */
- return CPUID_FAMILY_IS_P6(v) &&
- (CPUID_EFFECTIVE_MODEL(v) == CPUID_MODEL_KABYLAKE_9E ||
+ return CPUID_FAMILY_IS_P6(v) &&
+ ((CPUID_EFFECTIVE_MODEL(v) == CPUID_MODEL_KABYLAKE_9E &&
+ CPUID_EFFECTIVE_STEPPING(v) < CPUID_STEPPING_COFFEELAKE_A) ||
(CPUID_EFFECTIVE_MODEL(v) == CPUID_MODEL_KABYLAKE_8E &&
CPUID_EFFECTIVE_STEPPING(v) < CPUID_STEPPING_COFFEELAKE_A) ||
(CPUID_EFFECTIVE_MODEL(v) == CPUID_MODEL_SKYLAKE_5E &&