aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2023-01-16 09:01:48 +0100
committerStefan Roese <sr@denx.de>2023-01-17 07:06:37 +0100
commit9a13a76e6256c51d04f41139733dbb31755e8d30 (patch)
treeac3c2ad1a9e979d1a3379753e4d3afd1a771dbff
parent348064ee2c8f9494b91b55729ac60c5db79ef129 (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 <sr@denx.de> Acked-by: Pali Rohár <pali@kernel.org> Cc: Martin Rowe <martin.p.rowe@gmail.com> Cc: Tony Dinh <mibodhi@gmail.com> Cc: Pali Rohár <pali@kernel.org> Cc: Michael Walle <michael@walle.cc>
-rw-r--r--drivers/timer/orion-timer.c3
1 files changed, 2 insertions, 1 deletions
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;
}