Skip to content

Commit

Permalink
watchdog: ftwdt010: need to reset watchdog in ftwdt010_wdt_start()
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Stefan Roese <[email protected]>
  • Loading branch information
saproj authored and stroese committed Aug 10, 2023
1 parent 8ba4eae commit 160984e
Showing 1 changed file with 21 additions and 19 deletions.
40 changes: 21 additions & 19 deletions drivers/watchdog/ftwdt010_wdt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand Down

0 comments on commit 160984e

Please sign in to comment.