diff mbox series

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

Message ID 20220210171754.11858-1-philippe.reynes@softathome.com
State Accepted
Commit a12492ebbc88dab74b1d6e27d8194a56eb1fbbff
Delegated to: Stefan Roese
Headers show
Series drivers: watchdog: wdt-uclass.c: add a property u-boot, noautostart | expand

Commit Message

Philippe REYNES Feb. 10, 2022, 5:17 p.m. UTC
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@softathome.com>
---
 drivers/watchdog/wdt-uclass.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Simon Glass Feb. 26, 2022, 6:37 p.m. UTC | #1
On Thu, 10 Feb 2022 at 10:18, Philippe Reynes
<philippe.reynes@softathome.com> 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@softathome.com>
> ---
>  drivers/watchdog/wdt-uclass.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

But please add to the binding file in U-Boot
Stefan Roese March 8, 2022, 8:08 a.m. UTC | #2
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@softathome.com>

Reviewed-by: Stefan Roese <sr@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
Stefan Roese March 8, 2022, 9:09 a.m. UTC | #3
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@softathome.com>

Applied to u-boot-watchdog/master

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
diff mbox series

Patch

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.