[PATCH] watchdog: use time_after_eq() in watchdog_reset()
Stefan Roese
sr at denx.de
Tue Apr 27 10:21:36 CEST 2021
On 13.04.21 16:43, Rasmus Villemoes wrote:
> Some boards don't work with the rate-limiting done in the generic
> watchdog_reset() provided by wdt-uclass.
>
> For example, on powerpc, get_timer() ceases working during bootm since
> interrupts are disabled before the kernel image gets decompressed, and
> when the decompression takes longer than the watchdog device
> allows (or enough of the budget that the kernel doesn't get far enough
> to assume responsibility for petting the watchdog), the result is a
> non-booting board.
>
> As a somewhat hacky workaround (because DT is supposed to describe
> hardware), allow specifying hw_margin_ms=0 in device tree to
> effectively disable the ratelimiting and actually ping the watchdog
> every time watchdog_reset() is called. For that to work, the "has
> enough time passed" check just needs to be tweaked a little to allow
> the now==next_reset case as well.
>
> Suggested-by: Christophe Leroy <christophe.leroy at csgroup.eu>
> Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
Applied to u-boot-marvell/master
Thanks,
Stefan
> ---
>
> It's the option I dislike the most (because of the DT abuse), but I
> also do accept that it's the one with the minimal code impact, and
> apparently the path of least resistance. So here it is.
>
> drivers/watchdog/wdt-uclass.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c
> index 0603ffbd36..2687135296 100644
> --- a/drivers/watchdog/wdt-uclass.c
> +++ b/drivers/watchdog/wdt-uclass.c
> @@ -148,7 +148,7 @@ void watchdog_reset(void)
>
> /* Do not reset the watchdog too often */
> now = get_timer(0);
> - if (time_after(now, next_reset)) {
> + if (time_after_eq(now, next_reset)) {
> next_reset = now + reset_period;
> wdt_reset(gd->watchdog_dev);
> }
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
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