aboutsummaryrefslogtreecommitdiffstats
path: root/patches/0892-watchdog-renesas_wdt-Add-restart-handler.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/0892-watchdog-renesas_wdt-Add-restart-handler.patch')
-rw-r--r--patches/0892-watchdog-renesas_wdt-Add-restart-handler.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/patches/0892-watchdog-renesas_wdt-Add-restart-handler.patch b/patches/0892-watchdog-renesas_wdt-Add-restart-handler.patch
new file mode 100644
index 00000000000000..46a7be64228e23
--- /dev/null
+++ b/patches/0892-watchdog-renesas_wdt-Add-restart-handler.patch
@@ -0,0 +1,65 @@
+From 43f62fde9ae9a0a0899cb26f4e49208e82bb8424 Mon Sep 17 00:00:00 2001
+From: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
+Date: Mon, 5 Mar 2018 15:30:26 +0000
+Subject: [PATCH 0892/1795] watchdog: renesas_wdt: Add restart handler
+
+On iWave's boards iwg20d and iwg22d the only way to reboot the system is
+by means of the watchdog.
+This patch adds a restart handler to rwdt_ops, and also makes sure we
+keep its priority to the lowest level, in order to not override other
+more effective handlers.
+
+Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
+Signed-off-by: Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>
+Reviewed-by: Guenter Roeck <linux@roeck-us.net>
+Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
+(cherry picked from commit 089bcaa87e772beb005068a5ef28c71bb895d01d)
+Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
+Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
+---
+ drivers/watchdog/renesas_wdt.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/drivers/watchdog/renesas_wdt.c b/drivers/watchdog/renesas_wdt.c
+index 0dede5beb3f1..6b8c6ddfe30b 100644
+--- a/drivers/watchdog/renesas_wdt.c
++++ b/drivers/watchdog/renesas_wdt.c
+@@ -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);
+--
+2.19.0
+