aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSylvain Lemieux <slemieux@tycoint.com>2016-03-04 13:44:07 -0500
committerWim Van Sebroeck <wim@iguana.be>2016-03-16 16:09:41 -0400
commit25b286c02defa26b136818b17909789102225aa8 (patch)
tree03ca8da652a465001ab8a249d03b054f981759eb
parent4ed5443d9175f4b6008ca18601672c812a1fe93b (diff)
watchdog: pnx4008: add support for soft reset
Add support for explicit soft reset using the reboot mode. The default reboot mode behavior is unchanged; you can overwrite the default reboot type in the board specific file "DT_MACHINE_START" definition using the "reboot_mode" parameter. Signed-off-by: Sylvain Lemieux <slemieux@tycoint.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
-rw-r--r--drivers/watchdog/pnx4008_wdt.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c
index f3be522986b6..51be66e8a473 100644
--- a/drivers/watchdog/pnx4008_wdt.c
+++ b/drivers/watchdog/pnx4008_wdt.c
@@ -129,9 +129,16 @@ static int pnx4008_wdt_set_timeout(struct watchdog_device *wdd,
129static int pnx4008_restart_handler(struct watchdog_device *wdd, 129static int pnx4008_restart_handler(struct watchdog_device *wdd,
130 unsigned long mode, void *cmd) 130 unsigned long mode, void *cmd)
131{ 131{
132 /* Instant assert of RESETOUT_N with pulse length 1mS */ 132 if (mode == REBOOT_SOFT) {
133 writel(13000, WDTIM_PULSE(wdt_base)); 133 /* Force match output active */
134 writel(M_RES2 | RESFRC1 | RESFRC2, WDTIM_MCTRL(wdt_base)); 134 writel(EXT_MATCH0, WDTIM_EMR(wdt_base));
135 /* Internal reset on match output (RESOUT_N not asserted) */
136 writel(M_RES1, WDTIM_MCTRL(wdt_base));
137 } else {
138 /* Instant assert of RESETOUT_N with pulse length 1mS */
139 writel(13000, WDTIM_PULSE(wdt_base));
140 writel(M_RES2 | RESFRC1 | RESFRC2, WDTIM_MCTRL(wdt_base));
141 }
135 142
136 /* Wait for watchdog to reset system */ 143 /* Wait for watchdog to reset system */
137 mdelay(1000); 144 mdelay(1000);