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",
        .stop = rwdt_stop,
        .ping = rwdt_init_timeout,
        .get_timeleft = rwdt_get_timeleft,
+       .restart = rwdt_restart,
 };
 
 #if defined(CONFIG_ARCH_RCAR_GEN2) && defined(CONFIG_SMP)
        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);