On 08.11.24 22:15, A. Sverdlin wrote:
From: Alexander Sverdlin <alexander.sverd...@siemens.com>

If the RTI watchdog has been enabled in SPL, enabling it in U-Boot proper
fails because it can only be enabled once in HW and never stopped. This
however leads to a situation that wdt_cyclic() watchdog trigger is not
being started any longer and the WDT fires at some point.

Allow for WDT re-start by not bailing out if the [previously] configured
period matches the one to be configured.

Enabling in [A53] SPL has been tested on AM62x-based HW (where [A53] SPL is
responsible for loading R5 DM firmware and not this driver).

Signed-off-by: Alexander Sverdlin <alexander.sverd...@siemens.com>

Applied to u-boot-watchdog/master

Thanks,
Stefan

---
  drivers/watchdog/rti_wdt.c | 13 +++++++------
  1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/watchdog/rti_wdt.c b/drivers/watchdog/rti_wdt.c
index 99168d0cad03..320c5ca19e0a 100644
--- a/drivers/watchdog/rti_wdt.c
+++ b/drivers/watchdog/rti_wdt.c
@@ -131,18 +131,19 @@ static int rti_wdt_start(struct udevice *dev, u64 
timeout_ms, ulong flags)
        u32 timer_margin;
        int ret;
- if (readl(priv->regs + RTIDWDCTRL) == WDENABLE_KEY)
+       timer_margin = timeout_ms * priv->clk_hz / 1000;
+       timer_margin >>= WDT_PRELOAD_SHIFT;
+       if (timer_margin > WDT_PRELOAD_MAX)
+               timer_margin = WDT_PRELOAD_MAX;
+
+       if (readl(priv->regs + RTIDWDCTRL) == WDENABLE_KEY &&
+           readl(priv->regs + RTIDWDPRLD) != timer_margin)
                return -EBUSY;
ret = rti_wdt_load_fw(dev);
        if (ret < 0)
                return ret;
- timer_margin = timeout_ms * priv->clk_hz / 1000;
-       timer_margin >>= WDT_PRELOAD_SHIFT;
-       if (timer_margin > WDT_PRELOAD_MAX)
-               timer_margin = WDT_PRELOAD_MAX;
-
        writel(timer_margin, priv->regs + RTIDWDPRLD);
        writel(RTIWWDRX_NMI, priv->regs + RTIWWDRXCTRL);
        writel(RTIWWDSIZE_50P, priv->regs + RTIWWDSIZECTRL);

Viele Grüße,
Stefan Roese

--
DENX Software Engineering GmbH,      Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: s...@denx.de

Reply via email to