diff options
author | Marek Vasut | 2019-10-15 22:43:41 +0200 |
---|---|---|
committer | Tom Rini | 2019-10-31 07:22:53 -0400 |
commit | 80e7e7c2aba5793a1e39592cd53de9e5aca96f0b (patch) | |
tree | 1ce3f652b3e6a65c7ad2a76e8bec940261b202ec | |
parent | 52e1d93c14d0a56651367eb00f8d6b6fe80a2708 (diff) |
lib: time: Add microsecond timer
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>
-rw-r--r-- | arch/arm/mach-bcm283x/include/mach/timer.h | 3 | ||||
-rw-r--r-- | include/time.h | 1 | ||||
-rw-r--r-- | lib/time.c | 14 |
3 files changed, 15 insertions, 3 deletions
diff --git a/arch/arm/mach-bcm283x/include/mach/timer.h b/arch/arm/mach-bcm283x/include/mach/timer.h index 014355e759a..61beb1aba11 100644 --- a/arch/arm/mach-bcm283x/include/mach/timer.h +++ b/arch/arm/mach-bcm283x/include/mach/timer.h @@ -25,9 +25,6 @@ struct bcm2835_timer_regs { u32 c2; u32 c3; }; - -extern ulong get_timer_us(ulong base); - #endif #endif diff --git a/include/time.h b/include/time.h index 1e9b369be7c..a1149522edf 100644 --- a/include/time.h +++ b/include/time.h @@ -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() diff --git a/lib/time.c b/lib/time.c index f5751ab162b..f30fc05804b 100644 --- a/lib/time.c +++ b/lib/time.c @@ -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); |