[PATCH] timer: orion-timer: Fix problem in early_init_done()
Stefan Roese
sr at denx.de
Tue Jan 17 12:47:10 CET 2023
On 1/16/23 18:54, Pali Rohár wrote:
> 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")
Applied to u-boot-marvell/master
Thanks,
Stefan
>> ---
>> 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
>>
Viele Grüße,
Stefan Roese
--
DENX Software Engineering GmbH, Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list