[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