On 09.03.21 14:26, Pali Rohár wrote:
Watchdog is ready after successful call of ops->start() callback in
wdt_start() function. And is stopped after successful call of ops->stop()
callback in wdt_stop function.

So move setting of GD_FLG_WDT_READY flag from initr_watchdog() function to
wdt_start() and ensure that GD_FLG_WDT_READY flag is unset in wdt_stop()
function.

This change ensures that GD_FLG_WDT_READY flag is set only when watchdog is
running. And ensures that flag is also also when watchdog was started not
only by initr_watchdog() call (e.g. by U-Boot 'wdt' command).

Signed-off-by: Pali Rohár <p...@kernel.org>

Applied to u-boot-marvell/master (whole series)

Thanks,
Stefan

---
  drivers/watchdog/wdt-uclass.c | 15 ++++++++++++---
  1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c
index 28f7918c4673..3f707f61f74f 100644
--- a/drivers/watchdog/wdt-uclass.c
+++ b/drivers/watchdog/wdt-uclass.c
@@ -51,7 +51,6 @@ int initr_watchdog(void)
        }
wdt_start(gd->watchdog_dev, timeout * 1000, 0);
-       gd->flags |= GD_FLG_WDT_READY;
        printf("WDT:   Started with%s servicing (%ds timeout)\n",
               IS_ENABLED(CONFIG_WATCHDOG) ? "" : "out", timeout);
@@ -61,21 +60,31 @@ int initr_watchdog(void)
  int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags)
  {
        const struct wdt_ops *ops = device_get_ops(dev);
+       int ret;
if (!ops->start)
                return -ENOSYS;
- return ops->start(dev, timeout_ms, flags);
+       ret = ops->start(dev, timeout_ms, flags);
+       if (ret == 0)
+               gd->flags |= GD_FLG_WDT_READY;
+
+       return ret;
  }
int wdt_stop(struct udevice *dev)
  {
        const struct wdt_ops *ops = device_get_ops(dev);
+       int ret;
if (!ops->stop)
                return -ENOSYS;
- return ops->stop(dev);
+       ret = ops->stop(dev);
+       if (ret == 0)
+               gd->flags &= ~GD_FLG_WDT_READY;
+
+       return ret;
  }
int wdt_reset(struct udevice *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: s...@denx.de

Reply via email to