On Fri, Aug 26, 2022 at 09:19:21PM +0300, Sergei Antonov wrote: > Implement ftwdt010_wdt_restart(). It enables watchdog with timeout = 0 > and disabled IRQ. Since it needs code similar to ftwdt010_wdt_start(), > add a new function ftwdt010_enable() and move common code there. > > Signed-off-by: Sergei Antonov <saproj@xxxxxxxxx> v2 ? Change log ? Guenter > --- > drivers/watchdog/ftwdt010_wdt.c | 23 +++++++++++++++++++---- > 1 file changed, 19 insertions(+), 4 deletions(-) > > diff --git a/drivers/watchdog/ftwdt010_wdt.c b/drivers/watchdog/ftwdt010_wdt.c > index 21dcc7765688..0a5bbfd2823f 100644 > --- a/drivers/watchdog/ftwdt010_wdt.c > +++ b/drivers/watchdog/ftwdt010_wdt.c > @@ -47,21 +47,28 @@ struct ftwdt010_wdt *to_ftwdt010_wdt(struct watchdog_device *wdd) > return container_of(wdd, struct ftwdt010_wdt, wdd); > } > > -static int ftwdt010_wdt_start(struct watchdog_device *wdd) > +static void ftwdt010_enable(struct ftwdt010_wdt *gwdt, > + unsigned int timeout, > + bool need_irq) > { > - struct ftwdt010_wdt *gwdt = to_ftwdt010_wdt(wdd); > u32 enable; > > - writel(wdd->timeout * WDT_CLOCK, gwdt->base + FTWDT010_WDLOAD); > + writel(timeout * WDT_CLOCK, gwdt->base + FTWDT010_WDLOAD); > writel(WDRESTART_MAGIC, gwdt->base + FTWDT010_WDRESTART); > /* set clock before enabling */ > enable = WDCR_CLOCK_5MHZ | WDCR_SYS_RST; > writel(enable, gwdt->base + FTWDT010_WDCR); > - if (gwdt->has_irq) > + if (need_irq) > enable |= WDCR_WDINTR; > enable |= WDCR_ENABLE; > writel(enable, gwdt->base + FTWDT010_WDCR); > +} > > +static int ftwdt010_wdt_start(struct watchdog_device *wdd) > +{ > + struct ftwdt010_wdt *gwdt = to_ftwdt010_wdt(wdd); > + > + ftwdt010_enable(gwdt, wdd->timeout, gwdt->has_irq); > return 0; > } > > @@ -93,6 +100,13 @@ static int ftwdt010_wdt_set_timeout(struct watchdog_device *wdd, > return 0; > } > > +static int ftwdt010_wdt_restart(struct watchdog_device *wdd, > + unsigned long action, void *data) > +{ > + ftwdt010_enable(to_ftwdt010_wdt(wdd), 0, false); > + return 0; > +} > + > static irqreturn_t ftwdt010_wdt_interrupt(int irq, void *data) > { > struct ftwdt010_wdt *gwdt = data; > @@ -107,6 +121,7 @@ static const struct watchdog_ops ftwdt010_wdt_ops = { > .stop = ftwdt010_wdt_stop, > .ping = ftwdt010_wdt_ping, > .set_timeout = ftwdt010_wdt_set_timeout, > + .restart = ftwdt010_wdt_restart, > .owner = THIS_MODULE, > }; > > -- > 2.34.1 >