lib: time: Add microsecond timer
authorMarek Vasut <marek.vasut@gmail.com>
Tue, 15 Oct 2019 20:43:41 +0000 (22:43 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 31 Oct 2019 11:22:53 +0000 (07:22 -0400)
Add get_timer_us(), which is useful e.g. when we need higher
precision timestamps.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Tom Rini <trini@konsulko.com>
Cc: Simon Glass <sjg@chromium.org>
[trini: Fixup arch/arm/mach-bcm283x/include/mach/timer.h]
Signed-off-by: Tom Rini <trini@konsulko.com>
arch/arm/mach-bcm283x/include/mach/timer.h
include/time.h
lib/time.c

index 014355e..61beb1a 100644 (file)
@@ -25,9 +25,6 @@ struct bcm2835_timer_regs {
        u32 c2;
        u32 c3;
 };
-
-extern ulong get_timer_us(ulong base);
-
 #endif
 
 #endif
index 1e9b369..a114952 100644 (file)
@@ -13,6 +13,7 @@ unsigned long get_timer(unsigned long base);
  * Granularity may be larger than 1us if hardware does not support this.
  */
 unsigned long timer_get_us(void);
+uint64_t get_timer_us(uint64_t base);
 
 /*
  * timer_test_add_offset()
index f5751ab..f30fc05 100644 (file)
@@ -134,6 +134,20 @@ ulong __weak get_timer(ulong base)
        return tick_to_time(get_ticks()) - base;
 }
 
+static uint64_t notrace tick_to_time_us(uint64_t tick)
+{
+       ulong div = get_tbclk() / 1000;
+
+       tick *= CONFIG_SYS_HZ;
+       do_div(tick, div);
+       return tick;
+}
+
+uint64_t __weak get_timer_us(uint64_t base)
+{
+       return tick_to_time_us(get_ticks()) - base;
+}
+
 unsigned long __weak notrace timer_get_us(void)
 {
        return tick_to_time(get_ticks() * 1000);