watchdog: pnx4008: restart: support "cmd" from userspace
authorSylvain Lemieux <slemieux@tycoint.com>
Fri, 4 Mar 2016 18:44:08 +0000 (13:44 -0500)
committerWim Van Sebroeck <wim@iguana.be>
Wed, 16 Mar 2016 20:09:42 +0000 (21:09 +0100)
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>
drivers/watchdog/pnx4008_wdt.c

index 51be66e8a4734fde564ab522944cf8742809fd0e..0529aed158a4f22f56088599c71475b587e6d6f7 100644 (file)
@@ -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));