Thread (4 messages) 4 messages, 3 authors, 2026-02-04

Re: [PATCH] watchdog: imx7ulp_wdt: Keep WDOG running until A55 enters WFI on i.MX94

From: Frank Li <Frank.li@nxp.com>
Date: 2026-02-04 15:48:29
Also in: imx, linux-watchdog, lkml

On Wed, Feb 04, 2026 at 12:35:01AM +0000, Peng Fan wrote:
quoted
Subject: Re: [PATCH] watchdog: imx7ulp_wdt: Keep WDOG running
until A55 enters WFI on i.MX94

On Tue, Feb 03, 2026 at 04:05:47PM +0800, Peng Fan (OSS) wrote:
quoted
From: Ranjani Vaidyanathan <redacted>

On i.MX94, watchdog sources clock from bus clock that will be
always
quoted
on during the lifecycle of Linux. There is a Low Power Clock
Gating(LPCG) between the bus clock and watchdog, but the LPCG is
not
quoted
exported for software to control, it is hardware automatically
controlled. When
Cortex-A55 executes WFI during suspend flow, the LPCG will
automatically gate off the clock stop watchdog.

So watchdog could always be alive to protect Linux, until WFI is
executed.

suppose only after suspend's WFI? suppose CPUIDLE's WFI doesn't
affect it?
Only suspend WFI.
Thank you clarify, sugggest rephrase this to avoid confuse. "WFI" is easily
miss leading for CPUIDLE's WFI.

	"until core halt" ?

Frank
Regards
Peng.
quoted
Frank
quoted
Introduce a new hardware feature flag to indicate CPU low-power-
mode
quoted
auto clock gating support, and use it to avoid stopping the watchdog
during suspend when LPCG can safely keep it running.

Add i.MX94-specific watchdog hardware data and DT compatible
entry to
quoted
enable this behavior.

Signed-off-by: Ranjani Vaidyanathan
[off-list ref]
quoted
[peng.fan@nxp.com: rewrite commit log for clarity]
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/watchdog/imx7ulp_wdt.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/watchdog/imx7ulp_wdt.c
b/drivers/watchdog/imx7ulp_wdt.c index
03479110453ce78a6a89ce8d351ba9ece2f5e2c5..0ae4c0c00138e8985
4f14edca0fd
quoted
5fa84591c2d2 100644
--- a/drivers/watchdog/imx7ulp_wdt.c
+++ b/drivers/watchdog/imx7ulp_wdt.c
@@ -56,6 +56,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog
cannot be stopped once started (default="
quoted
 struct imx_wdt_hw_feature {
 	bool prescaler_enable;
 	bool post_rcs_wait;
+	bool cpu_lpm_auto_cg;
 	u32 wdog_clock_rate;
 };
@@ -360,7 +361,8 @@ static int __maybe_unused
imx7ulp_wdt_suspend_noirq(struct device *dev)  {
 	struct imx7ulp_wdt_device *imx7ulp_wdt =
dev_get_drvdata(dev);
quoted
-	if (watchdog_active(&imx7ulp_wdt->wdd))
+
+	if (watchdog_active(&imx7ulp_wdt->wdd) &&
+!imx7ulp_wdt->hw->cpu_lpm_auto_cg)
 		imx7ulp_wdt_stop(&imx7ulp_wdt->wdd);

 	clk_disable_unprepare(imx7ulp_wdt->clk);
@@ -408,10 +410,17 @@ static const struct imx_wdt_hw_feature
imx93_wdt_hw = {
quoted
 	.wdog_clock_rate = 125,
 };

+static const struct imx_wdt_hw_feature imx94_wdt_hw = {
+	.prescaler_enable = true,
+	.wdog_clock_rate = 125,
+	.cpu_lpm_auto_cg = true,
+};
+
 static const struct of_device_id imx7ulp_wdt_dt_ids[] = {
 	{ .compatible = "fsl,imx7ulp-wdt", .data = &imx7ulp_wdt_hw, },
 	{ .compatible = "fsl,imx8ulp-wdt", .data = &imx8ulp_wdt_hw, },
 	{ .compatible = "fsl,imx93-wdt", .data = &imx93_wdt_hw, },
+	{ .compatible = "fsl,imx94-wdt", .data = &imx94_wdt_hw, },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, imx7ulp_wdt_dt_ids);

---
base-commit: 193579fe01389bc21aff0051d13f24e8ea95b47d
change-id: 20260203-imx94-wdog-1e0aa14d661b

Best regards,
--
Peng Fan [off-list ref]
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help