[PATCH v2] watchdog: rti: drop hack manipulating WDT clock rate

From: Alexander Sverdlin alexander.sverdlin@siemens.com
The hack itself seems to be copied from Linux rti_wdt.c, but the WDT reset principle is different in U-Boot. While Linux relies on correct frequencies and timers and doesn't check the actual WDT counter value U-Boot driver seems to be more robust: it does compare RTIDWDCNTR vs RTIDWDPRLD.
Now the root cause of the original motivation to manipulate the clock rate is said to be understood and fixed in Linux commit cae58516534e ("watchdog: rti_wdt: Set min_hw_heartbeat_ms to accommodate a safety margin") which simultaneously removed the hack itself.
While is fix part of the mentioned patch is neither applicable nor requried for the U-Boot driver just drop the hack setting WDT clock rate to 90% of the real rate. This has a nice effect that the WDT timeout is now as requested and not 10% shorter.
Signed-off-by: Alexander Sverdlin alexander.sverdlin@siemens.com Reviewed-by: Jan Kiszka jan.kiszka@siemens.com --- Changelog: v2: 2 typos pointed by Jan corrected
drivers/watchdog/rti_wdt.c | 8 -------- 1 file changed, 8 deletions(-)
diff --git a/drivers/watchdog/rti_wdt.c b/drivers/watchdog/rti_wdt.c index 99168d0cad03..f806e24e53da 100644 --- a/drivers/watchdog/rti_wdt.c +++ b/drivers/watchdog/rti_wdt.c @@ -186,14 +186,6 @@ static int rti_wdt_probe(struct udevice *dev)
priv->clk_hz = clk_get_rate(&clk);
- /* - * If watchdog is running at 32k clock, it is not accurate. - * Adjust frequency down in this case so that it does not expire - * earlier than expected. - */ - if (priv->clk_hz < 32768) - priv->clk_hz = priv->clk_hz * 9 / 10; - return 0; }

On 21.11.24 09:03, A. Sverdlin wrote:
From: Alexander Sverdlin alexander.sverdlin@siemens.com
The hack itself seems to be copied from Linux rti_wdt.c, but the WDT reset principle is different in U-Boot. While Linux relies on correct frequencies and timers and doesn't check the actual WDT counter value U-Boot driver seems to be more robust: it does compare RTIDWDCNTR vs RTIDWDPRLD.
Now the root cause of the original motivation to manipulate the clock rate is said to be understood and fixed in Linux commit cae58516534e ("watchdog: rti_wdt: Set min_hw_heartbeat_ms to accommodate a safety margin") which simultaneously removed the hack itself.
While is fix part of the mentioned patch is neither applicable nor requried for the U-Boot driver just drop the hack setting WDT clock rate to 90% of the real rate. This has a nice effect that the WDT timeout is now as requested and not 10% shorter.
Signed-off-by: Alexander Sverdlin alexander.sverdlin@siemens.com Reviewed-by: Jan Kiszka jan.kiszka@siemens.com
Changelog: v2: 2 typos pointed by Jan corrected
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan

On 21.11.24 09:03, A. Sverdlin wrote:
From: Alexander Sverdlin alexander.sverdlin@siemens.com
The hack itself seems to be copied from Linux rti_wdt.c, but the WDT reset principle is different in U-Boot. While Linux relies on correct frequencies and timers and doesn't check the actual WDT counter value U-Boot driver seems to be more robust: it does compare RTIDWDCNTR vs RTIDWDPRLD.
Now the root cause of the original motivation to manipulate the clock rate is said to be understood and fixed in Linux commit cae58516534e ("watchdog: rti_wdt: Set min_hw_heartbeat_ms to accommodate a safety margin") which simultaneously removed the hack itself.
While is fix part of the mentioned patch is neither applicable nor requried for the U-Boot driver just drop the hack setting WDT clock rate to 90% of the real rate. This has a nice effect that the WDT timeout is now as requested and not 10% shorter.
Signed-off-by: Alexander Sverdlin alexander.sverdlin@siemens.com Reviewed-by: Jan Kiszka jan.kiszka@siemens.com
Applied to u-boot-watchdog/master
Thanks, Stefan
Changelog: v2: 2 typos pointed by Jan corrected
drivers/watchdog/rti_wdt.c | 8 -------- 1 file changed, 8 deletions(-)
diff --git a/drivers/watchdog/rti_wdt.c b/drivers/watchdog/rti_wdt.c index 99168d0cad03..f806e24e53da 100644 --- a/drivers/watchdog/rti_wdt.c +++ b/drivers/watchdog/rti_wdt.c @@ -186,14 +186,6 @@ static int rti_wdt_probe(struct udevice *dev)
priv->clk_hz = clk_get_rate(&clk);
- /*
* If watchdog is running at 32k clock, it is not accurate.
* Adjust frequency down in this case so that it does not expire
* earlier than expected.
*/
- if (priv->clk_hz < 32768)
priv->clk_hz = priv->clk_hz * 9 / 10;
- return 0; }
Viele Grüße, Stefan Roese
participants (2)
-
A. Sverdlin
-
Stefan Roese