Skip to content

Commit 66abf23

Browse files
committed
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 <[email protected]> Reviewed-by: Mark Gross <mgross.linux.intel.com> Cc: Peter Zijlstra (Intel) <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent d8422f6 commit 66abf23

File tree

1 file changed

+12
-45
lines changed

1 file changed

+12
-45
lines changed

arch/x86/kernel/apic/apic.c

Lines changed: 12 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -544,46 +544,20 @@ static struct clock_event_device lapic_clockevent = {
544544
};
545545
static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
546546

547-
static __init u32 hsx_deadline_rev(void)
548-
{
549-
switch (boot_cpu_data.x86_stepping) {
550-
case 0x02: return 0x3a; /* EP */
551-
case 0x04: return 0x0f; /* EX */
552-
}
553-
554-
return ~0U;
555-
}
556-
557-
static __init u32 bdx_deadline_rev(void)
558-
{
559-
switch (boot_cpu_data.x86_stepping) {
560-
case 0x02: return 0x00000011;
561-
case 0x03: return 0x0700000e;
562-
case 0x04: return 0x0f00000c;
563-
case 0x05: return 0x0e000003;
564-
}
565-
566-
return ~0U;
567-
}
568-
569-
static __init u32 skx_deadline_rev(void)
570-
{
571-
switch (boot_cpu_data.x86_stepping) {
572-
case 0x03: return 0x01000136;
573-
case 0x04: return 0x02000014;
574-
}
547+
static const struct x86_cpu_id deadline_match[] __initconst = {
548+
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(HASWELL_X, X86_STEPPINGS(0x2, 0x2), 0x3a), /* EP */
549+
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(HASWELL_X, X86_STEPPINGS(0x4, 0x4), 0x0f), /* EX */
575550

576-
if (boot_cpu_data.x86_stepping > 4)
577-
return 0;
551+
X86_MATCH_INTEL_FAM6_MODEL( BROADWELL_X, 0x0b000020),
578552

579-
return ~0U;
580-
}
553+
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x2, 0x2), 0x00000011),
554+
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x3, 0x3), 0x0700000e),
555+
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x4, 0x4), 0x0f00000c),
556+
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x5, 0x5), 0x0e000003),
581557

582-
static const struct x86_cpu_id deadline_match[] __initconst = {
583-
X86_MATCH_INTEL_FAM6_MODEL( HASWELL_X, &hsx_deadline_rev),
584-
X86_MATCH_INTEL_FAM6_MODEL( BROADWELL_X, 0x0b000020),
585-
X86_MATCH_INTEL_FAM6_MODEL( BROADWELL_D, &bdx_deadline_rev),
586-
X86_MATCH_INTEL_FAM6_MODEL( SKYLAKE_X, &skx_deadline_rev),
558+
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SKYLAKE_X, X86_STEPPINGS(0x3, 0x3), 0x01000136),
559+
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SKYLAKE_X, X86_STEPPINGS(0x4, 0x4), 0x02000014),
560+
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SKYLAKE_X, X86_STEPPINGS(0x5, 0xf), 0),
587561

588562
X86_MATCH_INTEL_FAM6_MODEL( HASWELL, 0x22),
589563
X86_MATCH_INTEL_FAM6_MODEL( HASWELL_L, 0x20),
@@ -615,14 +589,7 @@ static __init bool apic_validate_deadline_timer(void)
615589
if (!m)
616590
return true;
617591

618-
/*
619-
* Function pointers will have the MSB set due to address layout,
620-
* immediate revisions will not.
621-
*/
622-
if ((long)m->driver_data < 0)
623-
rev = ((u32 (*)(void))(m->driver_data))();
624-
else
625-
rev = (u32)m->driver_data;
592+
rev = (u32)m->driver_data;
626593

627594
if (boot_cpu_data.microcode >= rev)
628595
return true;

0 commit comments

Comments
 (0)