On Wednesday 17 August 2022 21:37:48 Michael Walle wrote: > 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 <p...@kernel.org> > Signed-off-by: Michael Walle <mich...@walle.cc>
Reviewed-by: Pali Rohár <p...@kernel.org> > --- > 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; > -- > 2.30.2 >