public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] watchdog: sama5d4_wdt: Reset delay on start
@ 2016-03-03 10:29 Romain Izard
  2016-03-03 12:10 ` Guenter Roeck
  2016-03-04  1:35 ` Yang, Wenyou
  0 siblings, 2 replies; 13+ 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] 13+ messages in thread

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

Thread overview: 13+ 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 12:10 ` Guenter Roeck
2016-03-03 12:53   ` Romain Izard
2016-03-03 19:02     ` Guenter Roeck
2016-03-04  1:35 ` Yang, Wenyou
2016-03-04  5:23   ` Guenter Roeck
2016-03-04  9:06     ` Romain Izard
2016-03-04 13:09       ` Guenter Roeck
2016-03-04 13:26         ` Romain Izard
2016-03-04 13:56           ` Guenter Roeck
2016-03-04 14:59             ` Lothar Waßmann
2016-03-04 15:26               ` Romain Izard
2016-03-04 15:56                 ` Lothar Waßmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox