2022-11-18 15:25:00

by Cosmin Tanislav

[permalink] [raw]
Subject: [PATCH] watchdog: dw_wdt: stop on reboot

HW running watchdogs are just watchdogs that are enabled before the
Linux driver is probed, usually by the bootloader (eg. U-Boot).

When the system is shutting down, the mechanism for keeping a HW running
watchdog pinged is also stopped, but the watchdog itself is not stopped,
causing a reset, and preventing the system from being shut down.

Opt into stopping watchdogs on reboot.

Signed-off-by: Cosmin Tanislav <[email protected]>
---
drivers/watchdog/dw_wdt.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c
index 52962e8d11a6..462f15bd5ffa 100644
--- a/drivers/watchdog/dw_wdt.c
+++ b/drivers/watchdog/dw_wdt.c
@@ -663,6 +663,7 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, dw_wdt);

watchdog_set_restart_priority(wdd, 128);
+ watchdog_stop_on_reboot(wdd);

ret = watchdog_register_device(wdd);
if (ret)
--
2.38.1



2022-11-18 22:22:33

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] watchdog: dw_wdt: stop on reboot

On Fri, Nov 18, 2022 at 05:08:09PM +0200, Cosmin Tanislav wrote:
> HW running watchdogs are just watchdogs that are enabled before the
> Linux driver is probed, usually by the bootloader (eg. U-Boot).
>
> When the system is shutting down, the mechanism for keeping a HW running
> watchdog pinged is also stopped, but the watchdog itself is not stopped,
> causing a reset, and preventing the system from being shut down.
>
> Opt into stopping watchdogs on reboot.
>
> Signed-off-by: Cosmin Tanislav <[email protected]>

Reviewed-by: Guenter Roeck <[email protected]>

> ---
> drivers/watchdog/dw_wdt.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c
> index 52962e8d11a6..462f15bd5ffa 100644
> --- a/drivers/watchdog/dw_wdt.c
> +++ b/drivers/watchdog/dw_wdt.c
> @@ -663,6 +663,7 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
> platform_set_drvdata(pdev, dw_wdt);
>
> watchdog_set_restart_priority(wdd, 128);
> + watchdog_stop_on_reboot(wdd);
>
> ret = watchdog_register_device(wdd);
> if (ret)
> --
> 2.38.1
>