From bc003cad7f1ee9eb6fd993e82e6f7e6795432ef5 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Thu, 10 Aug 2023 09:53:13 -0600 Subject: [PATCH 1/2] sandbox: watchdog: Avoid an error on startup For some time now running sandbox with -T produces an error: Core: 270 devices, 95 uclasses, devicetree: board WDT: Not starting wdt-gpio-toggle wdt_gpio wdt-gpio-level: Request for wdt gpio failed: -16 WDT: Not starting wdt@0 MMC: mmc2: 2 (SD), mmc1: 1 (SD), mmc0: 0 (SD) Use an unallocated GPIO to avoid this. Signed-off-by: Simon Glass Fixes: 1fc45d6483d ("watchdog: add pulse support to gpio watchdog driver") Reviewed-by: Stefan Roese --- arch/sandbox/dts/test.dts | 2 +- test/dm/wdt.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index e88c267620a..e4303473563 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -975,7 +975,7 @@ }; wdt-gpio-toggle { - gpios = <&gpio_a 7 0>; + gpios = <&gpio_a 8 0>; compatible = "linux,wdt-gpio"; hw_margin_ms = <100>; hw_algo = "toggle"; diff --git a/test/dm/wdt.c b/test/dm/wdt.c index 653d7b1c8b3..2bbebcdbf28 100644 --- a/test/dm/wdt.c +++ b/test/dm/wdt.c @@ -54,7 +54,7 @@ static int dm_test_wdt_gpio_toggle(struct unit_test_state *uts) */ struct udevice *wdt, *gpio; const u64 timeout = 42; - const int offset = 7; + const int offset = 8; int val; ut_assertok(uclass_get_device_by_name(UCLASS_WDT, @@ -115,7 +115,7 @@ static int dm_test_wdt_watchdog_reset(struct unit_test_state *uts) struct udevice *gpio_wdt, *sandbox_wdt; struct udevice *gpio; const u64 timeout = 42; - const int offset = 7; + const int offset = 8; uint reset_count; int val; From 127d03893bd51f855e1a277e31a8258105ace42a Mon Sep 17 00:00:00 2001 From: Jim Liu Date: Wed, 18 Oct 2023 10:09:00 +0800 Subject: [PATCH 2/2] wdt: nuvoton: Fix reset/expire function error Fix npcm845 watchdog halt for reset function and expire function. Reset function is restart wdt. Signed-off-by: Jim Liu Reviewed-by: Stefan Roese --- drivers/watchdog/npcm_wdt.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/watchdog/npcm_wdt.c b/drivers/watchdog/npcm_wdt.c index e56aa0ebe1d..57b61215a2a 100644 --- a/drivers/watchdog/npcm_wdt.c +++ b/drivers/watchdog/npcm_wdt.c @@ -69,15 +69,21 @@ static int npcm_wdt_stop(struct udevice *dev) static int npcm_wdt_reset(struct udevice *dev) { struct npcm_wdt_priv *priv = dev_get_priv(dev); + u32 val; - writel(NPCM_WTR | NPCM_WTRE | NPCM_WTE, priv->regs); + val = readl(priv->regs); + writel(val | NPCM_WTR, priv->regs); return 0; } static int npcm_wdt_expire_now(struct udevice *dev, ulong flags) { - return npcm_wdt_reset(dev); + struct npcm_wdt_priv *priv = dev_get_priv(dev); + + writel(NPCM_WTR | NPCM_WTRE | NPCM_WTE, priv->regs); + + return 0; } static int npcm_wdt_of_to_plat(struct udevice *dev)