[PATCH v2 07/11] watchdog: kvx: do not disable watchdog on probe

Ahmad Fatoum a.fatoum at pengutronix.de
Wed Jan 19 06:25:57 PST 2022


On 17.01.22 23:19, Jules Maselbas wrote:
> From: Louis Morhet <lmorhet at kalray.eu>
> As the watchdog may be set by a lower stage in the boot chain, and for
> a good reason (precisely to ensure reliable update when something
> unexpected happens during the boot chain), it is a bad idea to always
> disable it during probe.
> We should either have a mechanism to refresh it on a regular basis in
> barebox itself and set it to something bigger for Linux, or handle it
> transparently and let the previous stage set the global watchdog up to
> Linux. This patch assumes for now the latter.

The latter is preferable, because barebox execution time should be bound
and the watchdog ensures that in face of spurious bugs.

There's an autopoll mechanism that tries to ensure forward progress by
polling the watchdog in is_timeout. The idea is that loops checking for
is_timeout will either see forward progress or propagate an error. This
is more robust than explicitly littering around WATCHDOG_PING()s, but it's
not immune to all bugs, so turning on the watchdog very early is IMO
the best course of action. For development use, you can always do wd 0
or wd -x which I just sent out and CC'd you on. wd -x will disable
all watchdogs either by wd 0 if supported by the hardware and driver
or by enabling autopolling.

It's a strict development feature (like wd in general. There's
global.boot.watchdog_timeout for normal use during booting).

> Signed-off-by: Louis Morhet <lmorhet at kalray.eu>
> Signed-off-by: Jules Maselbas <jmaselbas at kalray.eu>

For this patch,

Reviewed-by: Ahmad Fatoum <a.fatoum at pengutronix.de>


> ---
>  drivers/watchdog/kvx_wdt.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> diff --git a/drivers/watchdog/kvx_wdt.c b/drivers/watchdog/kvx_wdt.c
> index da19136fda..df9430769b 100644
> --- a/drivers/watchdog/kvx_wdt.c
> +++ b/drivers/watchdog/kvx_wdt.c
> @@ -73,11 +73,9 @@ static int kvx_wdt_drv_probe(struct device_d *dev)
>  	wdd->hwdev = dev;
>  	wdd->set_timeout = kvx_wdt_set_timeout;
> -	/* Be sure that interrupt are disable */
> +	/* Be sure that interrupt are disabled */
>  	kvx_sfr_set_field(TCR, WIE, 0);
> -	kvx_watchdog_disable();
> -
>  	return watchdog_register(wdd);
>  }

Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

More information about the barebox mailing list