x86: Add function to read time stamp counter

Put this function in the u-boot-x86.h header file. We could instead create
timer.h perhaps.

We support setting a base time, and reading the time relative to this base.

Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Signed-off-by: Stefan Reinauer <reinauer@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
master
Vadim Bendebury 12 years ago committed by Simon Glass
parent 57be9172fc
commit 2f899e03a9
  1. 12
      arch/x86/include/asm/u-boot-x86.h
  2. 17
      arch/x86/lib/timer.c

@ -68,4 +68,16 @@ int video_init(void);
void board_init_f_r_trampoline(ulong) __attribute__ ((noreturn));
void board_init_f_r(void) __attribute__ ((noreturn));
/* Read the time stamp counter */
static inline uint64_t rdtsc(void)
{
uint32_t high, low;
__asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high));
return (((uint64_t)high) << 32) | low;
}
/* board/... */
void timer_set_tsc_base(uint64_t new_base);
uint64_t timer_get_tsc(void);
#endif /* _U_BOOT_I386_H_ */

@ -37,6 +37,7 @@ struct timer_isr_function {
static struct timer_isr_function *first_timer_isr;
static unsigned long system_ticks;
static uint64_t base_value;
/*
* register_timer_isr() allows multiple architecture and board specific
@ -98,3 +99,19 @@ ulong get_timer(ulong base)
{
return system_ticks - base;
}
void timer_set_tsc_base(uint64_t new_base)
{
base_value = new_base;
}
uint64_t timer_get_tsc(void)
{
uint64_t time_now;
time_now = rdtsc();
if (!base_value)
base_value = time_now;
return time_now - base_value;
}

Loading…
Cancel
Save