diff options
author | Sylvain Lemieux <slemieux@tycoint.com> | 2016-03-04 13:44:07 -0500 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2016-03-16 16:09:41 -0400 |
commit | 25b286c02defa26b136818b17909789102225aa8 (patch) | |
tree | 03ca8da652a465001ab8a249d03b054f981759eb | |
parent | 4ed5443d9175f4b6008ca18601672c812a1fe93b (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.c | 13 |
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, | |||
129 | static int pnx4008_restart_handler(struct watchdog_device *wdd, | 129 | static 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); |