]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
watchdog: ftwdt010: need to reset watchdog in ftwdt010_wdt_start()
authorSergei Antonov <saproj@gmail.com>
Sun, 30 Jul 2023 17:14:16 +0000 (20:14 +0300)
committerStefan Roese <sr@denx.de>
Thu, 10 Aug 2023 06:39:16 +0000 (08:39 +0200)
ftwdt010_wdt_start() has to call ftwdt010_wdt_reset() after setting-up
the timeout in the same fashion ftwdt010_wdt_expire_now() does it.

Without this patch the "wdt start <ms>" command does not actually start
the watchdog timer until the "wdt reset" command is executed.

Signed-off-by: Sergei Antonov <saproj@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
drivers/watchdog/ftwdt010_wdt.c

index a6b33b17209d0c0c7d20dd653c8a5a5f3c30f426..1f5f301b125148236bf615368e4365581605914b 100644 (file)
@@ -25,8 +25,27 @@ struct ftwdt010_wdt_priv {
        struct ftwdt010_wdt __iomem *regs;
 };
 
+static int ftwdt010_wdt_reset(struct udevice *dev)
+{
+       struct ftwdt010_wdt_priv *priv = dev_get_priv(dev);
+       struct ftwdt010_wdt *wd = priv->regs;
+
+       debug("Reset WDT..\n");
+
+       /* clear control register */
+       writel(0, &wd->wdcr);
+
+       /* Write Magic number */
+       writel(FTWDT010_WDRESTART_MAGIC, &wd->wdrestart);
+
+       /* Enable WDT */
+       writel(FTWDT010_WDCR_RST | FTWDT010_WDCR_ENABLE, &wd->wdcr);
+
+       return 0;
+}
+
 /*
- * Set the watchdog time interval.
+ * Set the watchdog time interval and start the timer.
  * Counter is 32 bit.
  */
 static int ftwdt010_wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags)
@@ -52,24 +71,7 @@ static int ftwdt010_wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags)
 
        writel(reg, &wd->wdload);
 
-       return 0;
-}
-
-static int ftwdt010_wdt_reset(struct udevice *dev)
-{
-       struct ftwdt010_wdt_priv *priv = dev_get_priv(dev);
-       struct ftwdt010_wdt *wd = priv->regs;
-
-       /* clear control register */
-       writel(0, &wd->wdcr);
-
-       /* Write Magic number */
-       writel(FTWDT010_WDRESTART_MAGIC, &wd->wdrestart);
-
-       /* Enable WDT */
-       writel((FTWDT010_WDCR_RST | FTWDT010_WDCR_ENABLE), &wd->wdcr);
-
-       return 0;
+       return ftwdt010_wdt_reset(dev);
 }
 
 static int ftwdt010_wdt_stop(struct udevice *dev)