From 616278bd2c563a6d12a2347ce5cfc3512f77ee42 Mon Sep 17 00:00:00 2001 From: Michael Walle Date: Wed, 17 Aug 2022 21:37:48 +0200 Subject: [PATCH] time: move the CONFIG_SYS_TIMER_RATE handling to the compiler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Michael Walle Reviewed-by: Pali Rohár Reviewed-by: Stefan Roese --- lib/time.c | 15 +++++++++------ 1 file 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;