On Thu, Mar 01, 2018 at 06:17:21PM +0000, Fabrizio Castro wrote: > On R-Car Gen2 and RZ/G1 the watchdog IP clock needs to be always ON, > on R-Car Gen3 we power the IP down during suspend. > > This commit adds suspend/resume support, so that the watchdog counting > "pauses" during suspend on all of the SoCs compatible with this driver > and on those we are now adding support for (R-Car Gen2 and RZ/G1). > > Signed-off-by: Fabrizio Castro <fabrizio.castro@xxxxxxxxxxxxxx> > Signed-off-by: Ramesh Shanmugasundaram <ramesh.shanmugasundaram@xxxxxxxxxxxxxx> Usually, on resume, we just restart the watchdog, with the expectation in mind that there may be some delay in userspace before it gets to send the next ping. Presumably that is not a concern here, so Reviewed-by: Guenter Roeck <linux@xxxxxxxxxxxx> > --- > v6->v7: > * backup and restore register RWTCNT instead of using rwdt_get_timeleft and > rwdt_set_timeleft > > drivers/watchdog/renesas_wdt.c | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/drivers/watchdog/renesas_wdt.c b/drivers/watchdog/renesas_wdt.c > index 831ef83..024d54e 100644 > --- a/drivers/watchdog/renesas_wdt.c > +++ b/drivers/watchdog/renesas_wdt.c > @@ -49,6 +49,7 @@ struct rwdt_priv { > void __iomem *base; > struct watchdog_device wdev; > unsigned long clk_rate; > + u16 time_left; > u8 cks; > }; > > @@ -203,6 +204,30 @@ static int rwdt_remove(struct platform_device *pdev) > return 0; > } > > +static int __maybe_unused rwdt_suspend(struct device *dev) > +{ > + struct rwdt_priv *priv = dev_get_drvdata(dev); > + > + if (watchdog_active(&priv->wdev)) { > + priv->time_left = readw(priv->base + RWTCNT); > + rwdt_stop(&priv->wdev); > + } > + return 0; > +} > + > +static int __maybe_unused rwdt_resume(struct device *dev) > +{ > + struct rwdt_priv *priv = dev_get_drvdata(dev); > + > + if (watchdog_active(&priv->wdev)) { > + rwdt_start(&priv->wdev); > + rwdt_write(priv, priv->time_left, RWTCNT); > + } > + return 0; > +} > + > +static SIMPLE_DEV_PM_OPS(rwdt_pm_ops, rwdt_suspend, rwdt_resume); > + > /* > * This driver does also fit for R-Car Gen2 (r8a779[0-4]) WDT. However, for SMP > * to work there, one also needs a RESET (RST) driver which does not exist yet > @@ -218,6 +243,7 @@ static struct platform_driver rwdt_driver = { > .driver = { > .name = "renesas_wdt", > .of_match_table = rwdt_ids, > + .pm = &rwdt_pm_ops, > }, > .probe = rwdt_probe, > .remove = rwdt_remove, > -- > 2.7.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html