]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
watchdog: imx7ulp_wdt: keep already running watchdog enabled
authorSascha Hauer <s.hauer@pengutronix.de>
Wed, 3 Jul 2024 11:16:03 +0000 (13:16 +0200)
committerWim Van Sebroeck <wim@linux-watchdog.org>
Wed, 10 Jul 2024 18:01:30 +0000 (20:01 +0200)
When the bootloader enabled the watchdog before Kernel started then
keep it enabled during initialization. Otherwise the time between
the watchdog probing and the userspace taking over the watchdog
won't be covered by the watchdog. When keeping the watchdog enabled
inform the Kernel about this by setting the WDOG_HW_RUNNING so that
the periodic watchdog feeder is started when desired.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20240703111603.1096424-1-s.hauer@pengutronix.de
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
drivers/watchdog/imx7ulp_wdt.c

index b21d7a74a42df79f26399d1cf24484ed140abb46..94914a22daff756ca53f480133ef33a8531e7a24 100644 (file)
@@ -290,6 +290,11 @@ static int imx7ulp_wdt_init(struct imx7ulp_wdt_device *wdt, unsigned int timeout
        if (wdt->ext_reset)
                val |= WDOG_CS_INT_EN;
 
+       if (readl(wdt->base + WDOG_CS) & WDOG_CS_EN) {
+               set_bit(WDOG_HW_RUNNING, &wdt->wdd.status);
+               val |= WDOG_CS_EN;
+       }
+
        do {
                ret = _imx7ulp_wdt_init(wdt, timeout, val);
                toval = readl(wdt->base + WDOG_TOVAL);