watchdog: keembay: Update WDT pre-timeout during the initialization
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: fa0f8d51e90d ("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>
This commit is contained in:
parent
c4681547bc
commit
2935381630
@ -29,6 +29,7 @@
|
|||||||
#define WDT_LOAD_MAX U32_MAX
|
#define WDT_LOAD_MAX U32_MAX
|
||||||
#define WDT_LOAD_MIN 1
|
#define WDT_LOAD_MIN 1
|
||||||
#define WDT_TIMEOUT 5
|
#define WDT_TIMEOUT 5
|
||||||
|
#define WDT_PRETIMEOUT 4
|
||||||
|
|
||||||
static unsigned int timeout = WDT_TIMEOUT;
|
static unsigned int timeout = WDT_TIMEOUT;
|
||||||
module_param(timeout, int, 0);
|
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.min_timeout = WDT_LOAD_MIN;
|
||||||
wdt->wdd.max_timeout = WDT_LOAD_MAX / wdt->rate;
|
wdt->wdd.max_timeout = WDT_LOAD_MAX / wdt->rate;
|
||||||
wdt->wdd.timeout = WDT_TIMEOUT;
|
wdt->wdd.timeout = WDT_TIMEOUT;
|
||||||
|
wdt->wdd.pretimeout = WDT_PRETIMEOUT;
|
||||||
|
|
||||||
watchdog_set_drvdata(&wdt->wdd, wdt);
|
watchdog_set_drvdata(&wdt->wdd, wdt);
|
||||||
watchdog_set_nowayout(&wdt->wdd, nowayout);
|
watchdog_set_nowayout(&wdt->wdd, nowayout);
|
||||||
watchdog_init_timeout(&wdt->wdd, timeout, dev);
|
watchdog_init_timeout(&wdt->wdd, timeout, dev);
|
||||||
keembay_wdt_set_timeout(&wdt->wdd, wdt->wdd.timeout);
|
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);
|
ret = devm_watchdog_register_device(dev, &wdt->wdd);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user