watchdog: dw_wdt: stop on reboot

Message ID 20221118150809.102505-1-cosmin.tanislav@analog.com
State New
Headers
Series watchdog: dw_wdt: stop on reboot |

Commit Message

Cosmin Tanislav Nov. 18, 2022, 3:08 p.m. UTC
  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 <cosmin.tanislav@analog.com>
---
 drivers/watchdog/dw_wdt.c | 1 +
 1 file changed, 1 insertion(+)
  

Comments

Guenter Roeck Nov. 18, 2022, 10:08 p.m. UTC | #1
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 <cosmin.tanislav@analog.com>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
>  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
>
  

Patch

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)