From a03b09c34da7830f30c950ead0cd3a9566036d72 Mon Sep 17 00:00:00 2001 From: SPRESENSE <41312067+SPRESENSE@users.noreply.github.com> Date: Tue, 4 Jul 2023 09:20:46 +0900 Subject: [PATCH] arch: cxd56xx: Fix bug when watchdog restart Fix a bug that watchdog is expired in less time than the specified time when restarting without clearing interrupt. --- arch/arm/src/cxd56xx/cxd56_wdt.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/arm/src/cxd56xx/cxd56_wdt.c b/arch/arm/src/cxd56xx/cxd56_wdt.c index a9a076ced55..849bc8ac54b 100644 --- a/arch/arm/src/cxd56xx/cxd56_wdt.c +++ b/arch/arm/src/cxd56xx/cxd56_wdt.c @@ -200,7 +200,7 @@ static uint32_t cxd56_getreg(uintptr_t regaddr) /* Show the register value read */ - wdinfo("%08x->%08\n", regaddr, regval); + wdinfo("%08x->%08x\n", regaddr, regval); return regval; } #endif @@ -283,6 +283,7 @@ static int cxd56_start(struct watchdog_lowerhalf_s *lower) wdinfo("Entry\n"); cxd56_putreg(WDOGLOCK_UNLOCK_KEY, CXD56_WDT_WDOGLOCK); + cxd56_putreg(0, CXD56_WDT_WDOGINTCLR); /* reload by write any value */ cxd56_putreg(WDOGCONTROL_RESEN | WDOGCONTROL_INTEN, CXD56_WDT_WDOGCONTROL); cxd56_putreg(0, CXD56_WDT_WDOGLOCK); @@ -473,6 +474,7 @@ static int cxd56_settimeout(struct watchdog_lowerhalf_s *lower, /* Set the WDT register according to calculated value */ cxd56_putreg(WDOGLOCK_UNLOCK_KEY, CXD56_WDT_WDOGLOCK); + cxd56_putreg(0, CXD56_WDT_WDOGINTCLR); /* reload by write any value */ cxd56_putreg(reload, CXD56_WDT_WDOGLOAD); cxd56_putreg(WDOGCONTROL_RESEN | WDOGCONTROL_INTEN, CXD56_WDT_WDOGCONTROL); cxd56_putreg(0, CXD56_WDT_WDOGLOCK);