watchdog: intel-mid_wdt: Keep watchdog running
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 10 Mar 2017 22:22:17 +0000 (00:22 +0200)
committerWim Van Sebroeck <wim@iguana.be>
Mon, 5 Jun 2017 18:37:35 +0000 (20:37 +0200)
Firmware followed by bootloader leaves watchdog running.

Keep it running in the driver.

User will not need any additional options to reboot in case of panic
during boot.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/watchdog/intel-mid_wdt.c

index 45e4d02221b5849e1a3f61fa83d85b16bb8382d6..72c108a12c19d72d9958c71a62a315b8e3a4668a 100644 (file)
@@ -147,8 +147,21 @@ static int mid_wdt_probe(struct platform_device *pdev)
                return ret;
        }
 
-       /* Make sure the watchdog is not running */
-       wdt_stop(wdt_dev);
+       /*
+        * The firmware followed by U-Boot leaves the watchdog running
+        * with the default threshold which may vary. When we get here
+        * we should make a decision to prevent any side effects before
+        * user space daemon will take care of it. The best option,
+        * taking into consideration that there is no way to read values
+        * back from hardware, is to enforce watchdog being run with
+        * deterministic values.
+        */
+       ret = wdt_start(wdt_dev);
+       if (ret)
+               return ret;
+
+       /* Make sure the watchdog is serviced */
+       set_bit(WDOG_HW_RUNNING, &wdt_dev->status);
 
        ret = devm_watchdog_register_device(&pdev->dev, wdt_dev);
        if (ret) {