Message ID | 20220726085612.10672-1-pali@kernel.org |
---|---|
State | New |
Headers | show |
Series | watchdog: armada_37xx_wdt: Fix .set_timeout callback | expand |
On Tue, 26 Jul 2022 10:56:12 +0200 Pali Rohár <pali@kernel.org> wrote: > ioctl(WDIOC_SETTIMEOUT) calls .set_timeout and .ping callbacks and it is > expected that it changes current watchdog timeout. > > armada_37xx_wdt's .ping callback just reping counter 0 and does not touch > counter 1 used for timeout. So it is needed to set counter 1 to the new > value in .set_timeout callback to ensure ioctl(WDIOC_SETTIMEOUT) > functionality. Fix it. > > Fixes: 54e3d9b518c8 ("watchdog: Add support for Armada 37xx CPU watchdog") > Signed-off-by: Pali Rohár <pali@kernel.org> Reviewed-by: Marek Behún <kabel@kernel.org>
PING? On Tuesday 26 July 2022 10:56:12 Pali Rohár wrote: > ioctl(WDIOC_SETTIMEOUT) calls .set_timeout and .ping callbacks and it is > expected that it changes current watchdog timeout. > > armada_37xx_wdt's .ping callback just reping counter 0 and does not touch > counter 1 used for timeout. So it is needed to set counter 1 to the new > value in .set_timeout callback to ensure ioctl(WDIOC_SETTIMEOUT) > functionality. Fix it. > > Fixes: 54e3d9b518c8 ("watchdog: Add support for Armada 37xx CPU watchdog") > Signed-off-by: Pali Rohár <pali@kernel.org> > --- > drivers/watchdog/armada_37xx_wdt.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/watchdog/armada_37xx_wdt.c b/drivers/watchdog/armada_37xx_wdt.c > index 1635f421ef2c..b84cba94b135 100644 > --- a/drivers/watchdog/armada_37xx_wdt.c > +++ b/drivers/watchdog/armada_37xx_wdt.c > @@ -179,6 +179,8 @@ static int armada_37xx_wdt_set_timeout(struct watchdog_device *wdt, > dev->timeout = (u64)dev->clk_rate * timeout; > do_div(dev->timeout, CNTR_CTRL_PRESCALE_MIN); > > + set_counter_value(dev, CNTR_ID_WDOG, dev->timeout); > + > return 0; > } > > -- > 2.20.1 >
diff --git a/drivers/watchdog/armada_37xx_wdt.c b/drivers/watchdog/armada_37xx_wdt.c index 1635f421ef2c..b84cba94b135 100644 --- a/drivers/watchdog/armada_37xx_wdt.c +++ b/drivers/watchdog/armada_37xx_wdt.c @@ -179,6 +179,8 @@ static int armada_37xx_wdt_set_timeout(struct watchdog_device *wdt, dev->timeout = (u64)dev->clk_rate * timeout; do_div(dev->timeout, CNTR_CTRL_PRESCALE_MIN); + set_counter_value(dev, CNTR_ID_WDOG, dev->timeout); + return 0; }
ioctl(WDIOC_SETTIMEOUT) calls .set_timeout and .ping callbacks and it is expected that it changes current watchdog timeout. armada_37xx_wdt's .ping callback just reping counter 0 and does not touch counter 1 used for timeout. So it is needed to set counter 1 to the new value in .set_timeout callback to ensure ioctl(WDIOC_SETTIMEOUT) functionality. Fix it. Fixes: 54e3d9b518c8 ("watchdog: Add support for Armada 37xx CPU watchdog") Signed-off-by: Pali Rohár <pali@kernel.org> --- drivers/watchdog/armada_37xx_wdt.c | 2 ++ 1 file changed, 2 insertions(+)