diff options
Diffstat (limited to 'target/linux')
-rw-r--r-- | target/linux/ar71xx/patches-3.10/104-watchdog-ath79-wdt-avoid-spurious-restarts-on-AR934x.patch | 48 | ||||
-rw-r--r-- | target/linux/ar71xx/patches-3.10/611-MIPS-ath79-wdt-timeout.patch | 2 |
2 files changed, 49 insertions, 1 deletions
diff --git a/target/linux/ar71xx/patches-3.10/104-watchdog-ath79-wdt-avoid-spurious-restarts-on-AR934x.patch b/target/linux/ar71xx/patches-3.10/104-watchdog-ath79-wdt-avoid-spurious-restarts-on-AR934x.patch new file mode 100644 index 0000000000..c7bf06656e --- /dev/null +++ b/target/linux/ar71xx/patches-3.10/104-watchdog-ath79-wdt-avoid-spurious-restarts-on-AR934x.patch @@ -0,0 +1,48 @@ +From 2ff030d44672d745c5327b72463af43f5103e99b Mon Sep 17 00:00:00 2001 +From: Gabor Juhos <juhosg@openwrt.org> +Date: Tue, 25 Mar 2014 17:07:46 +0100 +Subject: [PATCH] watchdog: ath79-wdt: avoid spurious restarts on AR934x + +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@openwrt.org> +Cc: <stable@vger.kernel.org> +--- + drivers/watchdog/ath79_wdt.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +--- 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/init.h> +@@ -91,6 +92,15 @@ static inline void ath79_wdt_keepalive(v + 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); diff --git a/target/linux/ar71xx/patches-3.10/611-MIPS-ath79-wdt-timeout.patch b/target/linux/ar71xx/patches-3.10/611-MIPS-ath79-wdt-timeout.patch index 08972afee0..0927d5a977 100644 --- a/target/linux/ar71xx/patches-3.10/611-MIPS-ath79-wdt-timeout.patch +++ b/target/linux/ar71xx/patches-3.10/611-MIPS-ath79-wdt-timeout.patch @@ -6,7 +6,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> --- a/drivers/watchdog/ath79_wdt.c +++ b/drivers/watchdog/ath79_wdt.c -@@ -105,10 +105,14 @@ static inline void ath79_wdt_disable(voi +@@ -115,10 +115,14 @@ static inline void ath79_wdt_disable(voi static int ath79_wdt_set_timeout(int val) { |