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 |
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
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
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 --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.
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(-)