[PATCH] timer: orion-timer: Fix problem in early_init_done()
Pali Rohár
pali at kernel.org
Mon Jan 16 18:54:21 CET 2023
On Monday 16 January 2023 16:34:45 Stefan Roese wrote:
> It was noticed that Clearfog is currently broken with this newly
> introduced early_init_done() function. Apparently the timer is enabled
> here when U-Boot is run but not configured - at least not correctly.
> Resulting in a hangup in the timer reading functions.
>
> To fix this, also read the value of the reload register and check it's
> value with the one written to by U-Boot. Only if this matches, the
> init has already been done.
>
> Signed-off-by: Stefan Roese <sr at denx.de>
> Cc: Martin Rowe <martin.p.rowe at gmail.com>
> Cc: Tony Dinh <mibodhi at gmail.com>
> Cc: Pali Rohár <pali at kernel.org>
> Cc: Michael Walle <michael at walle.cc>
Looks good.
Acked-by: Pali Rohár <pali at kernel.org>
Maybe you should also fixed line:
Fixes: 5387b093cb79 ("timer: orion-timer: Fix problem with early static variable")
> ---
> drivers/timer/orion-timer.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/timer/orion-timer.c b/drivers/timer/orion-timer.c
> index 810a03d54960..9cab27f2e48b 100644
> --- a/drivers/timer/orion-timer.c
> +++ b/drivers/timer/orion-timer.c
> @@ -25,7 +25,8 @@ struct orion_timer_priv {
>
> static bool early_init_done(void *base)
> {
> - if (readl(base + TIMER_CTRL) & TIMER0_EN)
> + if ((readl(base + TIMER_CTRL) & TIMER0_EN) &&
> + (readl(base + TIMER0_RELOAD) == ~0))
> return true;
> return false;
> }
> --
> 2.39.0
>
More information about the U-Boot
mailing list