mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 10:01:41 +00:00
x86/apic: Convert the TSC deadline timer matching to steppings macro
... and get rid of the function pointers which would spit out the microcode revision based on the CPU stepping. Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Mark Gross <mgross.linux.intel.com> Cc: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20200506071516.25445-4-bp@alien8.de
This commit is contained in:
parent
d8422f6bb0
commit
66abf23883
@ -544,46 +544,20 @@ static struct clock_event_device lapic_clockevent = {
|
|||||||
};
|
};
|
||||||
static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
|
static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
|
||||||
|
|
||||||
static __init u32 hsx_deadline_rev(void)
|
|
||||||
{
|
|
||||||
switch (boot_cpu_data.x86_stepping) {
|
|
||||||
case 0x02: return 0x3a; /* EP */
|
|
||||||
case 0x04: return 0x0f; /* EX */
|
|
||||||
}
|
|
||||||
|
|
||||||
return ~0U;
|
|
||||||
}
|
|
||||||
|
|
||||||
static __init u32 bdx_deadline_rev(void)
|
|
||||||
{
|
|
||||||
switch (boot_cpu_data.x86_stepping) {
|
|
||||||
case 0x02: return 0x00000011;
|
|
||||||
case 0x03: return 0x0700000e;
|
|
||||||
case 0x04: return 0x0f00000c;
|
|
||||||
case 0x05: return 0x0e000003;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ~0U;
|
|
||||||
}
|
|
||||||
|
|
||||||
static __init u32 skx_deadline_rev(void)
|
|
||||||
{
|
|
||||||
switch (boot_cpu_data.x86_stepping) {
|
|
||||||
case 0x03: return 0x01000136;
|
|
||||||
case 0x04: return 0x02000014;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (boot_cpu_data.x86_stepping > 4)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return ~0U;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct x86_cpu_id deadline_match[] __initconst = {
|
static const struct x86_cpu_id deadline_match[] __initconst = {
|
||||||
X86_MATCH_INTEL_FAM6_MODEL( HASWELL_X, &hsx_deadline_rev),
|
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(HASWELL_X, X86_STEPPINGS(0x2, 0x2), 0x3a), /* EP */
|
||||||
|
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(HASWELL_X, X86_STEPPINGS(0x4, 0x4), 0x0f), /* EX */
|
||||||
|
|
||||||
X86_MATCH_INTEL_FAM6_MODEL( BROADWELL_X, 0x0b000020),
|
X86_MATCH_INTEL_FAM6_MODEL( BROADWELL_X, 0x0b000020),
|
||||||
X86_MATCH_INTEL_FAM6_MODEL( BROADWELL_D, &bdx_deadline_rev),
|
|
||||||
X86_MATCH_INTEL_FAM6_MODEL( SKYLAKE_X, &skx_deadline_rev),
|
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x2, 0x2), 0x00000011),
|
||||||
|
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x3, 0x3), 0x0700000e),
|
||||||
|
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x4, 0x4), 0x0f00000c),
|
||||||
|
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x5, 0x5), 0x0e000003),
|
||||||
|
|
||||||
|
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SKYLAKE_X, X86_STEPPINGS(0x3, 0x3), 0x01000136),
|
||||||
|
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SKYLAKE_X, X86_STEPPINGS(0x4, 0x4), 0x02000014),
|
||||||
|
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SKYLAKE_X, X86_STEPPINGS(0x5, 0xf), 0),
|
||||||
|
|
||||||
X86_MATCH_INTEL_FAM6_MODEL( HASWELL, 0x22),
|
X86_MATCH_INTEL_FAM6_MODEL( HASWELL, 0x22),
|
||||||
X86_MATCH_INTEL_FAM6_MODEL( HASWELL_L, 0x20),
|
X86_MATCH_INTEL_FAM6_MODEL( HASWELL_L, 0x20),
|
||||||
@ -615,14 +589,7 @@ static __init bool apic_validate_deadline_timer(void)
|
|||||||
if (!m)
|
if (!m)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
/*
|
rev = (u32)m->driver_data;
|
||||||
* Function pointers will have the MSB set due to address layout,
|
|
||||||
* immediate revisions will not.
|
|
||||||
*/
|
|
||||||
if ((long)m->driver_data < 0)
|
|
||||||
rev = ((u32 (*)(void))(m->driver_data))();
|
|
||||||
else
|
|
||||||
rev = (u32)m->driver_data;
|
|
||||||
|
|
||||||
if (boot_cpu_data.microcode >= rev)
|
if (boot_cpu_data.microcode >= rev)
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user