summaryrefslogtreecommitdiff
path: root/drivers/watchdog/pnx4008_wdt.c
diff options
context:
space:
mode:
authorSylvain Lemieux <slemieux@tycoint.com>2016-03-04 21:44:08 +0300
committerWim Van Sebroeck <wim@iguana.be>2016-03-16 23:09:42 +0300
commit247dcad5c0361fdae06903f3b10855ba0381802d (patch)
treec31eeebc908d6777bc709522d996a54a59bdbad2 /drivers/watchdog/pnx4008_wdt.c
parent25b286c02defa26b136818b17909789102225aa8 (diff)
downloadlinux-247dcad5c0361fdae06903f3b10855ba0381802d.tar.xz
watchdog: pnx4008: restart: support "cmd" from userspace
Added support to verify if a "cmd" is passed from the userspace program rebooting the system; - if a valid "cmd" is available, handle it; - If the received "cmd" is not supported, use the default reboot mode. 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>
Diffstat (limited to 'drivers/watchdog/pnx4008_wdt.c')
-rw-r--r--drivers/watchdog/pnx4008_wdt.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c
index 51be66e8a473..0529aed158a4 100644
--- a/drivers/watchdog/pnx4008_wdt.c
+++ b/drivers/watchdog/pnx4008_wdt.c
@@ -129,6 +129,21 @@ static int pnx4008_wdt_set_timeout(struct watchdog_device *wdd,
static int pnx4008_restart_handler(struct watchdog_device *wdd,
unsigned long mode, void *cmd)
{
+ const char *boot_cmd = cmd;
+
+ /*
+ * Verify if a "cmd" passed from the userspace program rebooting
+ * the system; if available, handle it.
+ * - For details, see the 'reboot' syscall in kernel/reboot.c
+ * - If the received "cmd" is not supported, use the default mode.
+ */
+ if (boot_cmd) {
+ if (boot_cmd[0] == 'h')
+ mode = REBOOT_HARD;
+ else if (boot_cmd[0] == 's')
+ mode = REBOOT_SOFT;
+ }
+
if (mode == REBOOT_SOFT) {
/* Force match output active */
writel(EXT_MATCH0, WDTIM_EMR(wdt_base));