|
@@ -110,6 +110,16 @@ static unsigned int rwdt_get_timeleft(struct watchdog_device *wdev)
|
|
|
return DIV_BY_CLKS_PER_SEC(priv, 65536 - val);
|
|
|
}
|
|
|
|
|
|
+static int rwdt_restart(struct watchdog_device *wdev, unsigned long action,
|
|
|
+ void *data)
|
|
|
+{
|
|
|
+ struct rwdt_priv *priv = watchdog_get_drvdata(wdev);
|
|
|
+
|
|
|
+ rwdt_start(wdev);
|
|
|
+ rwdt_write(priv, 0xffff, RWTCNT);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static const struct watchdog_info rwdt_ident = {
|
|
|
.options = WDIOF_MAGICCLOSE | WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT,
|
|
|
.identity = "Renesas WDT Watchdog",
|
|
@@ -121,6 +131,7 @@ static const struct watchdog_ops rwdt_ops = {
|
|
|
.stop = rwdt_stop,
|
|
|
.ping = rwdt_init_timeout,
|
|
|
.get_timeleft = rwdt_get_timeleft,
|
|
|
+ .restart = rwdt_restart,
|
|
|
};
|
|
|
|
|
|
#if defined(CONFIG_ARCH_RCAR_GEN2) && defined(CONFIG_SMP)
|
|
@@ -220,6 +231,7 @@ static int rwdt_probe(struct platform_device *pdev)
|
|
|
platform_set_drvdata(pdev, priv);
|
|
|
watchdog_set_drvdata(&priv->wdev, priv);
|
|
|
watchdog_set_nowayout(&priv->wdev, nowayout);
|
|
|
+ watchdog_set_restart_priority(&priv->wdev, 0);
|
|
|
|
|
|
/* This overrides the default timeout only if DT configuration was found */
|
|
|
ret = watchdog_init_timeout(&priv->wdev, 0, &pdev->dev);
|