Message ID | 20191029174037.25381-2-festevam@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [1/5] watchdog: imx7ulp: Fix reboot hang | expand |
On Tue, Oct 29, 2019 at 02:40:34PM -0300, Fabio Estevam wrote: > It is more natural to pass the watchdog instance inside > imx7ulp_wdt_enable() instead of the base address. > > This also has the benefit to reduce the code a bit. > > Signed-off-by: Fabio Estevam <festevam@gmail.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > drivers/watchdog/imx7ulp_wdt.c | 25 +++++++++++-------------- > 1 file changed, 11 insertions(+), 14 deletions(-) > > diff --git a/drivers/watchdog/imx7ulp_wdt.c b/drivers/watchdog/imx7ulp_wdt.c > index ba5d535a6db2..eea415609d44 100644 > --- a/drivers/watchdog/imx7ulp_wdt.c > +++ b/drivers/watchdog/imx7ulp_wdt.c > @@ -47,15 +47,17 @@ struct imx7ulp_wdt_device { > struct clk *clk; > }; > > -static inline void imx7ulp_wdt_enable(void __iomem *base, bool enable) > +static inline void imx7ulp_wdt_enable(struct watchdog_device *wdog, bool enable) > { > - u32 val = readl(base + WDOG_CS); > + struct imx7ulp_wdt_device *wdt = watchdog_get_drvdata(wdog); > + > + u32 val = readl(wdt->base + WDOG_CS); > > - writel(UNLOCK, base + WDOG_CNT); > + writel(UNLOCK, wdt->base + WDOG_CNT); > if (enable) > - writel(val | WDOG_CS_EN, base + WDOG_CS); > + writel(val | WDOG_CS_EN, wdt->base + WDOG_CS); > else > - writel(val & ~WDOG_CS_EN, base + WDOG_CS); > + writel(val & ~WDOG_CS_EN, wdt->base + WDOG_CS); > } > > static inline bool imx7ulp_wdt_is_enabled(void __iomem *base) > @@ -76,18 +78,15 @@ static int imx7ulp_wdt_ping(struct watchdog_device *wdog) > > static int imx7ulp_wdt_start(struct watchdog_device *wdog) > { > - struct imx7ulp_wdt_device *wdt = watchdog_get_drvdata(wdog); > > - imx7ulp_wdt_enable(wdt->base, true); > + imx7ulp_wdt_enable(wdog, true); > > return 0; > } > > static int imx7ulp_wdt_stop(struct watchdog_device *wdog) > { > - struct imx7ulp_wdt_device *wdt = watchdog_get_drvdata(wdog); > - > - imx7ulp_wdt_enable(wdt->base, false); > + imx7ulp_wdt_enable(wdog, false); > > return 0; > } > @@ -109,10 +108,8 @@ static int imx7ulp_wdt_set_timeout(struct watchdog_device *wdog, > static int imx7ulp_wdt_restart(struct watchdog_device *wdog, > unsigned long action, void *data) > { > - struct imx7ulp_wdt_device *wdt = watchdog_get_drvdata(wdog); > - > - imx7ulp_wdt_enable(wdt->base, true); > - imx7ulp_wdt_set_timeout(&wdt->wdd, 1); > + imx7ulp_wdt_enable(wdog, true); > + imx7ulp_wdt_set_timeout(wdog, 1); > > /* wait for wdog to fire */ > while (true)
diff --git a/drivers/watchdog/imx7ulp_wdt.c b/drivers/watchdog/imx7ulp_wdt.c index ba5d535a6db2..eea415609d44 100644 --- a/drivers/watchdog/imx7ulp_wdt.c +++ b/drivers/watchdog/imx7ulp_wdt.c @@ -47,15 +47,17 @@ struct imx7ulp_wdt_device { struct clk *clk; }; -static inline void imx7ulp_wdt_enable(void __iomem *base, bool enable) +static inline void imx7ulp_wdt_enable(struct watchdog_device *wdog, bool enable) { - u32 val = readl(base + WDOG_CS); + struct imx7ulp_wdt_device *wdt = watchdog_get_drvdata(wdog); + + u32 val = readl(wdt->base + WDOG_CS); - writel(UNLOCK, base + WDOG_CNT); + writel(UNLOCK, wdt->base + WDOG_CNT); if (enable) - writel(val | WDOG_CS_EN, base + WDOG_CS); + writel(val | WDOG_CS_EN, wdt->base + WDOG_CS); else - writel(val & ~WDOG_CS_EN, base + WDOG_CS); + writel(val & ~WDOG_CS_EN, wdt->base + WDOG_CS); } static inline bool imx7ulp_wdt_is_enabled(void __iomem *base) @@ -76,18 +78,15 @@ static int imx7ulp_wdt_ping(struct watchdog_device *wdog) static int imx7ulp_wdt_start(struct watchdog_device *wdog) { - struct imx7ulp_wdt_device *wdt = watchdog_get_drvdata(wdog); - imx7ulp_wdt_enable(wdt->base, true); + imx7ulp_wdt_enable(wdog, true); return 0; } static int imx7ulp_wdt_stop(struct watchdog_device *wdog) { - struct imx7ulp_wdt_device *wdt = watchdog_get_drvdata(wdog); - - imx7ulp_wdt_enable(wdt->base, false); + imx7ulp_wdt_enable(wdog, false); return 0; } @@ -109,10 +108,8 @@ static int imx7ulp_wdt_set_timeout(struct watchdog_device *wdog, static int imx7ulp_wdt_restart(struct watchdog_device *wdog, unsigned long action, void *data) { - struct imx7ulp_wdt_device *wdt = watchdog_get_drvdata(wdog); - - imx7ulp_wdt_enable(wdt->base, true); - imx7ulp_wdt_set_timeout(&wdt->wdd, 1); + imx7ulp_wdt_enable(wdog, true); + imx7ulp_wdt_set_timeout(wdog, 1); /* wait for wdog to fire */ while (true)
It is more natural to pass the watchdog instance inside imx7ulp_wdt_enable() instead of the base address. This also has the benefit to reduce the code a bit. Signed-off-by: Fabio Estevam <festevam@gmail.com> --- drivers/watchdog/imx7ulp_wdt.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-)