When the 'early_enable' module_param is enabled, Linux's watchdogd thread does not start, causing the watchdog to eventually fire. For the watchdogd to be started, the WDOG_HW_RUNNING flag must be set before watchdog_register_device(). Signed-off-by: Brandon Maier <brandon.maier@xxxxxxxxxxxxxxxxxxx> --- drivers/watchdog/omap_wdt.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c index 9b91882fe3c4..ecc8592c00a5 100644 --- a/drivers/watchdog/omap_wdt.c +++ b/drivers/watchdog/omap_wdt.c @@ -268,8 +268,13 @@ static int omap_wdt_probe(struct platform_device *pdev) wdev->wdog.bootstatus = WDIOF_CARDRESET; } - if (!early_enable) + if (!early_enable) { omap_wdt_disable(wdev); + clear_bit(WDOG_HW_RUNNING, &wdev->wdog.status); + } else { + omap_wdt_start(&wdev->wdog); + set_bit(WDOG_HW_RUNNING, &wdev->wdog.status); + } ret = watchdog_register_device(&wdev->wdog); if (ret) { @@ -281,9 +286,6 @@ static int omap_wdt_probe(struct platform_device *pdev) readl_relaxed(wdev->base + OMAP_WATCHDOG_REV) & 0xFF, wdev->wdog.timeout); - if (early_enable) - omap_wdt_start(&wdev->wdog); - pm_runtime_put(wdev->dev); return 0; -- 2.23.0