[PATCH] drivers: watchdog: wdt-uclass.c: add a property u-boot, noautostart

Stefan Roese sr at denx.de
Tue Mar 8 09:08:13 CET 2022


On 2/10/22 18:17, Philippe Reynes wrote:
> Since commit 492ee6b8d0e7 ("watchdog: wdt-uclass.c: handle all DM
> watchdogs in watchdog_reset()"), all the watchdog are started when
> the config WATCHDOG_AUTOSTART.
> 
> To avoid a binary choice none/all, a property u-boot,noautostart
> may be added in the watchdog node of the u-boot device tree to not
> autostart this watchdog.
> 
> Signed-off-by: Philippe Reynes <philippe.reynes at softathome.com>

Reviewed-by: Stefan Roese <sr at denx.de>

Thanks,
Stefan

> ---
>   drivers/watchdog/wdt-uclass.c | 7 ++++++-
>   1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c
> index 6d0f473867..dbf556467d 100644
> --- a/drivers/watchdog/wdt-uclass.c
> +++ b/drivers/watchdog/wdt-uclass.c
> @@ -36,6 +36,8 @@ struct wdt_priv {
>   	ulong next_reset;
>   	/* Whether watchdog_start() has been called on the device. */
>   	bool running;
> +	/* No autostart */
> +	bool noautostart;
>   };
>   
>   static void init_watchdog_dev(struct udevice *dev)
> @@ -52,7 +54,7 @@ static void init_watchdog_dev(struct udevice *dev)
>   			       dev->name);
>   	}
>   
> -	if (!IS_ENABLED(CONFIG_WATCHDOG_AUTOSTART)) {
> +	if (!IS_ENABLED(CONFIG_WATCHDOG_AUTOSTART) || priv->noautostart) {
>   		printf("WDT:   Not starting %s\n", dev->name);
>   		return;
>   	}
> @@ -256,16 +258,19 @@ static int wdt_pre_probe(struct udevice *dev)
>   	 * indicated by a hw_margin_ms property.
>   	 */
>   	ulong reset_period = 1000;
> +	bool noautostart = false;
>   	struct wdt_priv *priv;
>   
>   	if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
>   		timeout = dev_read_u32_default(dev, "timeout-sec", timeout);
>   		reset_period = dev_read_u32_default(dev, "hw_margin_ms",
>   						    4 * reset_period) / 4;
> +		noautostart = dev_read_bool(dev, "u-boot,noautostart");
>   	}
>   	priv = dev_get_uclass_priv(dev);
>   	priv->timeout = timeout;
>   	priv->reset_period = reset_period;
> +	priv->noautostart = noautostart;
>   	/*
>   	 * Pretend this device was last reset "long" ago so the first
>   	 * watchdog_reset will actually call its ->reset method.

Viele Grüße,
Stefan Roese

-- 
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