watchdog: imx_sc_wdt: continue if the wdog already enabled
authorJacky Bai <ping.bai@nxp.com>
Tue, 10 Oct 2023 07:46:26 +0000 (15:46 +0800)
committerWim Van Sebroeck <wim@linux-watchdog.org>
Sun, 29 Oct 2023 18:45:07 +0000 (19:45 +0100)
if the wdog is already enabled, and try to enabled it again,
we should ignore the error and continue, rather than return
error.

Signed-off-by: Jacky Bai <ping.bai@nxp.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20231010074626.2787383-1-ping.bai@nxp.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
drivers/watchdog/imx_sc_wdt.c

index 8ac021748d160d6d36e7f248e774eb21fd3adba6..e51fe1b78518f42a25b70fb3755fe93c5f5c9e22 100644 (file)
@@ -34,6 +34,7 @@
 
 #define SC_IRQ_WDOG                    1
 #define SC_IRQ_GROUP_WDOG              1
+#define SC_TIMER_ERR_BUSY              10
 
 static bool nowayout = WATCHDOG_NOWAYOUT;
 module_param(nowayout, bool, 0000);
@@ -61,7 +62,9 @@ static int imx_sc_wdt_start(struct watchdog_device *wdog)
 
        arm_smccc_smc(IMX_SIP_TIMER, IMX_SIP_TIMER_START_WDOG,
                      0, 0, 0, 0, 0, 0, &res);
-       if (res.a0)
+
+       /* Ignore if already enabled(SC_TIMER_ERR_BUSY) */
+       if (res.a0 && res.a0 != SC_TIMER_ERR_BUSY)
                return -EACCES;
 
        arm_smccc_smc(IMX_SIP_TIMER, IMX_SIP_TIMER_SET_WDOG_ACT,