[PATCH] watchdog: ftwdt010: need to reset watchdog in ftwdt010_wdt_start()
Stefan Roese
sr at denx.de
Thu Aug 10 17:26:23 CEST 2023
On 7/30/23 19:14, Sergei Antonov wrote:
> 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 at gmail.com>
Applied to u-boot-watchdog/master
Thanks,
Stefan
> ---
> drivers/watchdog/ftwdt010_wdt.c | 40 +++++++++++++++++----------------
> 1 file changed, 21 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/watchdog/ftwdt010_wdt.c b/drivers/watchdog/ftwdt010_wdt.c
> index a6b33b17209d..1f5f301b1251 100644
> --- a/drivers/watchdog/ftwdt010_wdt.c
> +++ b/drivers/watchdog/ftwdt010_wdt.c
> @@ -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)
Viele Grüße,
Stefan Roese
--
DENX Software Engineering GmbH, Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list