]> git.baikalelectronics.ru Git - kernel.git/commitdiff
watchdog: keembay: Update WDT pre-timeout during the initialization
authorShruthi Sanil <shruthi.sanil@intel.com>
Mon, 17 May 2021 17:49:45 +0000 (23:19 +0530)
committerWim Van Sebroeck <wim@linux-watchdog.org>
Mon, 21 Jun 2021 06:48:53 +0000 (08:48 +0200)
The pretimeout register has a default reset value. Hence
when a smaller WDT timeout is set which would be lesser than the
default pretimeout, the system behaves abnormally, starts
triggering the pretimeout interrupt even when the WDT is
not enabled, most of the times leading to system crash.
Hence an update in the pre-timeout is also required for the
default timeout that is being configured.

Fixes: 65392bb2ca8c ("watchdog: Add watchdog driver for Intel Keembay Soc")
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Kris Pan <kris.pan@intel.com>
Signed-off-by: Shruthi Sanil <shruthi.sanil@intel.com>
Link: https://lore.kernel.org/r/20210517174953.19404-2-shruthi.sanil@intel.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
drivers/watchdog/keembay_wdt.c

index 547d3fea33ff632cac6b3c5b814bab852c0fe552..f2f5c9fae29c0042026fc8bd7a6219cfb3679750 100644 (file)
@@ -29,6 +29,7 @@
 #define WDT_LOAD_MAX           U32_MAX
 #define WDT_LOAD_MIN           1
 #define WDT_TIMEOUT            5
+#define WDT_PRETIMEOUT         4
 
 static unsigned int timeout = WDT_TIMEOUT;
 module_param(timeout, int, 0);
@@ -224,11 +225,13 @@ static int keembay_wdt_probe(struct platform_device *pdev)
        wdt->wdd.min_timeout    = WDT_LOAD_MIN;
        wdt->wdd.max_timeout    = WDT_LOAD_MAX / wdt->rate;
        wdt->wdd.timeout        = WDT_TIMEOUT;
+       wdt->wdd.pretimeout     = WDT_PRETIMEOUT;
 
        watchdog_set_drvdata(&wdt->wdd, wdt);
        watchdog_set_nowayout(&wdt->wdd, nowayout);
        watchdog_init_timeout(&wdt->wdd, timeout, dev);
        keembay_wdt_set_timeout(&wdt->wdd, wdt->wdd.timeout);
+       keembay_wdt_set_pretimeout(&wdt->wdd, wdt->wdd.pretimeout);
 
        ret = devm_watchdog_register_device(dev, &wdt->wdd);
        if (ret)