diff --git a/include/sbi/sbi_timer.h b/include/sbi/sbi_timer.h index 2a040927..17d6c1dc 100644 --- a/include/sbi/sbi_timer.h +++ b/include/sbi/sbi_timer.h @@ -140,6 +140,9 @@ bool sbi_timer_waitms_until(bool (*predicate)(void *), void *arg, /** Get timer value for current HART */ u64 sbi_timer_value(void); +/** Get timer frequency for current HART */ +unsigned long sbi_timer_frequency(void); + /** Compute timer value after specified milliseconds */ static inline u64 sbi_timer_value_after_msecs(ulong msecs) { diff --git a/lib/sbi/sbi_timer.c b/lib/sbi/sbi_timer.c index 4d737d22..8abb5e7b 100644 --- a/lib/sbi/sbi_timer.c +++ b/lib/sbi/sbi_timer.c @@ -104,6 +104,18 @@ bool sbi_timer_waitms_until(bool (*predicate)(void *), void *arg, return true; } +unsigned long sbi_timer_frequency(void) +{ + const struct sbi_timer_device *timer_dev = sbi_timer_get_device(); + + if (!timer_dev) { + sbi_printf("%s: called without timer device\n", __func__); + return 0; + } + + return timer_dev->timer_freq; +} + u64 sbi_timer_value(void) { if (get_time_val)