From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Return-path: From: Fabrizio Castro To: Wim Van Sebroeck , Geert Uytterhoeven , Simon Horman Cc: Guenter Roeck , Wolfram Sang , linux-watchdog@vger.kernel.org, Chris Paterson , Biju Das , Fabrizio Castro , linux-renesas-soc@vger.kernel.org, Ramesh Shanmugasundaram Subject: [PATCH v8 3/3] watchdog: renesas_wdt: Add restart handler Date: Mon, 5 Mar 2018 15:30:26 +0000 Message-Id: <1520263826-1937-4-git-send-email-fabrizio.castro@bp.renesas.com> In-Reply-To: <1520263826-1937-1-git-send-email-fabrizio.castro@bp.renesas.com> References: <1520263826-1937-1-git-send-email-fabrizio.castro@bp.renesas.com> List-ID: 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 Signed-off-by: Ramesh Shanmugasundaram Reviewed-by: Guenter Roeck Reviewed-by: Wolfram Sang --- v7->v8: * no change 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 0dede5b..6b8c6dd 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.7.4