diff --git a/include/common.h b/include/common.h index 399363a..85eaa77 100644 --- a/include/common.h +++ b/include/common.h @@ -207,6 +207,13 @@ typedef void (interrupt_handler_t)(void *); #endif /* CONFIG_SERIAL_MULTI */ /* + * Return the time since boot in microseconds, This is needed for bootstage + * and should be defined in CPU- or board-specific code. If undefined then + * millisecond resolution will be used (the standard get_timer()). + */ +ulong timer_get_boot_us(void); + +/* * General Purpose Utilities */ #define min(X, Y) \ diff --git a/lib/time.c b/lib/time.c index 6e2937b..69edc3d 100644 --- a/lib/time.c +++ b/lib/time.c @@ -47,3 +47,20 @@ void mdelay(unsigned long msec) while (msec--) udelay(1000); } + +ulong __timer_get_boot_us(void) +{ + static ulong base_time; + + /* + * We can't implement this properly. Return 0 on the first call and + * larger values after that. + */ + if (base_time) + return get_timer(base_time) * 1000; + base_time = get_timer(0); + return 0; +} + +ulong timer_get_boot_us(void) + __attribute__((weak, alias("__timer_get_boot_us")));