summaryrefslogtreecommitdiff
path: root/lib/time.c
diff options
context:
space:
mode:
authorMichael Walle <michael@walle.cc>2022-08-17 22:37:48 +0300
committerStefan Roese <sr@denx.de>2022-08-23 13:38:30 +0300
commit616278bd2c563a6d12a2347ce5cfc3512f77ee42 (patch)
tree355500f0b9baa66528aa555110a63b67b56ff6b1 /lib/time.c
parent7875f8019c15ee557d4d7807cd1164876b47e8f3 (diff)
downloadu-boot-616278bd2c563a6d12a2347ce5cfc3512f77ee42.tar.xz
time: move the CONFIG_SYS_TIMER_RATE handling to the compiler
CONFIG_SYS_TIMER_RATE might be a dynamic value, i.e. a function call instead of a static value, thus it has to be evaluated at runtime. If it is a static value, the compiler should be able to optimize the unused branches out. This will be needed for kirkwoods dynamic CONFIG_SYS_TCLK setting. Cc: Pali Rohár <pali@kernel.org> Signed-off-by: Michael Walle <michael@walle.cc> Reviewed-by: Pali Rohár <pali@kernel.org> Reviewed-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'lib/time.c')
-rw-r--r--lib/time.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/time.c b/lib/time.c
index 96074b84af..bbf191f673 100644
--- a/lib/time.c
+++ b/lib/time.c
@@ -47,12 +47,15 @@ ulong timer_get_boot_us(void)
{
ulong count = timer_read_counter();
-#if CONFIG_SYS_TIMER_RATE == 1000000
- return count;
-#elif CONFIG_SYS_TIMER_RATE > 1000000
- return lldiv(count, CONFIG_SYS_TIMER_RATE / 1000000);
-#elif defined(CONFIG_SYS_TIMER_RATE)
- return (unsigned long long)count * 1000000 / CONFIG_SYS_TIMER_RATE;
+#ifdef CONFIG_SYS_TIMER_RATE
+ const ulong timer_rate = CONFIG_SYS_TIMER_RATE;
+
+ if (timer_rate == 1000000)
+ return count;
+ else if (timer_rate > 1000000)
+ return lldiv(count, timer_rate / 1000000);
+ else
+ return (unsigned long long)count * 1000000 / timer_rate;
#else
/* Assume the counter is in microseconds */
return count;