@@ -72,19 +72,19 @@ static bool cpu_model_supports_sld __ro_after_init;
72
72
*/
73
73
static void check_memory_type_self_snoop_errata (struct cpuinfo_x86 * c )
74
74
{
75
- switch (c -> x86_model ) {
76
- case INTEL_FAM6_CORE_YONAH :
77
- case INTEL_FAM6_CORE2_MEROM :
78
- case INTEL_FAM6_CORE2_MEROM_L :
79
- case INTEL_FAM6_CORE2_PENRYN :
80
- case INTEL_FAM6_CORE2_DUNNINGTON :
81
- case INTEL_FAM6_NEHALEM :
82
- case INTEL_FAM6_NEHALEM_G :
83
- case INTEL_FAM6_NEHALEM_EP :
84
- case INTEL_FAM6_NEHALEM_EX :
85
- case INTEL_FAM6_WESTMERE :
86
- case INTEL_FAM6_WESTMERE_EP :
87
- case INTEL_FAM6_SANDYBRIDGE :
75
+ switch (c -> x86_vfm ) {
76
+ case INTEL_CORE_YONAH :
77
+ case INTEL_CORE2_MEROM :
78
+ case INTEL_CORE2_MEROM_L :
79
+ case INTEL_CORE2_PENRYN :
80
+ case INTEL_CORE2_DUNNINGTON :
81
+ case INTEL_NEHALEM :
82
+ case INTEL_NEHALEM_G :
83
+ case INTEL_NEHALEM_EP :
84
+ case INTEL_NEHALEM_EX :
85
+ case INTEL_WESTMERE :
86
+ case INTEL_WESTMERE_EP :
87
+ case INTEL_SANDYBRIDGE :
88
88
setup_clear_cpu_cap (X86_FEATURE_SELFSNOOP );
89
89
}
90
90
}
@@ -106,9 +106,9 @@ static void probe_xeon_phi_r3mwait(struct cpuinfo_x86 *c)
106
106
*/
107
107
if (c -> x86 != 6 )
108
108
return ;
109
- switch (c -> x86_model ) {
110
- case INTEL_FAM6_XEON_PHI_KNL :
111
- case INTEL_FAM6_XEON_PHI_KNM :
109
+ switch (c -> x86_vfm ) {
110
+ case INTEL_XEON_PHI_KNL :
111
+ case INTEL_XEON_PHI_KNM :
112
112
break ;
113
113
default :
114
114
return ;
@@ -134,32 +134,32 @@ static void probe_xeon_phi_r3mwait(struct cpuinfo_x86 *c)
134
134
* - Release note from 20180108 microcode release
135
135
*/
136
136
struct sku_microcode {
137
- u8 model ;
137
+ u32 vfm ;
138
138
u8 stepping ;
139
139
u32 microcode ;
140
140
};
141
141
static const struct sku_microcode spectre_bad_microcodes [] = {
142
- { INTEL_FAM6_KABYLAKE , 0x0B , 0x80 },
143
- { INTEL_FAM6_KABYLAKE , 0x0A , 0x80 },
144
- { INTEL_FAM6_KABYLAKE , 0x09 , 0x80 },
145
- { INTEL_FAM6_KABYLAKE_L , 0x0A , 0x80 },
146
- { INTEL_FAM6_KABYLAKE_L , 0x09 , 0x80 },
147
- { INTEL_FAM6_SKYLAKE_X , 0x03 , 0x0100013e },
148
- { INTEL_FAM6_SKYLAKE_X , 0x04 , 0x0200003c },
149
- { INTEL_FAM6_BROADWELL , 0x04 , 0x28 },
150
- { INTEL_FAM6_BROADWELL_G , 0x01 , 0x1b },
151
- { INTEL_FAM6_BROADWELL_D , 0x02 , 0x14 },
152
- { INTEL_FAM6_BROADWELL_D , 0x03 , 0x07000011 },
153
- { INTEL_FAM6_BROADWELL_X , 0x01 , 0x0b000025 },
154
- { INTEL_FAM6_HASWELL_L , 0x01 , 0x21 },
155
- { INTEL_FAM6_HASWELL_G , 0x01 , 0x18 },
156
- { INTEL_FAM6_HASWELL , 0x03 , 0x23 },
157
- { INTEL_FAM6_HASWELL_X , 0x02 , 0x3b },
158
- { INTEL_FAM6_HASWELL_X , 0x04 , 0x10 },
159
- { INTEL_FAM6_IVYBRIDGE_X , 0x04 , 0x42a },
142
+ { INTEL_KABYLAKE , 0x0B , 0x80 },
143
+ { INTEL_KABYLAKE , 0x0A , 0x80 },
144
+ { INTEL_KABYLAKE , 0x09 , 0x80 },
145
+ { INTEL_KABYLAKE_L , 0x0A , 0x80 },
146
+ { INTEL_KABYLAKE_L , 0x09 , 0x80 },
147
+ { INTEL_SKYLAKE_X , 0x03 , 0x0100013e },
148
+ { INTEL_SKYLAKE_X , 0x04 , 0x0200003c },
149
+ { INTEL_BROADWELL , 0x04 , 0x28 },
150
+ { INTEL_BROADWELL_G , 0x01 , 0x1b },
151
+ { INTEL_BROADWELL_D , 0x02 , 0x14 },
152
+ { INTEL_BROADWELL_D , 0x03 , 0x07000011 },
153
+ { INTEL_BROADWELL_X , 0x01 , 0x0b000025 },
154
+ { INTEL_HASWELL_L , 0x01 , 0x21 },
155
+ { INTEL_HASWELL_G , 0x01 , 0x18 },
156
+ { INTEL_HASWELL , 0x03 , 0x23 },
157
+ { INTEL_HASWELL_X , 0x02 , 0x3b },
158
+ { INTEL_HASWELL_X , 0x04 , 0x10 },
159
+ { INTEL_IVYBRIDGE_X , 0x04 , 0x42a },
160
160
/* Observed in the wild */
161
- { INTEL_FAM6_SANDYBRIDGE_X , 0x06 , 0x61b },
162
- { INTEL_FAM6_SANDYBRIDGE_X , 0x07 , 0x712 },
161
+ { INTEL_SANDYBRIDGE_X , 0x06 , 0x61b },
162
+ { INTEL_SANDYBRIDGE_X , 0x07 , 0x712 },
163
163
};
164
164
165
165
static bool bad_spectre_microcode (struct cpuinfo_x86 * c )
@@ -173,11 +173,8 @@ static bool bad_spectre_microcode(struct cpuinfo_x86 *c)
173
173
if (cpu_has (c , X86_FEATURE_HYPERVISOR ))
174
174
return false;
175
175
176
- if (c -> x86 != 6 )
177
- return false;
178
-
179
176
for (i = 0 ; i < ARRAY_SIZE (spectre_bad_microcodes ); i ++ ) {
180
- if (c -> x86_model == spectre_bad_microcodes [i ].model &&
177
+ if (c -> x86_vfm == spectre_bad_microcodes [i ].vfm &&
181
178
c -> x86_stepping == spectre_bad_microcodes [i ].stepping )
182
179
return (c -> microcode <= spectre_bad_microcodes [i ].microcode );
183
180
}
@@ -265,7 +262,7 @@ static void early_init_intel(struct cpuinfo_x86 *c)
265
262
* need the microcode to have already been loaded... so if it is
266
263
* not, recommend a BIOS update and disable large pages.
267
264
*/
268
- if (c -> x86 == 6 && c -> x86_model == 0x1c && c -> x86_stepping <= 2 &&
265
+ if (c -> x86_vfm == INTEL_ATOM_BONNELL && c -> x86_stepping <= 2 &&
269
266
c -> microcode < 0x20e ) {
270
267
pr_warn ("Atom PSE erratum detected, BIOS microcode update recommended\n" );
271
268
clear_cpu_cap (c , X86_FEATURE_PSE );
@@ -298,11 +295,11 @@ static void early_init_intel(struct cpuinfo_x86 *c)
298
295
299
296
/* Penwell and Cloverview have the TSC which doesn't sleep on S3 */
300
297
if (c -> x86 == 6 ) {
301
- switch (c -> x86_model ) {
302
- case INTEL_FAM6_ATOM_SALTWELL_MID :
303
- case INTEL_FAM6_ATOM_SALTWELL_TABLET :
304
- case INTEL_FAM6_ATOM_SILVERMONT_MID :
305
- case INTEL_FAM6_ATOM_AIRMONT_NP :
298
+ switch (c -> x86_vfm ) {
299
+ case INTEL_ATOM_SALTWELL_MID :
300
+ case INTEL_ATOM_SALTWELL_TABLET :
301
+ case INTEL_ATOM_SILVERMONT_MID :
302
+ case INTEL_ATOM_AIRMONT_NP :
306
303
set_cpu_cap (c , X86_FEATURE_NONSTOP_TSC_S3 );
307
304
break ;
308
305
default :
@@ -346,7 +343,7 @@ static void early_init_intel(struct cpuinfo_x86 *c)
346
343
* should be false so that __flush_tlb_all() causes CR3 instead of CR4.PGE
347
344
* to be modified.
348
345
*/
349
- if (c -> x86 == 5 && c -> x86_model == 9 ) {
346
+ if (c -> x86_vfm == INTEL_QUARK_X1000 ) {
350
347
pr_info ("Disabling PGE capability bit\n" );
351
348
setup_clear_cpu_cap (X86_FEATURE_PGE );
352
349
}
@@ -578,12 +575,13 @@ static void init_intel(struct cpuinfo_x86 *c)
578
575
set_cpu_cap (c , X86_FEATURE_PEBS );
579
576
}
580
577
581
- if (c -> x86 == 6 && boot_cpu_has (X86_FEATURE_CLFLUSH ) &&
582
- (c -> x86_model == 29 || c -> x86_model == 46 || c -> x86_model == 47 ))
578
+ if (boot_cpu_has (X86_FEATURE_CLFLUSH ) &&
579
+ (c -> x86_vfm == INTEL_CORE2_DUNNINGTON ||
580
+ c -> x86_vfm == INTEL_NEHALEM_EX ||
581
+ c -> x86_vfm == INTEL_WESTMERE_EX ))
583
582
set_cpu_bug (c , X86_BUG_CLFLUSH_MONITOR );
584
583
585
- if (c -> x86 == 6 && boot_cpu_has (X86_FEATURE_MWAIT ) &&
586
- ((c -> x86_model == INTEL_FAM6_ATOM_GOLDMONT )))
584
+ if (boot_cpu_has (X86_FEATURE_MWAIT ) && c -> x86_vfm == INTEL_ATOM_GOLDMONT )
587
585
set_cpu_bug (c , X86_BUG_MONITOR );
588
586
589
587
#ifdef CONFIG_X86_64
@@ -1199,9 +1197,9 @@ void handle_bus_lock(struct pt_regs *regs)
1199
1197
* feature even though they do not enumerate IA32_CORE_CAPABILITIES.
1200
1198
*/
1201
1199
static const struct x86_cpu_id split_lock_cpu_ids [] __initconst = {
1202
- X86_MATCH_INTEL_FAM6_MODEL ( ICELAKE_X , 0 ),
1203
- X86_MATCH_INTEL_FAM6_MODEL ( ICELAKE_L , 0 ),
1204
- X86_MATCH_INTEL_FAM6_MODEL ( ICELAKE_D , 0 ),
1200
+ X86_MATCH_VFM ( INTEL_ICELAKE_X , 0 ),
1201
+ X86_MATCH_VFM ( INTEL_ICELAKE_L , 0 ),
1202
+ X86_MATCH_VFM ( INTEL_ICELAKE_D , 0 ),
1205
1203
{}
1206
1204
};
1207
1205
0 commit comments