All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] watchdog: sama5d4_wdt: Reset delay on start
@ 2016-03-03 10:29 ` Romain Izard
  0 siblings, 0 replies; 27+ messages in thread
From: Romain Izard @ 2016-03-03 10:29 UTC (permalink / raw)
  To: linux-kernel, linux-watchdog, linux-arm-kernel, Wim Van Sebroeck
  Cc: Guenter Roeck, Wenyou Yang, Nicolas Ferre, Romain Izard

If the internal counter is not refreshed when the watchdog is started
for the first time, the watchdog will trigger very rapidly. For example,
opening /dev/watchdog without writing in it will immediately trigger a
reboot, instead of waiting for the delay to expire.

To avoid this problem, reload the timer on opening the watchdog device.

Command: "while sleep 5; do echo 1; done > /dev/watchdog"
Before: system reset
After: the watchdog runs correctly

Signed-off-by: Romain Izard <romain.izard.pro@gmail.com>
---
 drivers/watchdog/sama5d4_wdt.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/watchdog/sama5d4_wdt.c b/drivers/watchdog/sama5d4_wdt.c
index a49634cdc1cc..e162fe140ae1 100644
--- a/drivers/watchdog/sama5d4_wdt.c
+++ b/drivers/watchdog/sama5d4_wdt.c
@@ -15,6 +15,7 @@
 #include <linux/platform_device.h>
 #include <linux/reboot.h>
 #include <linux/watchdog.h>
+#include <linux/delay.h>
 
 #include "at91sam9_wdt.h"
 
@@ -58,6 +59,8 @@ static int sama5d4_wdt_start(struct watchdog_device *wdd)
 	reg = wdt_read(wdt, AT91_WDT_MR);
 	reg &= ~AT91_WDT_WDDIS;
 	wdt_write(wdt, AT91_WDT_MR, reg);
+	udelay(125); /* > 4 cycles at 32,768 Hz */
+	wdt_write(wdt, AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT);
 
 	return 0;
 }
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2016-03-04 15:59 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-03 10:29 [PATCH v1] watchdog: sama5d4_wdt: Reset delay on start Romain Izard
2016-03-03 10:29 ` Romain Izard
2016-03-03 12:10 ` Guenter Roeck
2016-03-03 12:10   ` Guenter Roeck
2016-03-03 12:53   ` Romain Izard
2016-03-03 12:53     ` Romain Izard
2016-03-03 19:02     ` Guenter Roeck
2016-03-03 19:02       ` Guenter Roeck
2016-03-04  1:35 ` Yang, Wenyou
2016-03-04  1:35   ` Yang, Wenyou
2016-03-04  5:23   ` Guenter Roeck
2016-03-04  5:23     ` Guenter Roeck
2016-03-04  9:06     ` Romain Izard
2016-03-04  9:06       ` Romain Izard
2016-03-04 13:09       ` Guenter Roeck
2016-03-04 13:09         ` Guenter Roeck
2016-03-04 13:26         ` Romain Izard
2016-03-04 13:26           ` Romain Izard
2016-03-04 13:56           ` Guenter Roeck
2016-03-04 13:56             ` Guenter Roeck
2016-03-04 14:59             ` Lothar Waßmann
2016-03-04 14:59               ` Lothar Waßmann
2016-03-04 15:26               ` Romain Izard
2016-03-04 15:26                 ` Romain Izard
2016-03-04 15:56                 ` Lothar Waßmann
2016-03-04 15:56                   ` Lothar Waßmann
2016-03-04 15:56                   ` Lothar Waßmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.