Re: [PATCH] watchdog: ath79_wdt: avoid spurious restarts on AR934x

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Gabor,

> On some AR934x based systems, where the frequency of
> the AHB bus is relatively high, the built-in watchdog
> causes a spurious restart when it gets enabled.
> 
> The possible cause of these restarts is that the timeout
> value written into the TIMER register does not reaches
> the hardware in time.
> 
> Add an explicit delay into the ath79_wdt_enable function
> to avoid the spurious restarts.
> 
> Signed-off-by: Gabor Juhos <juhosg@xxxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> ---
>  drivers/watchdog/ath79_wdt.c |   10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/watchdog/ath79_wdt.c b/drivers/watchdog/ath79_wdt.c
> index 399c3fd..0e67d96 100644
> --- a/drivers/watchdog/ath79_wdt.c
> +++ b/drivers/watchdog/ath79_wdt.c
> @@ -20,6 +20,7 @@
>  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>  
>  #include <linux/bitops.h>
> +#include <linux/delay.h>
>  #include <linux/errno.h>
>  #include <linux/fs.h>
>  #include <linux/io.h>
> @@ -90,6 +91,15 @@ static inline void ath79_wdt_keepalive(void)
>  static inline void ath79_wdt_enable(void)
>  {
>  	ath79_wdt_keepalive();
> +
> +	/*
> +	 * Updating the TIMER register requires a few microseconds
> +	 * on the AR934x SoCs at least. Use a small delay to ensure
> +	 * that the TIMER register is updated within the hardware
> +	 * before enabling the watchdog.
> +	 */
> +	udelay(2);
> +
>  	ath79_wdt_wr(WDOG_REG_CTRL, WDOG_CTRL_ACTION_FCR);
>  	/* flush write */
>  	ath79_wdt_rr(WDOG_REG_CTRL);

This patch has been added to linux-watchdog-next.

Kind regards,
Wim.

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]