[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