diff options
Diffstat (limited to 'arch/x86/kernel/cpu/intel.c')
| -rw-r--r-- | arch/x86/kernel/cpu/intel.c | 31 | 
1 files changed, 14 insertions, 17 deletions
| diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 319bf989fad1..d19e903214b4 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -116,14 +116,13 @@ struct sku_microcode {  	u32 microcode;  };  static const struct sku_microcode spectre_bad_microcodes[] = { -	{ INTEL_FAM6_KABYLAKE_DESKTOP,	0x0B,	0x84 }, -	{ INTEL_FAM6_KABYLAKE_DESKTOP,	0x0A,	0x84 }, -	{ INTEL_FAM6_KABYLAKE_DESKTOP,	0x09,	0x84 }, -	{ INTEL_FAM6_KABYLAKE_MOBILE,	0x0A,	0x84 }, -	{ INTEL_FAM6_KABYLAKE_MOBILE,	0x09,	0x84 }, +	{ INTEL_FAM6_KABYLAKE_DESKTOP,	0x0B,	0x80 }, +	{ INTEL_FAM6_KABYLAKE_DESKTOP,	0x0A,	0x80 }, +	{ INTEL_FAM6_KABYLAKE_DESKTOP,	0x09,	0x80 }, +	{ INTEL_FAM6_KABYLAKE_MOBILE,	0x0A,	0x80 }, +	{ INTEL_FAM6_KABYLAKE_MOBILE,	0x09,	0x80 },  	{ INTEL_FAM6_SKYLAKE_X,		0x03,	0x0100013e },  	{ INTEL_FAM6_SKYLAKE_X,		0x04,	0x0200003c }, -	{ INTEL_FAM6_SKYLAKE_MOBILE,	0x03,	0xc2 },  	{ INTEL_FAM6_SKYLAKE_DESKTOP,	0x03,	0xc2 },  	{ INTEL_FAM6_BROADWELL_CORE,	0x04,	0x28 },  	{ INTEL_FAM6_BROADWELL_GT3E,	0x01,	0x1b }, @@ -136,8 +135,6 @@ static const struct sku_microcode spectre_bad_microcodes[] = {  	{ INTEL_FAM6_HASWELL_X,		0x02,	0x3b },  	{ INTEL_FAM6_HASWELL_X,		0x04,	0x10 },  	{ INTEL_FAM6_IVYBRIDGE_X,	0x04,	0x42a }, -	/* Updated in the 20180108 release; blacklist until we know otherwise */ -	{ INTEL_FAM6_ATOM_GEMINI_LAKE,	0x01,	0x22 },  	/* Observed in the wild */  	{ INTEL_FAM6_SANDYBRIDGE_X,	0x06,	0x61b },  	{ INTEL_FAM6_SANDYBRIDGE_X,	0x07,	0x712 }, @@ -149,7 +146,7 @@ static bool bad_spectre_microcode(struct cpuinfo_x86 *c)  	for (i = 0; i < ARRAY_SIZE(spectre_bad_microcodes); i++) {  		if (c->x86_model == spectre_bad_microcodes[i].model && -		    c->x86_mask == spectre_bad_microcodes[i].stepping) +		    c->x86_stepping == spectre_bad_microcodes[i].stepping)  			return (c->microcode <= spectre_bad_microcodes[i].microcode);  	}  	return false; @@ -196,7 +193,7 @@ static void early_init_intel(struct cpuinfo_x86 *c)  	 * need the microcode to have already been loaded... so if it is  	 * not, recommend a BIOS update and disable large pages.  	 */ -	if (c->x86 == 6 && c->x86_model == 0x1c && c->x86_mask <= 2 && +	if (c->x86 == 6 && c->x86_model == 0x1c && c->x86_stepping <= 2 &&  	    c->microcode < 0x20e) {  		pr_warn("Atom PSE erratum detected, BIOS microcode update recommended\n");  		clear_cpu_cap(c, X86_FEATURE_PSE); @@ -212,7 +209,7 @@ static void early_init_intel(struct cpuinfo_x86 *c)  	/* CPUID workaround for 0F33/0F34 CPU */  	if (c->x86 == 0xF && c->x86_model == 0x3 -	    && (c->x86_mask == 0x3 || c->x86_mask == 0x4)) +	    && (c->x86_stepping == 0x3 || c->x86_stepping == 0x4))  		c->x86_phys_bits = 36;  	/* @@ -310,7 +307,7 @@ int ppro_with_ram_bug(void)  	if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&  	    boot_cpu_data.x86 == 6 &&  	    boot_cpu_data.x86_model == 1 && -	    boot_cpu_data.x86_mask < 8) { +	    boot_cpu_data.x86_stepping < 8) {  		pr_info("Pentium Pro with Errata#50 detected. Taking evasive action.\n");  		return 1;  	} @@ -327,7 +324,7 @@ static void intel_smp_check(struct cpuinfo_x86 *c)  	 * Mask B, Pentium, but not Pentium MMX  	 */  	if (c->x86 == 5 && -	    c->x86_mask >= 1 && c->x86_mask <= 4 && +	    c->x86_stepping >= 1 && c->x86_stepping <= 4 &&  	    c->x86_model <= 3) {  		/*  		 * Remember we have B step Pentia with bugs @@ -370,7 +367,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)  	 * SEP CPUID bug: Pentium Pro reports SEP but doesn't have it until  	 * model 3 mask 3  	 */ -	if ((c->x86<<8 | c->x86_model<<4 | c->x86_mask) < 0x633) +	if ((c->x86<<8 | c->x86_model<<4 | c->x86_stepping) < 0x633)  		clear_cpu_cap(c, X86_FEATURE_SEP);  	/* @@ -388,7 +385,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)  	 * P4 Xeon erratum 037 workaround.  	 * Hardware prefetcher may cause stale data to be loaded into the cache.  	 */ -	if ((c->x86 == 15) && (c->x86_model == 1) && (c->x86_mask == 1)) { +	if ((c->x86 == 15) && (c->x86_model == 1) && (c->x86_stepping == 1)) {  		if (msr_set_bit(MSR_IA32_MISC_ENABLE,  				MSR_IA32_MISC_ENABLE_PREFETCH_DISABLE_BIT) > 0) {  			pr_info("CPU: C0 stepping P4 Xeon detected.\n"); @@ -403,7 +400,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)  	 * Specification Update").  	 */  	if (boot_cpu_has(X86_FEATURE_APIC) && (c->x86<<8 | c->x86_model<<4) == 0x520 && -	    (c->x86_mask < 0x6 || c->x86_mask == 0xb)) +	    (c->x86_stepping < 0x6 || c->x86_stepping == 0xb))  		set_cpu_bug(c, X86_BUG_11AP); @@ -650,7 +647,7 @@ static void init_intel(struct cpuinfo_x86 *c)  		case 6:  			if (l2 == 128)  				p = "Celeron (Mendocino)"; -			else if (c->x86_mask == 0 || c->x86_mask == 5) +			else if (c->x86_stepping == 0 || c->x86_stepping == 5)  				p = "Celeron-A";  			break; |