[PATCH 1/5] watchdog: dw_wdt: move reset control deassertion before register access

Artem Shimko posted 5 patches 2 weeks ago
[PATCH 1/5] watchdog: dw_wdt: move reset control deassertion before register access
Posted by Artem Shimko 2 weeks ago
The watchdog controller must be taken out of reset before any register
access is attempted. Currently reset_control_deassert() is called after
dw_wdt_update_mode() which performs register read/write operations. If
the reset line is asserted, accessing registers may result in undefined
behavior or bus hangs.

Move reset_control_deassert() before dw_wdt_update_mode() to ensure the
controller is properly deasserted before the first register access. The
reset_control_assert() in the error path remains to properly revert the
reset state on probe failure.

Fixes: 46a1946314bf ("watchdog: dw_wdt: Add pre-timeouts support")
Signed-off-by: Artem Shimko <a.shimko.dev@gmail.com>
---
 drivers/watchdog/dw_wdt.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c
index c3fbb6068c52..3450402b7707 100644
--- a/drivers/watchdog/dw_wdt.c
+++ b/drivers/watchdog/dw_wdt.c
@@ -592,6 +592,8 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
 	if (IS_ERR(dw_wdt->rst))
 		return PTR_ERR(dw_wdt->rst);
 
+	reset_control_deassert(dw_wdt->rst);
+
 	/* Enable normal reset without pre-timeout by default. */
 	dw_wdt_update_mode(dw_wdt, DW_WDT_RMOD_RESET);
 
@@ -617,8 +619,6 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
 		dw_wdt->wdd.info = &dw_wdt_ident;
 	}
 
-	reset_control_deassert(dw_wdt->rst);
-
 	ret = dw_wdt_init_timeouts(dw_wdt, dev);
 	if (ret)
 		goto out_assert_rst;
-- 
2.43.0