Skip to content

Commit

Permalink
x86/apb_timer: Drop unused TSC calibration
Browse files Browse the repository at this point in the history
Drop the APB-timer TSC calibration, which hasn't been used since the
removal of Moorestown support by commit

  1a8359e ("x86/mid: Remove Intel Moorestown").

Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20200513100944.9171-1-johan@kernel.org
  • Loading branch information
Johan Hovold authored and Borislav Petkov committed May 27, 2020
1 parent fd52a75 commit 003d805
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 55 deletions.
2 changes: 0 additions & 2 deletions arch/x86/include/asm/apb_timer.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
#define APBT_DEV_USED 1

extern void apbt_time_init(void);
extern unsigned long apbt_quick_calibrate(void);
extern int arch_setup_apbt_irqs(int irq, int trigger, int mask, int cpu);
extern void apbt_setup_secondary_clock(void);

Expand All @@ -38,7 +37,6 @@ extern int sfi_mtimer_num;

#else /* CONFIG_APB_TIMER */

static inline unsigned long apbt_quick_calibrate(void) {return 0; }
static inline void apbt_time_init(void) { }

#endif
Expand Down
53 changes: 0 additions & 53 deletions arch/x86/kernel/apb_timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -345,56 +345,3 @@ void __init apbt_time_init(void)
apb_timer_block_enabled = 0;
panic("failed to enable APB timer\n");
}

/* called before apb_timer_enable, use early map */
unsigned long apbt_quick_calibrate(void)
{
int i, scale;
u64 old, new;
u64 t1, t2;
unsigned long khz = 0;
u32 loop, shift;

apbt_set_mapping();
dw_apb_clocksource_start(clocksource_apbt);

/* check if the timer can count down, otherwise return */
old = dw_apb_clocksource_read(clocksource_apbt);
i = 10000;
while (--i) {
if (old != dw_apb_clocksource_read(clocksource_apbt))
break;
}
if (!i)
goto failed;

/* count 16 ms */
loop = (apbt_freq / 1000) << 4;

/* restart the timer to ensure it won't get to 0 in the calibration */
dw_apb_clocksource_start(clocksource_apbt);

old = dw_apb_clocksource_read(clocksource_apbt);
old += loop;

t1 = rdtsc();

do {
new = dw_apb_clocksource_read(clocksource_apbt);
} while (new < old);

t2 = rdtsc();

shift = 5;
if (unlikely(loop >> shift == 0)) {
printk(KERN_INFO
"APBT TSC calibration failed, not enough resolution\n");
return 0;
}
scale = (int)div_u64((t2 - t1), loop >> shift);
khz = (scale * (apbt_freq / 1000)) >> shift;
printk(KERN_INFO "TSC freq calculated by APB timer is %lu khz\n", khz);
return khz;
failed:
return 0;
}

0 comments on commit 003d805

Please sign in to comment.