diff options
| author | Stefan Roese <[email protected]> | 2023-01-16 09:01:48 +0100 |
|---|---|---|
| committer | Stefan Roese <[email protected]> | 2023-01-17 07:06:37 +0100 |
| commit | 9a13a76e6256c51d04f41139733dbb31755e8d30 (patch) | |
| tree | ac3c2ad1a9e979d1a3379753e4d3afd1a771dbff /drivers/timer | |
| parent | 348064ee2c8f9494b91b55729ac60c5db79ef129 (diff) | |
timer: orion-timer: Fix problem in early_init_done()
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.
Fixes: 5387b093cb79 ("timer: orion-timer: Fix problem with early static variable")
Signed-off-by: Stefan Roese <[email protected]>
Acked-by: Pali Rohár <[email protected]>
Cc: Martin Rowe <[email protected]>
Cc: Tony Dinh <[email protected]>
Cc: Pali Rohár <[email protected]>
Cc: Michael Walle <[email protected]>
Diffstat (limited to 'drivers/timer')
| -rw-r--r-- | drivers/timer/orion-timer.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/timer/orion-timer.c b/drivers/timer/orion-timer.c index 810a03d5496..9cab27f2e48 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; } |
