diff options
Diffstat (limited to 'patches/0892-watchdog-renesas_wdt-Add-restart-handler.patch')
-rw-r--r-- | patches/0892-watchdog-renesas_wdt-Add-restart-handler.patch | 65 |
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 + |