diff mbox series

watchdog: imx7ulp_wdt: keep already running watchdog enabled

Message ID 20240703111603.1096424-1-s.hauer@pengutronix.de (mailing list archive)
State New
Headers show
Series watchdog: imx7ulp_wdt: keep already running watchdog enabled | expand

Commit Message

Sascha Hauer July 3, 2024, 11:16 a.m. UTC
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>
---
 drivers/watchdog/imx7ulp_wdt.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Guenter Roeck July 5, 2024, 5:39 a.m. UTC | #1
On 7/3/24 04:16, Sascha Hauer wrote:
> 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>

> ---
>   drivers/watchdog/imx7ulp_wdt.c | 5 +++++
>   1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/watchdog/imx7ulp_wdt.c b/drivers/watchdog/imx7ulp_wdt.c
> index b21d7a74a42df..94914a22daff7 100644
> --- a/drivers/watchdog/imx7ulp_wdt.c
> +++ b/drivers/watchdog/imx7ulp_wdt.c
> @@ -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);
diff mbox series

Patch

diff --git a/drivers/watchdog/imx7ulp_wdt.c b/drivers/watchdog/imx7ulp_wdt.c
index b21d7a74a42df..94914a22daff7 100644
--- a/drivers/watchdog/imx7ulp_wdt.c
+++ b/drivers/watchdog/imx7ulp_wdt.c
@@ -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);