All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure
@ 2022-09-17  8:14 Stefan Roese
  2022-09-17  8:14 ` [PATCH v2 1/6] watchdog: Integrate watchdog triggering into the cyclic framework Stefan Roese
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Stefan Roese @ 2022-09-17  8:14 UTC (permalink / raw)
  To: u-boot; +Cc: trini, sjg, rasmus.villemoes

This patchset migrates the watchdog triggering (WATCHDOG_RESET calls)
to the newly introduced cyclic execution framework. For this, the
watchdog driver now registers a cyclic execution function for each
WDT device that needs to get serviced. Additionally the cyclic IF is
a bit extended to also support the CONFIG_HW_WATCHDOG users. It might
make sense to deprecate this HW_WATCHDOG usage at some point.

Please note that this migration work is based on the cyclic execution
infrastructure, which I posted in the last few weeks. So these cyclic
patches need to be applied for this migration to work.

Some further cleanup and improvements are possible after this patch.
E.g. Heinrich mentioned that the WATCHDOG_RESET call locations need to
get improved / changed in some places.

Thanks,
Stefan

Stefan Roese (6):
  watchdog: Integrate watchdog triggering into the cyclic framework
  cyclic: Introduce schedule() function
  cyclic: Use schedule() instead of WATCHDOG_RESET()
  watchdog: Get rid of ASSEMBLY hacks
  watchdog: Remove WATCHDOG_RESET macro
  watchdog: Further cleanup

 arch/arm/mach-at91/phy.c                      |  2 +-
 arch/arm/mach-imx/i2c-mxv7.c                  |  2 +-
 arch/arm/mach-socfpga/spl_a10.c               |  8 +-
 .../cmd_stm32prog/stm32prog_serial.c          |  6 +-
 arch/m68k/lib/time.c                          |  2 +-
 arch/powerpc/cpu/mpc8xx/cpu_init.c            |  2 +-
 arch/powerpc/lib/bootm.c                      |  6 +-
 arch/powerpc/lib/cache.c                      |  2 +-
 arch/powerpc/lib/interrupts.c                 |  2 +-
 arch/powerpc/lib/ticks.S                      |  5 +-
 board/astro/mcf5373l/fpga.c                   |  4 +-
 board/dhelectronics/dh_stm32mp1/board.c       |  2 +-
 board/liebherr/display5/spl.c                 |  2 +-
 board/nokia/rx51/rx51.c                       |  2 +-
 board/st/stm32mp1/stm32mp1.c                  |  2 +-
 boot/bootretry.c                              |  2 +-
 boot/image-board.c                            |  2 +-
 cmd/fastboot.c                                |  2 +-
 cmd/mem.c                                     | 16 ++--
 cmd/usb_mass_storage.c                        |  2 +-
 cmd/ximg.c                                    |  2 +-
 common/board_f.c                              |  4 +-
 common/board_r.c                              |  2 +-
 common/cli_readline.c                         |  4 +-
 common/console.c                              |  2 +-
 common/cyclic.c                               | 16 ++++
 common/dfu.c                                  |  2 +-
 common/lcd.c                                  | 10 +--
 common/menu.c                                 |  6 +-
 common/usb_kbd.c                              |  2 +-
 common/xyzModem.c                             |  2 +-
 drivers/block/ide.c                           |  8 +-
 drivers/crypto/aspeed/aspeed_hace.c           |  2 +-
 drivers/crypto/hash/hash_sw.c                 |  2 +-
 drivers/ddr/altera/sdram_arria10.c            |  4 +-
 drivers/ddr/altera/sdram_n5x.c                |  4 +-
 drivers/ddr/altera/sdram_soc64.c              |  2 +-
 drivers/fpga/intel_sdm_mb.c                   |  8 +-
 drivers/fpga/socfpga_arria10.c                |  8 +-
 drivers/i2c/mxc_i2c.c                         |  4 +-
 drivers/mmc/octeontx_hsmmc.c                  | 12 +--
 drivers/mmc/sh_mmcif.c                        |  6 +-
 drivers/mmc/stm32_sdmmc2.c                    |  2 +-
 drivers/mtd/cfi_flash.c                       |  4 +-
 drivers/mtd/nand/core.c                       |  2 +-
 drivers/mtd/nand/raw/atmel_nand.c             |  6 +-
 drivers/mtd/nand/raw/nand_base.c              | 10 +--
 drivers/mtd/nand/raw/nand_util.c              |  6 +-
 drivers/mtd/nand/spi/core.c                   |  4 +-
 drivers/mtd/onenand/onenand_base.c            |  4 +-
 drivers/mtd/spi/spi-nor-core.c                |  4 +-
 drivers/net/octeontx2/nix.c                   |  2 +-
 drivers/net/octeontx2/nix_af.c                | 32 ++++----
 drivers/ram/stm32mp1/stm32mp1_tests.c         |  2 +-
 drivers/serial/atmel_usart.c                  |  2 +-
 drivers/serial/ns16550.c                      |  6 +-
 drivers/serial/serial-uclass.c                |  2 +-
 drivers/serial/serial_bcm283x_mu.c            |  2 +-
 drivers/serial/serial_lpuart.c                |  8 +-
 drivers/serial/serial_mpc8xx.c                |  4 +-
 drivers/serial/serial_mt7620.c                |  2 +-
 drivers/serial/serial_mtk.c                   |  4 +-
 drivers/serial/serial_mxc.c                   |  6 +-
 drivers/serial/serial_octeon_bootcmd.c        |  2 +-
 drivers/serial/serial_octeon_pcie_console.c   |  4 +-
 drivers/serial/serial_pl01x.c                 |  8 +-
 drivers/serial/serial_sifive.c                |  2 +-
 drivers/serial/serial_zynq.c                  |  2 +-
 drivers/spi/mtk_snfi_spi.c                    |  2 +-
 drivers/spi/octeon_spi.c                      |  2 +-
 drivers/spi/stm32_qspi.c                      |  2 +-
 drivers/timer/mpc83xx_timer.c                 |  4 +-
 drivers/usb/eth/lan7x.h                       |  4 +-
 drivers/usb/gadget/f_acm.c                    |  4 +-
 drivers/usb/gadget/f_sdp.c                    |  4 +-
 drivers/usb/host/ehci-hcd.c                   |  2 +-
 drivers/usb/musb-new/musb_uboot.c             |  2 +-
 drivers/video/video_bmp.c                     |  4 +-
 drivers/watchdog/Kconfig                      |  2 +
 drivers/watchdog/wdt-uclass.c                 | 73 +++++++++++--------
 env/common.c                                  |  2 +-
 fs/cramfs/uncompress.c                        |  3 +-
 fs/jffs2/jffs2_1pass.c                        |  2 +-
 include/cyclic.h                              | 12 +++
 include/linux/compat.h                        |  2 +-
 include/wait_bit.h                            |  2 +-
 include/watchdog.h                            | 68 +----------------
 lib/bzip2/bzlib.c                             |  2 +-
 lib/bzip2/bzlib_decompress.c                  |  8 +-
 lib/crc32.c                                   |  2 +-
 lib/efi_loader/efi_boottime.c                 |  4 +-
 lib/gunzip.c                                  |  2 +-
 lib/lzma/LzmaDec.c                            | 16 ++--
 lib/lzma/LzmaTools.c                          |  2 +-
 lib/md5.c                                     |  2 +-
 lib/sha1.c                                    |  2 +-
 lib/sha256.c                                  |  2 +-
 lib/sha512.c                                  |  4 +-
 lib/time.c                                    |  2 +-
 lib/zlib/inflate.c                            |  8 +-
 net/net.c                                     |  2 +-
 post/cpu/mpc83xx/ecc.c                        |  2 +-
 post/drivers/memory.c                         | 36 ++++-----
 post/lib_powerpc/cpu.c                        | 16 ++--
 post/lib_powerpc/fpu/fpu.c                    |  4 +-
 post/post.c                                   |  4 +-
 test/common/cyclic.c                          |  2 +-
 test/dm/wdt.c                                 |  9 ++-
 108 files changed, 311 insertions(+), 333 deletions(-)

-- 
2.37.3


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2 1/6] watchdog: Integrate watchdog triggering into the cyclic framework
  2022-09-17  8:14 [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Stefan Roese
@ 2022-09-17  8:14 ` Stefan Roese
  2022-09-17  8:14 ` [PATCH v2 2/6] cyclic: Introduce schedule() function Stefan Roese
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Stefan Roese @ 2022-09-17  8:14 UTC (permalink / raw)
  To: u-boot; +Cc: trini, sjg, rasmus.villemoes

This patch integrates the watchdog triggering into the recently added
cyclic infrastructure. Each watchdog device that shall be triggered
registers it's own cyclic function. This way, multiple watchdog devices
are still supported, each via a cyclic function with separate trigger
intervals.

Signed-off-by: Stefan Roese <sr@denx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v2:
- Added Simon's RB tag

v1:
- Reword WDT logging at startup as suggested by Rasmus
- Fail upon !priv->cyclic initr_watchdog()
- Remove some superflous checks in wdt_cyclic()

 drivers/watchdog/Kconfig      |  2 +
 drivers/watchdog/wdt-uclass.c | 73 ++++++++++++++++++++---------------
 2 files changed, 43 insertions(+), 32 deletions(-)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 50e6a1efba51..e55deaf906b5 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -3,6 +3,7 @@ menu "Watchdog Timer Support"
 config WATCHDOG
 	bool "Enable U-Boot watchdog reset"
 	depends on !HW_WATCHDOG
+	select CYCLIC
 	help
 	  This option enables U-Boot watchdog support where U-Boot is using
 	  watchdog_reset function to service watchdog device in U-Boot. Enable
@@ -74,6 +75,7 @@ config WDT
 	bool "Enable driver model for watchdog timer drivers"
 	depends on DM
 	imply WATCHDOG
+	select CYCLIC
 	help
 	  Enable driver model for watchdog timer. At the moment the API
 	  is very simple and only supports four operations:
diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c
index dbf556467d3c..3f342cd99fdd 100644
--- a/drivers/watchdog/wdt-uclass.c
+++ b/drivers/watchdog/wdt-uclass.c
@@ -6,6 +6,7 @@
 #define LOG_CATEGORY UCLASS_WDT
 
 #include <common.h>
+#include <cyclic.h>
 #include <dm.h>
 #include <errno.h>
 #include <hang.h>
@@ -38,8 +39,25 @@ struct wdt_priv {
 	bool running;
 	/* No autostart */
 	bool noautostart;
+
+	struct cyclic_info *cyclic;
 };
 
+static void wdt_cyclic(void *ctx)
+{
+	struct udevice *dev = ctx;
+	struct wdt_priv *priv;
+
+	if (!device_active(dev))
+		return;
+
+	priv = dev_get_uclass_priv(dev);
+	if (!priv->running)
+		return;
+
+	wdt_reset(dev);
+}
+
 static void init_watchdog_dev(struct udevice *dev)
 {
 	struct wdt_priv *priv;
@@ -64,9 +82,6 @@ static void init_watchdog_dev(struct udevice *dev)
 		printf("WDT:   Failed to start %s\n", dev->name);
 		return;
 	}
-
-	printf("WDT:   Started %s with%s servicing (%ds timeout)\n", dev->name,
-	       IS_ENABLED(CONFIG_WATCHDOG) ? "" : "out", priv->timeout);
 }
 
 int initr_watchdog(void)
@@ -105,8 +120,29 @@ int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags)
 	ret = ops->start(dev, timeout_ms, flags);
 	if (ret == 0) {
 		struct wdt_priv *priv = dev_get_uclass_priv(dev);
+		char str[16];
 
 		priv->running = true;
+
+		memset(str, 0, 16);
+		if (IS_ENABLED(CONFIG_WATCHDOG)) {
+			/* Register the watchdog driver as a cyclic function */
+			priv->cyclic = cyclic_register(wdt_cyclic,
+						       priv->reset_period * 1000,
+						       dev->name, dev);
+			if (!priv->cyclic) {
+				printf("cyclic_register for %s failed\n",
+				       dev->name);
+				return -ENODEV;
+			} else {
+				snprintf(str, 16, "every %ldms",
+					 priv->reset_period);
+			}
+		}
+
+		printf("WDT:   Started %s with%s servicing %s (%ds timeout)\n",
+		       dev->name, IS_ENABLED(CONFIG_WATCHDOG) ? "" : "out",
+		       str, priv->timeout);
 	}
 
 	return ret;
@@ -194,37 +230,10 @@ int wdt_expire_now(struct udevice *dev, ulong flags)
  */
 void watchdog_reset(void)
 {
-	struct wdt_priv *priv;
-	struct udevice *dev;
-	struct uclass *uc;
-	ulong now;
-
-	/* Exit if GD is not ready or watchdog is not initialized yet */
-	if (!gd || !(gd->flags & GD_FLG_WDT_READY))
-		return;
-
-	if (uclass_get(UCLASS_WDT, &uc))
-		return;
-
 	/*
-	 * All devices bound to the wdt uclass should have been probed
-	 * in initr_watchdog(). But just in case something went wrong,
-	 * check device_active() before accessing the uclass private
-	 * data.
+	 * Empty function for now. The actual WDT handling is now done in
+	 * the cyclic function instead.
 	 */
-	uclass_foreach_dev(dev, uc) {
-		if (!device_active(dev))
-			continue;
-		priv = dev_get_uclass_priv(dev);
-		if (!priv->running)
-			continue;
-		/* Do not reset the watchdog too often */
-		now = get_timer(0);
-		if (time_after_eq(now, priv->next_reset)) {
-			priv->next_reset = now + priv->reset_period;
-			wdt_reset(dev);
-		}
-	}
 }
 #endif
 
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 2/6] cyclic: Introduce schedule() function
  2022-09-17  8:14 [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Stefan Roese
  2022-09-17  8:14 ` [PATCH v2 1/6] watchdog: Integrate watchdog triggering into the cyclic framework Stefan Roese
@ 2022-09-17  8:14 ` Stefan Roese
  2022-09-17  8:14 ` [PATCH v2 3/6] cyclic: Use schedule() instead of WATCHDOG_RESET() Stefan Roese
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Stefan Roese @ 2022-09-17  8:14 UTC (permalink / raw)
  To: u-boot; +Cc: trini, sjg, rasmus.villemoes

This patch introduces a schedule() function, which shall be used instead
of the old WATCHDOG_RESET. Follow-up patches will make sure, that this
new function is used.

Signed-off-by: Stefan Roese <sr@denx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v2:
- Add some checks in schedule(), that the cyclic IF is ready before
  calling into it. This fixes booting on some AM335x platforms.

v1:
- Add Simon's RB tag
- Add more comments in the header to fully document the prototypes

 common/cyclic.c  | 16 ++++++++++++++++
 include/cyclic.h | 12 ++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/common/cyclic.c b/common/cyclic.c
index cd5dcb1f2b94..b3c180bd1a62 100644
--- a/common/cyclic.c
+++ b/common/cyclic.c
@@ -18,6 +18,8 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+void hw_watchdog_reset(void);
+
 struct list_head *cyclic_get_list(void)
 {
 	return &gd->cyclic->cyclic_list;
@@ -96,6 +98,20 @@ void cyclic_run(void)
 	gd->cyclic->cyclic_running = false;
 }
 
+void schedule(void)
+{
+	/* The HW watchdog is not integrated into the cyclic IF (yet) */
+	if (IS_ENABLED(CONFIG_HW_WATCHDOG))
+		hw_watchdog_reset();
+
+	/*
+	 * schedule() might get called very early before the cyclic IF is
+	 * ready. Make sure to only call cyclic_run() when it's initalized.
+	 */
+	if (gd && gd->cyclic && gd->cyclic->cyclic_ready)
+		cyclic_run();
+}
+
 int cyclic_uninit(void)
 {
 	struct cyclic_info *cyclic, *tmp;
diff --git a/include/cyclic.h b/include/cyclic.h
index 23902234cc87..760163643345 100644
--- a/include/cyclic.h
+++ b/include/cyclic.h
@@ -106,6 +106,14 @@ struct list_head *cyclic_get_list(void);
  * needs to be executed, then call into these registered functions.
  */
 void cyclic_run(void);
+
+/**
+ * schedule() - Schedule all potentially waiting tasks
+ *
+ * Basically a wrapper for cyclic_run(), pontentially enhanced by some
+ * other parts, that need to get handled periodically.
+ */
+void schedule(void);
 #else
 static inline struct cyclic_info *cyclic_register(cyclic_func_t func,
 						  uint64_t delay_us,
@@ -124,6 +132,10 @@ static inline void cyclic_run(void)
 {
 }
 
+static inline void schedule(void)
+{
+}
+
 static inline int cyclic_init(void)
 {
 	return 0;
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 3/6] cyclic: Use schedule() instead of WATCHDOG_RESET()
  2022-09-17  8:14 [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Stefan Roese
  2022-09-17  8:14 ` [PATCH v2 1/6] watchdog: Integrate watchdog triggering into the cyclic framework Stefan Roese
  2022-09-17  8:14 ` [PATCH v2 2/6] cyclic: Introduce schedule() function Stefan Roese
@ 2022-09-17  8:14 ` Stefan Roese
  2022-09-17  8:14 ` [PATCH v2 4/6] watchdog: Get rid of ASSEMBLY hacks Stefan Roese
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Stefan Roese @ 2022-09-17  8:14 UTC (permalink / raw)
  To: u-boot; +Cc: trini, sjg, rasmus.villemoes

Globally replace all occurances of WATCHDOG_RESET() with schedule(),
which handles the HW_WATCHDOG functionality and the cyclic
infrastructure.

Signed-off-by: Stefan Roese <sr@denx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v1:
- Add Simon's RB tag

 arch/arm/mach-at91/phy.c                      |  2 +-
 arch/arm/mach-imx/i2c-mxv7.c                  |  2 +-
 arch/arm/mach-socfpga/spl_a10.c               |  8 ++---
 .../cmd_stm32prog/stm32prog_serial.c          |  6 ++--
 arch/m68k/lib/time.c                          |  2 +-
 arch/powerpc/cpu/mpc8xx/cpu_init.c            |  2 +-
 arch/powerpc/lib/bootm.c                      |  6 ++--
 arch/powerpc/lib/cache.c                      |  2 +-
 arch/powerpc/lib/interrupts.c                 |  2 +-
 board/astro/mcf5373l/fpga.c                   |  4 +--
 board/dhelectronics/dh_stm32mp1/board.c       |  2 +-
 board/liebherr/display5/spl.c                 |  2 +-
 board/nokia/rx51/rx51.c                       |  2 +-
 board/st/stm32mp1/stm32mp1.c                  |  2 +-
 boot/bootretry.c                              |  2 +-
 boot/image-board.c                            |  2 +-
 cmd/fastboot.c                                |  2 +-
 cmd/mem.c                                     | 16 ++++-----
 cmd/usb_mass_storage.c                        |  2 +-
 cmd/ximg.c                                    |  2 +-
 common/board_f.c                              |  4 +--
 common/board_r.c                              |  2 +-
 common/cli_readline.c                         |  4 +--
 common/console.c                              |  2 +-
 common/dfu.c                                  |  2 +-
 common/lcd.c                                  | 10 +++---
 common/menu.c                                 |  6 ++--
 common/usb_kbd.c                              |  2 +-
 common/xyzModem.c                             |  2 +-
 drivers/block/ide.c                           |  8 ++---
 drivers/crypto/aspeed/aspeed_hace.c           |  2 +-
 drivers/crypto/hash/hash_sw.c                 |  2 +-
 drivers/ddr/altera/sdram_arria10.c            |  4 +--
 drivers/ddr/altera/sdram_n5x.c                |  4 +--
 drivers/ddr/altera/sdram_soc64.c              |  2 +-
 drivers/fpga/intel_sdm_mb.c                   |  8 ++---
 drivers/fpga/socfpga_arria10.c                |  8 ++---
 drivers/i2c/mxc_i2c.c                         |  4 +--
 drivers/mmc/octeontx_hsmmc.c                  | 12 +++----
 drivers/mmc/sh_mmcif.c                        |  6 ++--
 drivers/mmc/stm32_sdmmc2.c                    |  2 +-
 drivers/mtd/cfi_flash.c                       |  4 +--
 drivers/mtd/nand/core.c                       |  2 +-
 drivers/mtd/nand/raw/atmel_nand.c             |  6 ++--
 drivers/mtd/nand/raw/nand_base.c              | 10 +++---
 drivers/mtd/nand/raw/nand_util.c              |  6 ++--
 drivers/mtd/nand/spi/core.c                   |  4 +--
 drivers/mtd/onenand/onenand_base.c            |  4 +--
 drivers/mtd/spi/spi-nor-core.c                |  4 +--
 drivers/net/octeontx2/nix.c                   |  2 +-
 drivers/net/octeontx2/nix_af.c                | 32 ++++++++---------
 drivers/ram/stm32mp1/stm32mp1_tests.c         |  2 +-
 drivers/serial/atmel_usart.c                  |  2 +-
 drivers/serial/ns16550.c                      |  6 ++--
 drivers/serial/serial-uclass.c                |  2 +-
 drivers/serial/serial_bcm283x_mu.c            |  2 +-
 drivers/serial/serial_lpuart.c                |  8 ++---
 drivers/serial/serial_mpc8xx.c                |  4 +--
 drivers/serial/serial_mt7620.c                |  2 +-
 drivers/serial/serial_mtk.c                   |  4 +--
 drivers/serial/serial_mxc.c                   |  6 ++--
 drivers/serial/serial_octeon_bootcmd.c        |  2 +-
 drivers/serial/serial_octeon_pcie_console.c   |  4 +--
 drivers/serial/serial_pl01x.c                 |  8 ++---
 drivers/serial/serial_sifive.c                |  2 +-
 drivers/serial/serial_zynq.c                  |  2 +-
 drivers/spi/mtk_snfi_spi.c                    |  2 +-
 drivers/spi/octeon_spi.c                      |  2 +-
 drivers/spi/stm32_qspi.c                      |  2 +-
 drivers/timer/mpc83xx_timer.c                 |  4 +--
 drivers/usb/eth/lan7x.h                       |  4 +--
 drivers/usb/gadget/f_acm.c                    |  4 +--
 drivers/usb/gadget/f_sdp.c                    |  4 +--
 drivers/usb/host/ehci-hcd.c                   |  2 +-
 drivers/usb/musb-new/musb_uboot.c             |  2 +-
 drivers/video/video_bmp.c                     |  4 +--
 env/common.c                                  |  2 +-
 fs/cramfs/uncompress.c                        |  3 +-
 fs/jffs2/jffs2_1pass.c                        |  2 +-
 include/linux/compat.h                        |  2 +-
 include/wait_bit.h                            |  2 +-
 include/watchdog.h                            |  8 -----
 lib/bzip2/bzlib.c                             |  2 +-
 lib/bzip2/bzlib_decompress.c                  |  8 ++---
 lib/crc32.c                                   |  2 +-
 lib/efi_loader/efi_boottime.c                 |  4 +--
 lib/gunzip.c                                  |  2 +-
 lib/lzma/LzmaDec.c                            | 16 ++++-----
 lib/lzma/LzmaTools.c                          |  2 +-
 lib/md5.c                                     |  2 +-
 lib/sha1.c                                    |  2 +-
 lib/sha256.c                                  |  2 +-
 lib/sha512.c                                  |  4 +--
 lib/time.c                                    |  2 +-
 lib/zlib/inflate.c                            |  8 ++---
 net/net.c                                     |  2 +-
 post/cpu/mpc83xx/ecc.c                        |  2 +-
 post/drivers/memory.c                         | 36 +++++++++----------
 post/lib_powerpc/cpu.c                        | 16 ++++-----
 post/lib_powerpc/fpu/fpu.c                    |  4 +--
 post/post.c                                   |  4 +--
 test/common/cyclic.c                          |  2 +-
 test/dm/wdt.c                                 |  9 ++---
 103 files changed, 235 insertions(+), 241 deletions(-)

diff --git a/arch/arm/mach-at91/phy.c b/arch/arm/mach-at91/phy.c
index 6101eee3589c..f4484a77c7de 100644
--- a/arch/arm/mach-at91/phy.c
+++ b/arch/arm/mach-at91/phy.c
@@ -42,7 +42,7 @@ void at91_phy_reset(void)
 	/* Wait for end of hardware reset */
 	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) {
 		/* avoid shutdown by watchdog */
-		WATCHDOG_RESET();
+		schedule();
 		mdelay(10);
 
 		/* timeout for not getting stuck in an endless loop */
diff --git a/arch/arm/mach-imx/i2c-mxv7.c b/arch/arm/mach-imx/i2c-mxv7.c
index d36347d8e824..85d648b56ed4 100644
--- a/arch/arm/mach-imx/i2c-mxv7.c
+++ b/arch/arm/mach-imx/i2c-mxv7.c
@@ -46,7 +46,7 @@ int force_idle_bus(void *priv)
 		scl = gpio_get_value(p->scl.gp);
 		if ((sda & scl) == 1)
 			break;
-		WATCHDOG_RESET();
+		schedule();
 		elapsed = get_timer(start_time);
 		if (elapsed > (CONFIG_SYS_HZ / 5)) {	/* .2 seconds */
 			ret = -EBUSY;
diff --git a/arch/arm/mach-socfpga/spl_a10.c b/arch/arm/mach-socfpga/spl_a10.c
index ec67a5b0eb79..2c567edd502e 100644
--- a/arch/arm/mach-socfpga/spl_a10.c
+++ b/arch/arm/mach-socfpga/spl_a10.c
@@ -117,7 +117,7 @@ void spl_board_init(void)
 
 	/* enable console uart printing */
 	preloader_console_init();
-	WATCHDOG_RESET();
+	schedule();
 
 	arch_early_init_r();
 
@@ -203,7 +203,7 @@ void spl_board_init(void)
 			 */
 			set_regular_boot(true);
 
-			WATCHDOG_RESET();
+			schedule();
 
 			reset_cpu();
 		}
@@ -268,11 +268,11 @@ void board_init_f(ulong dummy)
 
 	/* reconfigure and enable the watchdog */
 	hw_watchdog_init();
-	WATCHDOG_RESET();
+	schedule();
 #endif /* CONFIG_HW_WATCHDOG */
 
 	config_dedicated_pins(gd->fdt_blob);
-	WATCHDOG_RESET();
+	schedule();
 }
 
 /* board specific function prior loading SSBL / U-Boot proper */
diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
index 2932eae7578d..1a69bc38979d 100644
--- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
+++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
@@ -247,7 +247,7 @@ static int stm32prog_serial_getc_err(void)
 		err = ops->getc(down_serial_dev);
 		if (err == -EAGAIN) {
 			ctrlc();
-			WATCHDOG_RESET();
+			schedule();
 		}
 	} while ((err == -EAGAIN) && (!had_ctrlc()));
 
@@ -276,7 +276,7 @@ static bool stm32prog_serial_get_buffer(u8 *buffer, u32 *count)
 			*count -= 1;
 		} else if (err == -EAGAIN) {
 			ctrlc();
-			WATCHDOG_RESET();
+			schedule();
 			if (get_timer(start) > TIMEOUT_SERIAL_BUFFER) {
 				err = -ETIMEDOUT;
 				break;
@@ -852,7 +852,7 @@ bool stm32prog_serial_loop(struct stm32prog_data *data)
 			stm32prog_serial_result(ACK_BYTE);
 			cmd_func[counter](data);
 		}
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	/* clean device */
diff --git a/arch/m68k/lib/time.c b/arch/m68k/lib/time.c
index ebb2ac54db56..cd7437b3e22e 100644
--- a/arch/m68k/lib/time.c
+++ b/arch/m68k/lib/time.c
@@ -72,7 +72,7 @@ void dtimer_interrupt(void *not_used)
 
 		#if defined(CONFIG_WATCHDOG) || defined (CONFIG_HW_WATCHDOG)
 		if (CONFIG_SYS_WATCHDOG_FREQ && (timestamp % (CONFIG_SYS_WATCHDOG_FREQ)) == 0) {
-			WATCHDOG_RESET ();
+			schedule();
 		}
 		#endif    /* CONFIG_WATCHDOG || CONFIG_HW_WATCHDOG */
 		return;
diff --git a/arch/powerpc/cpu/mpc8xx/cpu_init.c b/arch/powerpc/cpu/mpc8xx/cpu_init.c
index c8d06b0508d7..86b08a61749b 100644
--- a/arch/powerpc/cpu/mpc8xx/cpu_init.c
+++ b/arch/powerpc/cpu/mpc8xx/cpu_init.c
@@ -31,7 +31,7 @@ void cpu_init_f(immap_t __iomem *immr)
 	out_be32(&immr->im_siu_conf.sc_sypcr, CONFIG_SYS_SYPCR & ~SYPCR_SWE);
 #endif
 
-	WATCHDOG_RESET();
+	schedule();
 
 	/* SIUMCR - contains debug pin configuration (11-6) */
 	setbits_be32(&immr->im_siu_conf.sc_siumcr, CONFIG_SYS_SIUMCR);
diff --git a/arch/powerpc/lib/bootm.c b/arch/powerpc/lib/bootm.c
index e52aa75703f3..b92df9543ebf 100644
--- a/arch/powerpc/lib/bootm.c
+++ b/arch/powerpc/lib/bootm.c
@@ -84,7 +84,7 @@ static void boot_jump_linux(bootm_headers_t *images)
 		 *   r9: 0
 		 */
 		debug("   Booting using OF flat tree...\n");
-		WATCHDOG_RESET ();
+		schedule();
 		(*kernel) ((struct bd_info *)of_flat_tree, 0, 0, EPAPR_MAGIC,
 			   env_get_bootm_mapsize(), 0, 0);
 		/* does not return */
@@ -108,7 +108,7 @@ static void boot_jump_linux(bootm_headers_t *images)
 		struct bd_info *kbd = images->kbd;
 
 		debug("   Booting using board info...\n");
-		WATCHDOG_RESET ();
+		schedule();
 		(*kernel) (kbd, initrd_start, initrd_end,
 			   cmd_start, cmd_end, 0, 0);
 		/* does not return */
@@ -319,7 +319,7 @@ void boot_jump_vxworks(bootm_headers_t *images)
 	 *	r9: 0
 	 *	TCR: WRC = 0, no watchdog timer reset will occur
 	 */
-	WATCHDOG_RESET();
+	schedule();
 
 	((void (*)(void *, ulong, ulong, ulong,
 		ulong, ulong, ulong))images->ep)(images->ft_addr,
diff --git a/arch/powerpc/lib/cache.c b/arch/powerpc/lib/cache.c
index 19162511ceaf..c4c5c2d45138 100644
--- a/arch/powerpc/lib/cache.c
+++ b/arch/powerpc/lib/cache.c
@@ -13,7 +13,7 @@ static ulong maybe_watchdog_reset(ulong flushed)
 {
 	flushed += CONFIG_SYS_CACHELINE_SIZE;
 	if (flushed >= CONFIG_CACHE_FLUSH_WATCHDOG_THRESHOLD) {
-		WATCHDOG_RESET();
+		schedule();
 		flushed = 0;
 	}
 	return flushed;
diff --git a/arch/powerpc/lib/interrupts.c b/arch/powerpc/lib/interrupts.c
index 5ba4cd0c13ac..bdb8030c27f0 100644
--- a/arch/powerpc/lib/interrupts.c
+++ b/arch/powerpc/lib/interrupts.c
@@ -81,7 +81,7 @@ void timer_interrupt(struct pt_regs *regs)
 
 #if defined(CONFIG_WATCHDOG) || defined (CONFIG_HW_WATCHDOG)
 	if (CONFIG_SYS_WATCHDOG_FREQ && (timestamp % (CONFIG_SYS_WATCHDOG_FREQ)) == 0)
-		WATCHDOG_RESET ();
+		schedule();
 #endif    /* CONFIG_WATCHDOG || CONFIG_HW_WATCHDOG */
 
 #ifdef CONFIG_LED_STATUS
diff --git a/board/astro/mcf5373l/fpga.c b/board/astro/mcf5373l/fpga.c
index 50a3830b8573..f85737432b31 100644
--- a/board/astro/mcf5373l/fpga.c
+++ b/board/astro/mcf5373l/fpga.c
@@ -123,7 +123,7 @@ int altera_write_fn(const void *buf, size_t len, int flush, int cookie)
 
 		if (bytecount % len_40 == 0) {
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
-			WATCHDOG_RESET();
+			schedule();
 #endif
 #ifdef CONFIG_SYS_FPGA_PROG_FEEDBACK
 			putc('.');	/* let them know we are alive */
@@ -343,7 +343,7 @@ int xilinx_fastwr_config_fn(void *buf, size_t len, int flush, int cookie)
 		}
 		if (bytecount % len_40 == 0) {
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
-			WATCHDOG_RESET();
+			schedule();
 #endif
 #ifdef CONFIG_SYS_FPGA_PROG_FEEDBACK
 			putc('.');	/* let them know we are alive */
diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c
index e3c7ed104924..7e4f3ff157f8 100644
--- a/board/dhelectronics/dh_stm32mp1/board.c
+++ b/board/dhelectronics/dh_stm32mp1/board.c
@@ -423,7 +423,7 @@ static void __maybe_unused led_error_blink(u32 nb_blink)
 		for (i = 0; i < 2 * nb_blink; i++) {
 			led_set_state(led, LEDST_TOGGLE);
 			mdelay(125);
-			WATCHDOG_RESET();
+			schedule();
 		}
 	}
 #endif
diff --git a/board/liebherr/display5/spl.c b/board/liebherr/display5/spl.c
index 5c1af1a7720f..4219d002fec5 100644
--- a/board/liebherr/display5/spl.c
+++ b/board/liebherr/display5/spl.c
@@ -329,7 +329,7 @@ void board_init_f(ulong dummy)
 	/* Initialize and reset WDT in SPL */
 #ifdef CONFIG_SPL_WATCHDOG
 	hw_watchdog_init();
-	WATCHDOG_RESET();
+	schedule();
 #endif
 
 	/* load/boot image from boot device */
diff --git a/board/nokia/rx51/rx51.c b/board/nokia/rx51/rx51.c
index 460d248eaaeb..9548c3c7be71 100644
--- a/board/nokia/rx51/rx51.c
+++ b/board/nokia/rx51/rx51.c
@@ -722,7 +722,7 @@ static int rx51_kp_getc(struct udevice *dev)
 {
 	keybuf_head %= KEYBUF_SIZE;
 	while (!rx51_kp_tstc(dev))
-		WATCHDOG_RESET();
+		schedule();
 	return keybuf[keybuf_head++];
 }
 
diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
index 9496890d1641..6028a0b6de45 100644
--- a/board/st/stm32mp1/stm32mp1.c
+++ b/board/st/stm32mp1/stm32mp1.c
@@ -289,7 +289,7 @@ static void __maybe_unused led_error_blink(u32 nb_blink)
 			for (i = 0; i < 2 * nb_blink; i++) {
 				led_set_state(led, LEDST_TOGGLE);
 				mdelay(125);
-				WATCHDOG_RESET();
+				schedule();
 			}
 			led_set_state(led, LEDST_ON);
 		}
diff --git a/boot/bootretry.c b/boot/bootretry.c
index 2bc9c6866e03..8d850df9d487 100644
--- a/boot/bootretry.c
+++ b/boot/bootretry.c
@@ -44,7 +44,7 @@ int bootretry_tstc_timeout(void)
 	while (!tstc()) {	/* while no incoming data */
 		if (retry_time >= 0 && get_ticks() > endtime)
 			return -ETIMEDOUT;
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	return 0;
diff --git a/boot/image-board.c b/boot/image-board.c
index 1be0a359aba7..98f903f93fb9 100644
--- a/boot/image-board.c
+++ b/boot/image-board.c
@@ -181,7 +181,7 @@ void memmove_wd(void *to, void *from, size_t len, ulong chunksz)
 		while (len > 0) {
 			size_t tail = (len > chunksz) ? chunksz : len;
 
-			WATCHDOG_RESET();
+			schedule();
 			if (to > from) {
 				to -= tail;
 				from -= tail;
diff --git a/cmd/fastboot.c b/cmd/fastboot.c
index 033a2c95e8f0..dd223b1554da 100644
--- a/cmd/fastboot.c
+++ b/cmd/fastboot.c
@@ -76,7 +76,7 @@ static int do_fastboot_usb(int argc, char *const argv[],
 			break;
 		if (ctrlc())
 			break;
-		WATCHDOG_RESET();
+		schedule();
 		usb_gadget_handle_interrupts(controller_index);
 	}
 
diff --git a/cmd/mem.c b/cmd/mem.c
index 6a7b4014edcd..1e39348195a0 100644
--- a/cmd/mem.c
+++ b/cmd/mem.c
@@ -300,7 +300,7 @@ static int do_mem_cmp(struct cmd_tbl *cmdtp, int flag, int argc,
 
 		/* reset watchdog from time to time */
 		if ((ngood % (64 << 10)) == 0)
-			WATCHDOG_RESET();
+			schedule();
 	}
 	unmap_sysmem(buf1);
 	unmap_sysmem(buf2);
@@ -848,7 +848,7 @@ static ulong mem_test_alt(vu_long *buf, ulong start_addr, ulong end_addr,
 		}
 	}
 	addr[test_offset] = pattern;
-	WATCHDOG_RESET();
+	schedule();
 
 	/*
 	 * Check for addr bits stuck low or shorted.
@@ -890,7 +890,7 @@ static ulong mem_test_alt(vu_long *buf, ulong start_addr, ulong end_addr,
 	 * Fill memory with a known pattern.
 	 */
 	for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) {
-		WATCHDOG_RESET();
+		schedule();
 		addr[offset] = pattern;
 	}
 
@@ -898,7 +898,7 @@ static ulong mem_test_alt(vu_long *buf, ulong start_addr, ulong end_addr,
 	 * Check each location and invert it for the second pass.
 	 */
 	for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) {
-		WATCHDOG_RESET();
+		schedule();
 		temp = addr[offset];
 		if (temp != pattern) {
 			printf("\nFAILURE (read/write) @ 0x%.8lx:"
@@ -918,7 +918,7 @@ static ulong mem_test_alt(vu_long *buf, ulong start_addr, ulong end_addr,
 	 * Check each location for the inverted pattern and zero it.
 	 */
 	for (pattern = 1, offset = 0; offset < num_words; pattern++, offset++) {
-		WATCHDOG_RESET();
+		schedule();
 		anti_pattern = ~pattern;
 		temp = addr[offset];
 		if (temp != anti_pattern) {
@@ -972,7 +972,7 @@ static ulong test_bitflip_comparison(volatile unsigned long *bufa,
 	for (k = 0; k < max; k++) {
 		q = 0x00000001L << k;
 		for (j = 0; j < 8; j++) {
-			WATCHDOG_RESET();
+			schedule();
 			q = ~q;
 			p1 = (volatile unsigned long *)bufa;
 			p2 = (volatile unsigned long *)bufb;
@@ -1033,7 +1033,7 @@ static ulong mem_test_quick(vu_long *buf, ulong start_addr, ulong end_addr,
 		pattern, "");
 
 	for (addr = buf, val = pattern; addr < end; addr++) {
-		WATCHDOG_RESET();
+		schedule();
 		*addr = val;
 		val += incr;
 	}
@@ -1041,7 +1041,7 @@ static ulong mem_test_quick(vu_long *buf, ulong start_addr, ulong end_addr,
 	puts("Reading...");
 
 	for (addr = buf, val = pattern; addr < end; addr++) {
-		WATCHDOG_RESET();
+		schedule();
 		readback = *addr;
 		if (readback != val) {
 			ulong offset = addr - buf;
diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c
index d4e619b842c8..b7daaa6e8e84 100644
--- a/cmd/usb_mass_storage.c
+++ b/cmd/usb_mass_storage.c
@@ -231,7 +231,7 @@ static int do_usb_mass_storage(struct cmd_tbl *cmdtp, int flag,
 			goto cleanup_register;
 		}
 
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 cleanup_register:
diff --git a/cmd/ximg.c b/cmd/ximg.c
index 65ba41320a02..8533d0d2389d 100644
--- a/cmd/ximg.c
+++ b/cmd/ximg.c
@@ -200,7 +200,7 @@ do_imgextract(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 
 				while (l > 0) {
 					tail = (l > CHUNKSZ) ? CHUNKSZ : l;
-					WATCHDOG_RESET();
+					schedule();
 					memmove(to, from, tail);
 					to += tail;
 					from += tail;
diff --git a/common/board_f.c b/common/board_f.c
index deb46be18227..f92d7b9faf4c 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -114,14 +114,14 @@ static int init_func_watchdog_init(void)
 	hw_watchdog_init();
 	puts("       Watchdog enabled\n");
 # endif
-	WATCHDOG_RESET();
+	schedule();
 
 	return 0;
 }
 
 int init_func_watchdog_reset(void)
 {
-	WATCHDOG_RESET();
+	schedule();
 
 	return 0;
 }
diff --git a/common/board_r.c b/common/board_r.c
index 062bc3e688c6..50670b5615a5 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -341,7 +341,7 @@ static int initr_flash(void)
 	/*
 	 * Compute and print flash CRC if flashchecksum is set to 'y'
 	 *
-	 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
+	 * NOTE: Maybe we should add some schedule()? XXX
 	 */
 	if (env_get_yesno("flashchecksum") == 1) {
 		const uchar *flash_base = (const uchar *)CONFIG_SYS_FLASH_BASE;
diff --git a/common/cli_readline.c b/common/cli_readline.c
index f883b7ffac8e..f6e2bcdeceb2 100644
--- a/common/cli_readline.c
+++ b/common/cli_readline.c
@@ -274,7 +274,7 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
 			while (!tstc()) {	/* while no incoming data */
 				if (get_ticks() >= etime)
 					return -2;	/* timed out */
-				WATCHDOG_RESET();
+				schedule();
 			}
 			first = 0;
 		}
@@ -595,7 +595,7 @@ int cli_readline_into_buffer(const char *const prompt, char *buffer,
 	for (;;) {
 		if (bootretry_tstc_timeout())
 			return -2;	/* timed out */
-		WATCHDOG_RESET();	/* Trigger watchdog, if needed */
+		schedule();	/* Trigger watchdog, if needed */
 
 		c = getchar();
 
diff --git a/common/console.c b/common/console.c
index bde941223997..66b9813b3a7e 100644
--- a/common/console.c
+++ b/common/console.c
@@ -480,7 +480,7 @@ int fgetc(int file)
 		 * Effectively poll for input wherever it may be available.
 		 */
 		for (;;) {
-			WATCHDOG_RESET();
+			schedule();
 			if (CONFIG_IS_ENABLED(CONSOLE_MUX)) {
 				/*
 				 * Upper layer may have already called tstc() so
diff --git a/common/dfu.c b/common/dfu.c
index 16bd1ba588ad..96190889ab77 100644
--- a/common/dfu.c
+++ b/common/dfu.c
@@ -101,7 +101,7 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget)
 		if (dfu_reinit_needed)
 			goto exit;
 
-		WATCHDOG_RESET();
+		schedule();
 		usb_gadget_handle_interrupts(usbctrl_index);
 	}
 exit:
diff --git a/common/lcd.c b/common/lcd.c
index 0898bc025d67..a462b22a477a 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -294,9 +294,9 @@ void lcd_logo_plot(int x, int y)
 	      BMP_LOGO_WIDTH, BMP_LOGO_HEIGHT, BMP_LOGO_COLORS);
 
 	if (bpix < 12) {
-		WATCHDOG_RESET();
+		schedule();
 		lcd_logo_set_cmap();
-		WATCHDOG_RESET();
+		schedule();
 
 		for (i = 0; i < BMP_LOGO_HEIGHT; ++i) {
 			memcpy(fb, bmap, BMP_LOGO_WIDTH);
@@ -320,7 +320,7 @@ void lcd_logo_plot(int x, int y)
 		}
 	}
 
-	WATCHDOG_RESET();
+	schedule();
 	lcd_sync();
 }
 #else
@@ -459,7 +459,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 			byte_width = width * 2;
 
 		for (i = 0; i < height; ++i) {
-			WATCHDOG_RESET();
+			schedule();
 			for (j = 0; j < width; j++) {
 				if (bpix != 16) {
 					fb_put_byte(&fb, &bmap);
@@ -488,7 +488,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 #if defined(CONFIG_BMP_16BPP)
 	case 16:
 		for (i = 0; i < height; ++i) {
-			WATCHDOG_RESET();
+			schedule();
 			for (j = 0; j < width; j++)
 				fb_put_word(&fb, &bmap);
 
diff --git a/common/menu.c b/common/menu.c
index 0d19601cf538..8fe00965c0cd 100644
--- a/common/menu.c
+++ b/common/menu.c
@@ -435,7 +435,7 @@ void bootmenu_autoboot_loop(struct bootmenu_data *menu,
 		printf("Hit any key to stop autoboot: %d ", menu->delay);
 		for (i = 0; i < 100; ++i) {
 			if (!tstc()) {
-				WATCHDOG_RESET();
+				schedule();
 				mdelay(10);
 				continue;
 			}
@@ -483,7 +483,7 @@ void bootmenu_loop(struct bootmenu_data *menu,
 		if (tstc()) {
 			c = getchar();
 		} else {
-			WATCHDOG_RESET();
+			schedule();
 			mdelay(10);
 			if (tstc())
 				c = getchar();
@@ -492,7 +492,7 @@ void bootmenu_loop(struct bootmenu_data *menu,
 		}
 	} else {
 		while (!tstc()) {
-			WATCHDOG_RESET();
+			schedule();
 			mdelay(10);
 		}
 		c = getchar();
diff --git a/common/usb_kbd.c b/common/usb_kbd.c
index d385bea532e2..4cbc9acb7380 100644
--- a/common/usb_kbd.c
+++ b/common/usb_kbd.c
@@ -446,7 +446,7 @@ static int usb_kbd_getc(struct stdio_dev *sdev)
 	data = usb_kbd_dev->privptr;
 
 	while (data->usb_in_pointer == data->usb_out_pointer) {
-		WATCHDOG_RESET();
+		schedule();
 		usb_kbd_poll_for_event(usb_kbd_dev);
 	}
 
diff --git a/common/xyzModem.c b/common/xyzModem.c
index a68d3929024b..fb319f711907 100644
--- a/common/xyzModem.c
+++ b/common/xyzModem.c
@@ -68,7 +68,7 @@ CYGACC_COMM_IF_GETC_TIMEOUT (char chan, char *c)
 {
 
   ulong now = get_timer(0);
-  WATCHDOG_RESET();
+  schedule();
   while (!tstc ())
     {
       if (get_timer(now) > xyzModem_CHAR_TIMEOUT)
diff --git a/drivers/block/ide.c b/drivers/block/ide.c
index 3270a9f032f3..08a96928a00b 100644
--- a/drivers/block/ide.c
+++ b/drivers/block/ide.c
@@ -62,7 +62,7 @@ static void ide_reset(void)
 	/* the reset signal shall be asserted for et least 25 us */
 	udelay(25);
 
-	WATCHDOG_RESET();
+	schedule();
 
 	/* de-assert RESET signal */
 	ide_set_reset(0);
@@ -695,7 +695,7 @@ void ide_init(void)
 	unsigned char c;
 	int i, bus;
 
-	WATCHDOG_RESET();
+	schedule();
 
 	/* ATAPI Drives seems to need a proper IDE Reset */
 	ide_reset();
@@ -745,7 +745,7 @@ void ide_init(void)
 			puts("OK ");
 			ide_bus_ok[bus] = 1;
 		}
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	putc('\n');
@@ -775,7 +775,7 @@ void ide_init(void)
 		}
 #endif
 	}
-	WATCHDOG_RESET();
+	schedule();
 
 #ifdef CONFIG_BLK
 	struct udevice *dev;
diff --git a/drivers/crypto/aspeed/aspeed_hace.c b/drivers/crypto/aspeed/aspeed_hace.c
index 1178cc6a7694..a1b0b9f564b1 100644
--- a/drivers/crypto/aspeed/aspeed_hace.c
+++ b/drivers/crypto/aspeed/aspeed_hace.c
@@ -302,7 +302,7 @@ static int aspeed_hace_digest_wd(struct udevice *dev, enum HASH_ALGO algo,
 				return rc;
 
 			cur += chunk;
-			WATCHDOG_RESET();
+			schedule();
 		}
 	} else {
 		rc = aspeed_hace_update(dev, ctx, ibuf, ilen);
diff --git a/drivers/crypto/hash/hash_sw.c b/drivers/crypto/hash/hash_sw.c
index fea9d1260967..553c068010ca 100644
--- a/drivers/crypto/hash/hash_sw.c
+++ b/drivers/crypto/hash/hash_sw.c
@@ -258,7 +258,7 @@ static int sw_hash_digest_wd(struct udevice *dev, enum HASH_ALGO algo,
 				return rc;
 
 			cur += chunk;
-			WATCHDOG_RESET();
+			schedule();
 		}
 	} else {
 		rc = sw_hash_update(dev, ctx, ibuf, ilen);
diff --git a/drivers/ddr/altera/sdram_arria10.c b/drivers/ddr/altera/sdram_arria10.c
index 4a8f8dea1c4d..8ef5fa4c481c 100644
--- a/drivers/ddr/altera/sdram_arria10.c
+++ b/drivers/ddr/altera/sdram_arria10.c
@@ -671,7 +671,7 @@ static int of_sdram_firewall_setup(const void *blob)
 
 int ddr_calibration_sequence(void)
 {
-	WATCHDOG_RESET();
+	schedule();
 
 	/* Check to see if SDRAM cal was success */
 	if (sdram_startup()) {
@@ -681,7 +681,7 @@ int ddr_calibration_sequence(void)
 
 	puts("DDRCAL: Success\n");
 
-	WATCHDOG_RESET();
+	schedule();
 
 	/* initialize the MMR register */
 	sdram_mmr_init();
diff --git a/drivers/ddr/altera/sdram_n5x.c b/drivers/ddr/altera/sdram_n5x.c
index 737a4e2ff18b..d9039443b91c 100644
--- a/drivers/ddr/altera/sdram_n5x.c
+++ b/drivers/ddr/altera/sdram_n5x.c
@@ -517,7 +517,7 @@ static int ensure_retry_procedure_complete(phys_addr_t umctl2_base)
 			      DDR4_CRCPARSTAT_CMD_IN_ERR_WINDOW;
 
 		udelay(1);
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	return 0;
@@ -1349,7 +1349,7 @@ static int ddr_post_handoff_config(phys_addr_t umctl2_base,
 		}
 
 		udelay(1);
-		WATCHDOG_RESET();
+		schedule();
 
 		/* Polling until SDRAM entered normal operating mode */
 		value = readl(umctl2_base + DDR4_STAT_OFFSET) &
diff --git a/drivers/ddr/altera/sdram_soc64.c b/drivers/ddr/altera/sdram_soc64.c
index 9b1710c13509..4716abfc9a8b 100644
--- a/drivers/ddr/altera/sdram_soc64.c
+++ b/drivers/ddr/altera/sdram_soc64.c
@@ -161,7 +161,7 @@ void sdram_init_ecc_bits(struct bd_info *bd)
 			sdram_clear_mem(start_addr, size_init);
 			size -= size_init;
 			start_addr += size_init;
-			WATCHDOG_RESET();
+			schedule();
 		}
 
 		bank++;
diff --git a/drivers/fpga/intel_sdm_mb.c b/drivers/fpga/intel_sdm_mb.c
index f5fd9a14c266..903d143a361c 100644
--- a/drivers/fpga/intel_sdm_mb.c
+++ b/drivers/fpga/intel_sdm_mb.c
@@ -44,7 +44,7 @@ static int reconfig_status_polling_resp(void)
 
 		puts(".");
 		udelay(RECONFIG_STATUS_INTERVAL_DELAY_US);
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	return -ETIMEDOUT;
@@ -104,7 +104,7 @@ static int send_bitstream(const void *rbf_data, size_t rbf_size)
 
 			udelay(20000);
 		}
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	return 0;
@@ -252,7 +252,7 @@ static int reconfig_status_polling_resp(void)
 
 		puts(".");
 		udelay(RECONFIG_STATUS_INTERVAL_DELAY_US);
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	return -ETIMEDOUT;
@@ -378,7 +378,7 @@ static int send_reconfig_data(const void *rbf_data, size_t rbf_size,
 			if (resp_err && !xfer_count)
 				return resp_err;
 		}
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	return 0;
diff --git a/drivers/fpga/socfpga_arria10.c b/drivers/fpga/socfpga_arria10.c
index d8089122af1d..e86e3b743171 100644
--- a/drivers/fpga/socfpga_arria10.c
+++ b/drivers/fpga/socfpga_arria10.c
@@ -383,7 +383,7 @@ static int fpgamgr_program_poll_cd(void)
 			printf("nstatus == 0 while waiting for condone\n");
 			return -EPERM;
 		}
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	if (i == FPGA_TIMEOUT_CNT)
@@ -534,7 +534,7 @@ static void get_rbf_image_info(struct rbf_info *rbf, u16 *buffer)
 		rbf->section = unknown;
 		break;
 
-		WATCHDOG_RESET();
+		schedule();
 	}
 }
 
@@ -635,7 +635,7 @@ static int first_loading_rbf_to_buffer(struct udevice *dev,
 				break;
 			}
 		}
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	if (!fpga_node_name) {
@@ -879,7 +879,7 @@ int socfpga_loadfs(fpga_fs_info *fpga_fsinfo, const void *buf, size_t bsize,
 
 		total_sizeof_image += buffer_sizebytes_ori;
 
-		WATCHDOG_RESET();
+		schedule();
 	}
 	wait_for_fifo_empty();
 
diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c
index aa13af3ae109..f80ff5383bc3 100644
--- a/drivers/i2c/mxc_i2c.c
+++ b/drivers/i2c/mxc_i2c.c
@@ -199,7 +199,7 @@ static int wait_for_sr_state(struct mxc_i2c_bus *i2c_bus, unsigned state)
 		}
 		if ((sr & (state >> 8)) == (unsigned char)state)
 			return sr;
-		WATCHDOG_RESET();
+		schedule();
 		elapsed = get_timer(start_time);
 		if (elapsed > (CONFIG_SYS_HZ / 10))	/* .1 seconds */
 			break;
@@ -447,7 +447,7 @@ int i2c_idle_bus(struct mxc_i2c_bus *i2c_bus)
 		sda = dm_gpio_get_value(sda_gpio);
 		if ((sda & scl) == 1)
 			break;
-		WATCHDOG_RESET();
+		schedule();
 		elapsed = get_timer(start_time);
 		if (elapsed > (CONFIG_SYS_HZ / 5)) {	/* .2 seconds */
 			ret = -EBUSY;
diff --git a/drivers/mmc/octeontx_hsmmc.c b/drivers/mmc/octeontx_hsmmc.c
index 6e9acf7310aa..4ee62df9d408 100644
--- a/drivers/mmc/octeontx_hsmmc.c
+++ b/drivers/mmc/octeontx_hsmmc.c
@@ -1023,7 +1023,7 @@ static void octeontx_mmc_cleanup_dma(struct mmc *mmc,
 		start = get_timer(0);
 		do {
 			rsp_sts.u = read_csr(mmc, MIO_EMM_RSP_STS());
-			WATCHDOG_RESET();
+			schedule();
 		} while (get_timer(start) < 100 &&
 			 (rsp_sts.s.dma_val || rsp_sts.s.dma_pend));
 	} while (retries-- >= 0 && rsp_sts.s.dma_pend);
@@ -1107,7 +1107,7 @@ static int octeontx_mmc_wait_dma(struct mmc *mmc, bool write, ulong timeout,
 		} else if (!rsp_sts.s.dma_val && emm_dma_int.s.done) {
 			break;
 		}
-		WATCHDOG_RESET();
+		schedule();
 		timed_out = (get_timer(start_time) > timeout);
 	} while (!timed_out);
 
@@ -1219,7 +1219,7 @@ static int octeontx_mmc_read_blocks(struct mmc *mmc, struct mmc_cmd *cmd,
 				}
 				return blkcnt - count;
 			}
-			WATCHDOG_RESET();
+			schedule();
 		} while (--count);
 	}
 #ifdef DEBUG
@@ -1253,7 +1253,7 @@ static int octeontx_mmc_poll_ready(struct mmc *mmc, ulong timeout)
 		} else if (cmd.response[0] & R1_READY_FOR_DATA) {
 			return 0;
 		}
-		WATCHDOG_RESET();
+		schedule();
 	} while (get_timer(start) < timeout);
 
 	if (not_ready)
@@ -1328,7 +1328,7 @@ static ulong octeontx_mmc_write_blocks(struct mmc *mmc, struct mmc_cmd *cmd,
 				       read_csr(mmc, MIO_EMM_DMA()));
 				return blkcnt - count;
 			}
-			WATCHDOG_RESET();
+			schedule();
 		} while (--count);
 	}
 
@@ -1491,7 +1491,7 @@ static int octeontx_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	start = get_timer(0);
 	do {
 		rsp_sts.u = read_csr(mmc, MIO_EMM_RSP_STS());
-		WATCHDOG_RESET();
+		schedule();
 	} while (!rsp_sts.s.cmd_done && !rsp_sts.s.rsp_timeout &&
 		 (get_timer(start) < timeout + 10));
 	octeontx_mmc_print_rsp_errors(mmc, rsp_sts);
diff --git a/drivers/mmc/sh_mmcif.c b/drivers/mmc/sh_mmcif.c
index 830e29cdd414..76dc1c68b821 100644
--- a/drivers/mmc/sh_mmcif.c
+++ b/drivers/mmc/sh_mmcif.c
@@ -242,7 +242,7 @@ static int sh_mmcif_multi_read(struct sh_mmcif_host *host,
 		for (i = 0; i < blocksize / 4; i++)
 			*p++ = sh_mmcif_read(&host->regs->ce_data);
 
-		WATCHDOG_RESET();
+		schedule();
 	}
 	return 0;
 }
@@ -309,7 +309,7 @@ static int sh_mmcif_multi_write(struct sh_mmcif_host *host,
 		for (i = 0; i < blocksize / 4; i++)
 			sh_mmcif_write(*p++, &host->regs->ce_data);
 
-		WATCHDOG_RESET();
+		schedule();
 	}
 	return 0;
 }
@@ -523,7 +523,7 @@ static int sh_mmcif_send_cmd_common(struct sh_mmcif_host *host,
 {
 	int ret;
 
-	WATCHDOG_RESET();
+	schedule();
 
 	switch (cmd->cmdidx) {
 	case MMC_CMD_APP_CMD:
diff --git a/drivers/mmc/stm32_sdmmc2.c b/drivers/mmc/stm32_sdmmc2.c
index bfce8a2e4a6c..7ab4d949e74d 100644
--- a/drivers/mmc/stm32_sdmmc2.c
+++ b/drivers/mmc/stm32_sdmmc2.c
@@ -445,7 +445,7 @@ static int stm32_sdmmc2_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
 	u32 cmdat = data ? SDMMC_CMD_CMDTRANS : 0;
 	int ret, retry = 3;
 
-	WATCHDOG_RESET();
+	schedule();
 
 retry_cmd:
 	ctx.data_length = 0;
diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index 495041070650..d34d8ee97671 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -584,7 +584,7 @@ static int flash_status_check(flash_info_t *info, flash_sect_t sector,
 	reset_timer();
 #endif
 	start = get_timer(0);
-	WATCHDOG_RESET();
+	schedule();
 	while (flash_is_busy(info, sector)) {
 		if (get_timer(start) > tout) {
 			printf("Flash %s timeout at address %lx data %lx\n",
@@ -677,7 +677,7 @@ static int flash_status_poll(flash_info_t *info, void *src, void *dst,
 	reset_timer();
 #endif
 	start = get_timer(0);
-	WATCHDOG_RESET();
+	schedule();
 	while (1) {
 		switch (info->portwidth) {
 		case FLASH_CFI_8BIT:
diff --git a/drivers/mtd/nand/core.c b/drivers/mtd/nand/core.c
index 090834a495fa..99c29670c75e 100644
--- a/drivers/mtd/nand/core.c
+++ b/drivers/mtd/nand/core.c
@@ -173,7 +173,7 @@ int nanddev_mtd_erase(struct mtd_info *mtd, struct erase_info *einfo)
 	nanddev_offs_to_pos(nand, einfo->addr, &pos);
 	nanddev_offs_to_pos(nand, einfo->addr + einfo->len - 1, &last);
 	while (nanddev_pos_cmp(&pos, &last) <= 0) {
-		WATCHDOG_RESET();
+		schedule();
 		ret = nanddev_erase(nand, &pos);
 		if (ret) {
 			einfo->fail_addr = nanddev_pos_to_offs(nand, &pos);
diff --git a/drivers/mtd/nand/raw/atmel_nand.c b/drivers/mtd/nand/raw/atmel_nand.c
index 06bf5ac18ffc..61bfd175be40 100644
--- a/drivers/mtd/nand/raw/atmel_nand.c
+++ b/drivers/mtd/nand/raw/atmel_nand.c
@@ -420,7 +420,7 @@ static int pmecc_err_location(struct mtd_info *mtd)
 	while (--timeout) {
 		if (pmecc_readl(host->pmerrloc, elisr) & PMERRLOC_CALC_DONE)
 			break;
-		WATCHDOG_RESET();
+		schedule();
 		udelay(1);
 	}
 
@@ -558,7 +558,7 @@ static int atmel_nand_pmecc_read_page(struct mtd_info *mtd,
 	while (--timeout) {
 		if (!(pmecc_readl(host->pmecc, sr) & PMECC_SR_BUSY))
 			break;
-		WATCHDOG_RESET();
+		schedule();
 		udelay(1);
 	}
 
@@ -598,7 +598,7 @@ static int atmel_nand_pmecc_write_page(struct mtd_info *mtd,
 	while (--timeout) {
 		if (!(pmecc_readl(host->pmecc, sr) & PMECC_SR_BUSY))
 			break;
-		WATCHDOG_RESET();
+		schedule();
 		udelay(1);
 	}
 
diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
index 1a1a7579328a..215b9ba84fd8 100644
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -595,7 +595,7 @@ static void nand_wait_status_ready(struct mtd_info *mtd, unsigned long timeo)
 
 		if (status & NAND_STATUS_READY)
 			break;
-		WATCHDOG_RESET();
+		schedule();
 	}
 };
 
@@ -2342,7 +2342,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
 	while (1) {
 		unsigned int ecc_failures = mtd->ecc_stats.failed;
 
-		WATCHDOG_RESET();
+		schedule();
 		bytes = min(mtd->writesize - col, readlen);
 		aligned = (bytes == mtd->writesize);
 
@@ -2695,7 +2695,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
 	page = realpage & chip->pagemask;
 
 	while (1) {
-		WATCHDOG_RESET();
+		schedule();
 
 		if (ops->mode == MTD_OPS_RAW)
 			ret = chip->ecc.read_oob_raw(mtd, chip, page);
@@ -3263,7 +3263,7 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
 		else
 			use_bufpoi = 0;
 
-		WATCHDOG_RESET();
+		schedule();
 		/* Partial page write?, or need to use bounce buffer */
 		if (use_bufpoi) {
 			pr_debug("%s: using write bounce buffer for buf@%p\n",
@@ -3556,7 +3556,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
 	instr->state = MTD_ERASING;
 
 	while (len) {
-		WATCHDOG_RESET();
+		schedule();
 
 		/* Check if we have a bad block, we do not erase bad blocks! */
 		if (!instr->scrub && nand_block_checkbad(mtd, ((loff_t) page) <<
diff --git a/drivers/mtd/nand/raw/nand_util.c b/drivers/mtd/nand/raw/nand_util.c
index 5150607d8a17..b2345dca7f71 100644
--- a/drivers/mtd/nand/raw/nand_util.c
+++ b/drivers/mtd/nand/raw/nand_util.c
@@ -103,7 +103,7 @@ int nand_erase_opts(struct mtd_info *mtd,
 	     erased_length < erase_length;
 	     erase.addr += mtd->erasesize) {
 
-		WATCHDOG_RESET();
+		schedule();
 
 		if (opts->lim && (erase.addr >= (opts->offset + opts->lim))) {
 			puts("Size of erase exceeds limit\n");
@@ -638,7 +638,7 @@ int nand_write_skip_bad(struct mtd_info *mtd, loff_t offset, size_t *length,
 		size_t block_offset = offset & (mtd->erasesize - 1);
 		size_t write_size, truncated_write_size;
 
-		WATCHDOG_RESET();
+		schedule();
 
 		if (nand_block_isbad(mtd, block_start)) {
 			printf("Skip bad block 0x%08llx\n", block_start);
@@ -753,7 +753,7 @@ int nand_read_skip_bad(struct mtd_info *mtd, loff_t offset, size_t *length,
 		size_t block_offset = offset & (mtd->erasesize - 1);
 		size_t read_length;
 
-		WATCHDOG_RESET();
+		schedule();
 
 		if (nand_block_isbad(mtd, offset & ~(mtd->erasesize - 1))) {
 			printf("Skipping bad block 0x%08llx\n",
diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index e5330958c7e1..134bf22c8055 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -579,7 +579,7 @@ static int spinand_mtd_read(struct mtd_info *mtd, loff_t from,
 #endif
 
 	nanddev_io_for_each_page(nand, from, ops, &iter) {
-		WATCHDOG_RESET();
+		schedule();
 		ret = spinand_select_target(spinand, iter.req.pos.target);
 		if (ret)
 			break;
@@ -631,7 +631,7 @@ static int spinand_mtd_write(struct mtd_info *mtd, loff_t to,
 #endif
 
 	nanddev_io_for_each_page(nand, to, ops, &iter) {
-		WATCHDOG_RESET();
+		schedule();
 		ret = spinand_select_target(spinand, iter.req.pos.target);
 		if (ret)
 			break;
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index f94597c06119..08fe7d427acf 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -478,7 +478,7 @@ static int onenand_wait(struct mtd_info *mtd, int state)
 	u32 timeo = (CONFIG_SYS_HZ * 20) / 1000;
 	u32 time_start = get_timer(0);
 	do {
-		WATCHDOG_RESET();
+		schedule();
 		if (get_timer(time_start) > timeo)
 			return -EIO;
 		interrupt = this->read_word(this->base + ONENAND_REG_INTERRUPT);
@@ -1170,7 +1170,7 @@ static int onenand_bbt_wait(struct mtd_info *mtd, int state)
 	u32 timeo = (CONFIG_SYS_HZ * 20) / 1000;
 	u32 time_start = get_timer(0);
 	do {
-		WATCHDOG_RESET();
+		schedule();
 		if (get_timer(time_start) > timeo)
 			return ONENAND_BBT_READ_FATAL_ERROR;
 		interrupt = this->read_word(this->base + ONENAND_REG_INTERRUPT);
diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
index f236e8751074..c73636d7d117 100644
--- a/drivers/mtd/spi/spi-nor-core.c
+++ b/drivers/mtd/spi/spi-nor-core.c
@@ -958,7 +958,7 @@ static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
 	addr_known = true;
 
 	while (len) {
-		WATCHDOG_RESET();
+		schedule();
 		if (!IS_ENABLED(CONFIG_SPL_BUILD) && ctrlc()) {
 			addr_known = false;
 			ret = -EINTR;
@@ -1721,7 +1721,7 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
 	for (i = 0; i < len; ) {
 		ssize_t written;
 		loff_t addr = to + i;
-		WATCHDOG_RESET();
+		schedule();
 
 		/*
 		 * If page_size is a power of two, the offset can be quickly
diff --git a/drivers/net/octeontx2/nix.c b/drivers/net/octeontx2/nix.c
index a5665a25f2af..f596b6bca876 100644
--- a/drivers/net/octeontx2/nix.c
+++ b/drivers/net/octeontx2/nix.c
@@ -580,7 +580,7 @@ int nix_lf_xmit(struct udevice *dev, void *pkt, int pkt_len)
 		__iowmb();
 		result = lmt_submit((u64)(nix->nix_base +
 					       NIXX_LF_OP_SENDX(0)));
-		WATCHDOG_RESET();
+		schedule();
 	} while (result == 0);
 
 	return 0;
diff --git a/drivers/net/octeontx2/nix_af.c b/drivers/net/octeontx2/nix_af.c
index cd098d6cd6ac..c945ea0f5f22 100644
--- a/drivers/net/octeontx2/nix_af.c
+++ b/drivers/net/octeontx2/nix_af.c
@@ -65,7 +65,7 @@ int npa_attach_aura(struct nix_af *nix_af, int lf,
 	start = get_timer(0);
 	while ((res->s.compcode == NPA_AQ_COMP_E_NOTDONE) &&
 	       (get_timer(start) < 1000))
-		WATCHDOG_RESET();
+		schedule();
 	if (res->s.compcode != NPA_AQ_COMP_E_GOOD) {
 		printf("%s: Error: result 0x%x not good\n",
 		       __func__, res->s.compcode);
@@ -111,7 +111,7 @@ int npa_attach_pool(struct nix_af *nix_af, int lf,
 	start = get_timer(0);
 	while ((res->s.compcode == NPA_AQ_COMP_E_NOTDONE) &&
 	       (get_timer(start) < 1000))
-		WATCHDOG_RESET();
+		schedule();
 
 	if (res->s.compcode != NPA_AQ_COMP_E_GOOD) {
 		printf("%s: Error: result 0x%x not good\n",
@@ -136,7 +136,7 @@ int npa_lf_admin_setup(struct npa *npa, int lf, dma_addr_t aura_base)
 
 	do {
 		lf_rst.u = npa_af_reg_read(npa_af, NPA_AF_LF_RST());
-		WATCHDOG_RESET();
+		schedule();
 	} while (lf_rst.s.exec);
 
 	/* Set Aura size and enable caching of contexts */
@@ -199,7 +199,7 @@ int npa_lf_admin_shutdown(struct nix_af *nix_af, int lf, u32 pool_count)
 		start = get_timer(0);
 		while ((res->s.compcode == NPA_AQ_COMP_E_NOTDONE) &&
 		       (get_timer(start) < 1000))
-			WATCHDOG_RESET();
+			schedule();
 
 		if (res->s.compcode != NPA_AQ_COMP_E_GOOD) {
 			printf("%s: Error: result 0x%x not good for lf %d\n"
@@ -235,7 +235,7 @@ int npa_lf_admin_shutdown(struct nix_af *nix_af, int lf, u32 pool_count)
 		start = get_timer(0);
 		while ((res->s.compcode == NPA_AQ_COMP_E_NOTDONE) &&
 		       (get_timer(start) < 1000))
-			WATCHDOG_RESET();
+			schedule();
 
 		if (res->s.compcode != NPA_AQ_COMP_E_GOOD) {
 			printf("%s: Error: result 0x%x not good for lf %d\n"
@@ -255,7 +255,7 @@ int npa_lf_admin_shutdown(struct nix_af *nix_af, int lf, u32 pool_count)
 
 	do {
 		lf_rst.u = npa_af_reg_read(npa, NPA_AF_LF_RST());
-		WATCHDOG_RESET();
+		schedule();
 	} while (lf_rst.s.exec);
 
 	return 0;
@@ -286,7 +286,7 @@ int npa_af_setup(struct npa_af *npa_af)
 	/* Wait for reset to complete */
 	do {
 		blk_rst.u = npa_af_reg_read(npa_af, NPA_AF_BLK_RST());
-		WATCHDOG_RESET();
+		schedule();
 	} while (blk_rst.s.busy);
 
 	/* Set little Endian */
@@ -318,7 +318,7 @@ int npa_af_shutdown(struct npa_af *npa_af)
 	/* Wait for reset to complete */
 	do {
 		blk_rst.u = npa_af_reg_read(npa_af, NPA_AF_BLK_RST());
-		WATCHDOG_RESET();
+		schedule();
 	} while (blk_rst.s.busy);
 
 	rvu_aq_free(&npa_af->aq);
@@ -481,7 +481,7 @@ static int nix_aq_issue_command(struct nix_af *nix_af,
 	start = get_timer(0);
 	/* Wait for completion */
 	do {
-		WATCHDOG_RESET();
+		schedule();
 		dsb();
 	} while (result->s.compcode == 0 && get_timer(start) < 2);
 
@@ -645,7 +645,7 @@ int nix_lf_admin_setup(struct nix *nix)
 
 	do {
 		lf_rst.u = nix_af_reg_read(nix_af, NIXX_AF_LF_RST());
-		WATCHDOG_RESET();
+		schedule();
 	} while (lf_rst.s.exec);
 
 	/* Config NIX RQ HW context and base*/
@@ -767,7 +767,7 @@ int nix_lf_admin_shutdown(struct nix_af *nix_af, int lf,
 
 	do {
 		sw_sync.u = nix_af_reg_read(nix_af, NIXX_AF_RX_SW_SYNC());
-		WATCHDOG_RESET();
+		schedule();
 	} while (sw_sync.s.ena);
 
 	for (index = 0; index < rq_count; index++) {
@@ -832,7 +832,7 @@ int nix_lf_admin_shutdown(struct nix_af *nix_af, int lf,
 
 	do {
 		lf_rst.u = nix_af_reg_read(nix_af, NIXX_AF_LF_RST());
-		WATCHDOG_RESET();
+		schedule();
 	} while (lf_rst.s.exec);
 
 	return 0;
@@ -972,7 +972,7 @@ int npc_af_shutdown(struct nix_af *nix_af)
 	/* Wait for reset to complete */
 	do {
 		blk_rst.u = npc_af_reg_read(nix_af, NPC_AF_BLK_RST());
-		WATCHDOG_RESET();
+		schedule();
 	} while (blk_rst.s.busy);
 
 	debug("%s: npc af reset --\n", __func__);
@@ -1008,7 +1008,7 @@ int nix_af_setup(struct nix_af *nix_af)
 	/* Wait for reset to complete */
 	do {
 		blk_rst.u = nix_af_reg_read(nix_af, NIXX_AF_BLK_RST());
-		WATCHDOG_RESET();
+		schedule();
 	} while (blk_rst.s.busy);
 
 	/* Put in LE mode */
@@ -1031,7 +1031,7 @@ int nix_af_setup(struct nix_af *nix_af)
 	/* Wait for calibration to complete */
 	do {
 		af_status.u = nix_af_reg_read(nix_af, NIXX_AF_STATUS());
-		WATCHDOG_RESET();
+		schedule();
 	} while (af_status.s.calibrate_done == 0);
 
 	af_cfg.u = nix_af_reg_read(nix_af, NIXX_AF_CFG());
@@ -1091,7 +1091,7 @@ int nix_af_shutdown(struct nix_af *nix_af)
 	/* Wait for reset to complete */
 	do {
 		blk_rst.u = nix_af_reg_read(nix_af, NIXX_AF_BLK_RST());
-		WATCHDOG_RESET();
+		schedule();
 	} while (blk_rst.s.busy);
 
 	rvu_aq_free(&nix_af->aq);
diff --git a/drivers/ram/stm32mp1/stm32mp1_tests.c b/drivers/ram/stm32mp1/stm32mp1_tests.c
index 64262f1aa901..c5f33544144f 100644
--- a/drivers/ram/stm32mp1/stm32mp1_tests.c
+++ b/drivers/ram/stm32mp1/stm32mp1_tests.c
@@ -169,7 +169,7 @@ static int test_loop_end(u32 *loop, u32 nb_loop, u32 progress)
 		return 1;
 	}
 	printf("loop #%d\n", *loop);
-	WATCHDOG_RESET();
+	schedule();
 
 	return 0;
 }
diff --git a/drivers/serial/atmel_usart.c b/drivers/serial/atmel_usart.c
index 1fb9ee5cc94a..90ccdf6b2945 100644
--- a/drivers/serial/atmel_usart.c
+++ b/drivers/serial/atmel_usart.c
@@ -103,7 +103,7 @@ static int atmel_serial_getc(void)
 	atmel_usart3_t *usart = (atmel_usart3_t *)CONFIG_USART_BASE;
 
 	while (!(readl(&usart->csr) & USART3_BIT(RXRDY)))
-		 WATCHDOG_RESET();
+		 schedule();
 	return readl(&usart->rhr);
 }
 
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
index 47bad6f8e2a9..7592979cab5d 100644
--- a/drivers/serial/ns16550.c
+++ b/drivers/serial/ns16550.c
@@ -296,7 +296,7 @@ void ns16550_putc(struct ns16550 *com_port, char c)
 	 * in puts().
 	 */
 	if (c == '\n')
-		WATCHDOG_RESET();
+		schedule();
 }
 
 #ifndef CONFIG_NS16550_MIN_FUNCTIONS
@@ -307,7 +307,7 @@ char ns16550_getc(struct ns16550 *com_port)
 		extern void usbtty_poll(void);
 		usbtty_poll();
 #endif
-		WATCHDOG_RESET();
+		schedule();
 	}
 	return serial_in(&com_port->rbr);
 }
@@ -395,7 +395,7 @@ static int ns16550_serial_putc(struct udevice *dev, const char ch)
 	 * in puts().
 	 */
 	if (ch == '\n')
-		WATCHDOG_RESET();
+		schedule();
 
 	return 0;
 }
diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
index 30650e37b0d7..0d43e9b62589 100644
--- a/drivers/serial/serial-uclass.c
+++ b/drivers/serial/serial-uclass.c
@@ -246,7 +246,7 @@ static int __serial_getc(struct udevice *dev)
 	do {
 		err = ops->getc(dev);
 		if (err == -EAGAIN)
-			WATCHDOG_RESET();
+			schedule();
 	} while (err == -EAGAIN);
 
 	return err >= 0 ? err : 0;
diff --git a/drivers/serial/serial_bcm283x_mu.c b/drivers/serial/serial_bcm283x_mu.c
index f0756c37c849..493a42b4ccc2 100644
--- a/drivers/serial/serial_bcm283x_mu.c
+++ b/drivers/serial/serial_bcm283x_mu.c
@@ -114,7 +114,7 @@ static int bcm283x_mu_serial_pending(struct udevice *dev, bool input)
 	lsr = readl(&regs->lsr);
 
 	if (input) {
-		WATCHDOG_RESET();
+		schedule();
 		return (lsr & BCM283X_MU_LSR_RX_READY) ? 1 : 0;
 	} else {
 		return (lsr & BCM283X_MU_LSR_TX_IDLE) ? 0 : 1;
diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c
index ca49ef73723b..ff576da516d4 100644
--- a/drivers/serial/serial_lpuart.c
+++ b/drivers/serial/serial_lpuart.c
@@ -169,7 +169,7 @@ static int _lpuart_serial_getc(struct lpuart_serial_plat *plat)
 {
 	struct lpuart_fsl *base = plat->reg;
 	while (!(__raw_readb(&base->us1) & (US1_RDRF | US1_OR)))
-		WATCHDOG_RESET();
+		schedule();
 
 	barrier();
 
@@ -182,7 +182,7 @@ static void _lpuart_serial_putc(struct lpuart_serial_plat *plat,
 	struct lpuart_fsl *base = plat->reg;
 
 	while (!(__raw_readb(&base->us1) & US1_TDRE))
-		WATCHDOG_RESET();
+		schedule();
 
 	__raw_writeb(c, &base->ud);
 }
@@ -330,7 +330,7 @@ static int _lpuart32_serial_getc(struct lpuart_serial_plat *plat)
 	lpuart_read32(plat->flags, &base->stat, &stat);
 	while ((stat & STAT_RDRF) == 0) {
 		lpuart_write32(plat->flags, &base->stat, STAT_FLAGS);
-		WATCHDOG_RESET();
+		schedule();
 		lpuart_read32(plat->flags, &base->stat, &stat);
 	}
 
@@ -358,7 +358,7 @@ static void _lpuart32_serial_putc(struct lpuart_serial_plat *plat,
 		if ((stat & STAT_TDRE))
 			break;
 
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	lpuart_write32(plat->flags, &base->data, c);
diff --git a/drivers/serial/serial_mpc8xx.c b/drivers/serial/serial_mpc8xx.c
index 0978930dcd4f..aeae6ae6cd25 100644
--- a/drivers/serial/serial_mpc8xx.c
+++ b/drivers/serial/serial_mpc8xx.c
@@ -187,7 +187,7 @@ static int serial_mpc8xx_putc(struct udevice *dev, const char c)
 	setbits_be16(&rtx->txbd.cbd_sc, BD_SC_READY);
 
 	while (in_be16(&rtx->txbd.cbd_sc) & BD_SC_READY)
-		WATCHDOG_RESET();
+		schedule();
 
 	return 0;
 }
@@ -204,7 +204,7 @@ static int serial_mpc8xx_getc(struct udevice *dev)
 
 	/* Wait for character to show up. */
 	while (in_be16(&rtx->rxbd.cbd_sc) & BD_SC_EMPTY)
-		WATCHDOG_RESET();
+		schedule();
 
 	/* the characters are read one by one,
 	 * use the rxindex to know the next char to deliver
diff --git a/drivers/serial/serial_mt7620.c b/drivers/serial/serial_mt7620.c
index 5c5264bc9629..b00e2f2c366d 100644
--- a/drivers/serial/serial_mt7620.c
+++ b/drivers/serial/serial_mt7620.c
@@ -102,7 +102,7 @@ static int mt7620_serial_putc(struct udevice *dev, const char ch)
 	writel(ch, &plat->regs->thr);
 
 	if (ch == '\n')
-		WATCHDOG_RESET();
+		schedule();
 
 	return 0;
 }
diff --git a/drivers/serial/serial_mtk.c b/drivers/serial/serial_mtk.c
index a84f39b3fa2e..22251c5f4ce4 100644
--- a/drivers/serial/serial_mtk.c
+++ b/drivers/serial/serial_mtk.c
@@ -141,7 +141,7 @@ static int _mtk_serial_putc(struct mtk_serial_priv *priv, const char ch)
 	writel(ch, &priv->regs->thr);
 
 	if (ch == '\n')
-		WATCHDOG_RESET();
+		schedule();
 
 	return 0;
 }
@@ -295,7 +295,7 @@ DECLARE_GLOBAL_DATA_PTR;
 		do { \
 			err = _mtk_serial_getc(&mtk_hsuart##port); \
 			if (err == -EAGAIN) \
-				WATCHDOG_RESET(); \
+				schedule(); \
 		} while (err == -EAGAIN); \
 		return err >= 0 ? err : 0; \
 	} \
diff --git a/drivers/serial/serial_mxc.c b/drivers/serial/serial_mxc.c
index 70a0e5e9197d..315c136ef872 100644
--- a/drivers/serial/serial_mxc.c
+++ b/drivers/serial/serial_mxc.c
@@ -200,7 +200,7 @@ static void mxc_serial_setbrg(void)
 static int mxc_serial_getc(void)
 {
 	while (readl(&mxc_base->ts) & UTS_RXEMPTY)
-		WATCHDOG_RESET();
+		schedule();
 	return (readl(&mxc_base->rxd) & URXD_RX_DATA); /* mask out status from upper word */
 }
 
@@ -214,7 +214,7 @@ static void mxc_serial_putc(const char c)
 
 	/* wait for transmitter to be ready */
 	while (!(readl(&mxc_base->ts) & UTS_TXEMPTY))
-		WATCHDOG_RESET();
+		schedule();
 }
 
 /* Test whether a character is in the RX buffer */
@@ -384,7 +384,7 @@ static inline void _debug_uart_putc(int ch)
 	struct mxc_uart *base = (struct mxc_uart *)CONFIG_VAL(DEBUG_UART_BASE);
 
 	while (!(readl(&base->ts) & UTS_TXEMPTY))
-		WATCHDOG_RESET();
+		schedule();
 
 	writel(ch, &base->txd);
 }
diff --git a/drivers/serial/serial_octeon_bootcmd.c b/drivers/serial/serial_octeon_bootcmd.c
index 4bcff77eb887..eff5c43e2a55 100644
--- a/drivers/serial/serial_octeon_bootcmd.c
+++ b/drivers/serial/serial_octeon_bootcmd.c
@@ -98,7 +98,7 @@ static int octeon_bootcmd_getc(struct udevice *dev)
 	}
 
 	while (!octeon_bootcmd_pending(dev, true)) {
-		WATCHDOG_RESET();
+		schedule();
 		/*
 		 * ToDo:
 		 * The original code calls octeon_board_poll() here. We may
diff --git a/drivers/serial/serial_octeon_pcie_console.c b/drivers/serial/serial_octeon_pcie_console.c
index c76e787d0308..b0eafe7ad866 100644
--- a/drivers/serial/serial_octeon_pcie_console.c
+++ b/drivers/serial/serial_octeon_pcie_console.c
@@ -134,7 +134,7 @@ static int octeon_pcie_console_read(struct udevice *dev,
 							cons_ptr->input_write_index,
 							cons_ptr->input_read_index))) {
 			mdelay(10);
-			WATCHDOG_RESET();
+			schedule();
 		}
 	}
 
@@ -210,7 +210,7 @@ static int octeon_pcie_console_write(struct udevice *dev,
 			if (flags & OCT_PCI_CON_FLAG_NONBLOCK)
 				goto done;
 
-			WATCHDOG_RESET();
+			schedule();
 			mdelay(10);	/* Delay if we are spinning */
 		} else {
 			bytes_written = -1;
diff --git a/drivers/serial/serial_pl01x.c b/drivers/serial/serial_pl01x.c
index 9b0d16f1645b..d3c3d3e2d188 100644
--- a/drivers/serial/serial_pl01x.c
+++ b/drivers/serial/serial_pl01x.c
@@ -70,7 +70,7 @@ static int pl01x_getc(struct pl01x_regs *regs)
 
 static int pl01x_tstc(struct pl01x_regs *regs)
 {
-	WATCHDOG_RESET();
+	schedule();
 	return !(readl(&regs->fr) & UART_PL01x_FR_RXFE);
 }
 
@@ -227,7 +227,7 @@ static int pl01x_serial_getc(void)
 		int ch = pl01x_getc(base_regs);
 
 		if (ch == -EAGAIN) {
-			WATCHDOG_RESET();
+			schedule();
 			continue;
 		}
 
@@ -247,9 +247,9 @@ static void pl01x_serial_setbrg(void)
 	 * crap in console
 	 */
 	while (!(readl(&base_regs->fr) & UART_PL01x_FR_TXFE))
-		WATCHDOG_RESET();
+		schedule();
 	while (readl(&base_regs->fr) & UART_PL01x_FR_BUSY)
-		WATCHDOG_RESET();
+		schedule();
 	pl01x_serial_init_baud(gd->baudrate);
 }
 
diff --git a/drivers/serial/serial_sifive.c b/drivers/serial/serial_sifive.c
index 4af1ff5060a9..c449f3fd02d9 100644
--- a/drivers/serial/serial_sifive.c
+++ b/drivers/serial/serial_sifive.c
@@ -225,7 +225,7 @@ static inline void _debug_uart_putc(int ch)
 			(struct uart_sifive *)CONFIG_VAL(DEBUG_UART_BASE);
 
 	while (_sifive_serial_putc(regs, ch) == -EAGAIN)
-		WATCHDOG_RESET();
+		schedule();
 }
 
 DEBUG_UART_FUNCS
diff --git a/drivers/serial/serial_zynq.c b/drivers/serial/serial_zynq.c
index 295337a81763..4b1818313a8b 100644
--- a/drivers/serial/serial_zynq.c
+++ b/drivers/serial/serial_zynq.c
@@ -307,7 +307,7 @@ static inline void _debug_uart_putc(int ch)
 	struct uart_zynq *regs = (struct uart_zynq *)CONFIG_VAL(DEBUG_UART_BASE);
 
 	while (_uart_zynq_serial_putc(regs, ch) == -EAGAIN)
-		WATCHDOG_RESET();
+		schedule();
 }
 
 DEBUG_UART_FUNCS
diff --git a/drivers/spi/mtk_snfi_spi.c b/drivers/spi/mtk_snfi_spi.c
index 65d0ce0981b6..5ea62776b4ec 100644
--- a/drivers/spi/mtk_snfi_spi.c
+++ b/drivers/spi/mtk_snfi_spi.c
@@ -202,7 +202,7 @@ static int mtk_snfi_exec_op(struct spi_slave *slave,
 	int addr_sh;
 	int ret;
 
-	WATCHDOG_RESET();
+	schedule();
 
 	ret = mtk_snfi_mac_reset(priv);
 	if (ret)
diff --git a/drivers/spi/octeon_spi.c b/drivers/spi/octeon_spi.c
index c2a7ee232b94..4bc38beaa68b 100644
--- a/drivers/spi/octeon_spi.c
+++ b/drivers/spi/octeon_spi.c
@@ -126,7 +126,7 @@ static void octeon_spi_wait_ready(struct udevice *dev)
 
 	do {
 		mpi_sts = readq(base + MPI_STS);
-		WATCHDOG_RESET();
+		schedule();
 	} while (mpi_sts & MPI_STS_BUSY);
 
 	debug("%s(%s)\n", __func__, dev->name);
diff --git a/drivers/spi/stm32_qspi.c b/drivers/spi/stm32_qspi.c
index ceba413727e9..90c207d51845 100644
--- a/drivers/spi/stm32_qspi.c
+++ b/drivers/spi/stm32_qspi.c
@@ -172,7 +172,7 @@ static int _stm32_qspi_wait_cmd(struct stm32_qspi_priv *priv,
 static void _stm32_qspi_read_fifo(u8 *val, void __iomem *addr)
 {
 	*val = readb(addr);
-	WATCHDOG_RESET();
+	schedule();
 }
 
 static void _stm32_qspi_write_fifo(u8 *val, void __iomem *addr)
diff --git a/drivers/timer/mpc83xx_timer.c b/drivers/timer/mpc83xx_timer.c
index 952293195f8d..410bf723d6b4 100644
--- a/drivers/timer/mpc83xx_timer.c
+++ b/drivers/timer/mpc83xx_timer.c
@@ -176,7 +176,7 @@ void timer_interrupt(struct pt_regs *regs)
 
 #if defined(CONFIG_WATCHDOG) || defined(CONFIG_HW_WATCHDOG)
 	if (CONFIG_SYS_WATCHDOG_FREQ && (priv->timestamp % (CONFIG_SYS_WATCHDOG_FREQ)) == 0)
-		WATCHDOG_RESET();
+		schedule();
 #endif    /* CONFIG_WATCHDOG || CONFIG_HW_WATCHDOG */
 
 #ifdef CONFIG_LED_STATUS
@@ -189,7 +189,7 @@ void wait_ticks(ulong ticks)
 	ulong end = get_ticks() + ticks;
 
 	while (end > get_ticks())
-		WATCHDOG_RESET();
+		schedule();
 }
 
 static u64 mpc83xx_timer_get_count(struct udevice *dev)
diff --git a/drivers/usb/eth/lan7x.h b/drivers/usb/eth/lan7x.h
index f71e8c7268c6..9480f4f6d153 100644
--- a/drivers/usb/eth/lan7x.h
+++ b/drivers/usb/eth/lan7x.h
@@ -157,7 +157,7 @@ static inline int lan7x_wait_for_bit(struct usb_device *udev,
 		}
 
 		udelay(1);
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	debug("%s: Timeout (reg=0x%x mask=%08x wait_set=%i)\n", prefix, reg,
@@ -199,7 +199,7 @@ static inline int lan7x_mdio_wait_for_bit(struct usb_device *udev,
 		}
 
 		udelay(1);
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	debug("%s: Timeout (reg=0x%x mask=%08x wait_set=%i)\n", prefix, reg,
diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c
index 388f73d1bc8d..b2ddd1ada8ba 100644
--- a/drivers/usb/gadget/f_acm.c
+++ b/drivers/usb/gadget/f_acm.c
@@ -579,7 +579,7 @@ static int acm_stdio_getc(struct stdio_dev *dev)
 
 	/* Wait for a character to arrive. */
 	while (!acm_stdio_tstc(dev))
-		WATCHDOG_RESET();
+		schedule();
 
 	buf_pop(&f_acm->rx_buf, &c, 1);
 
@@ -639,7 +639,7 @@ static int acm_stdio_start(struct stdio_dev *dev)
 		if (ctrlc())
 			return -ECANCELED;
 
-		WATCHDOG_RESET();
+		schedule();
 	}
 
 	return 0;
diff --git a/drivers/usb/gadget/f_sdp.c b/drivers/usb/gadget/f_sdp.c
index 0fa7230b992a..74548ab603bd 100644
--- a/drivers/usb/gadget/f_sdp.c
+++ b/drivers/usb/gadget/f_sdp.c
@@ -711,7 +711,7 @@ int sdp_init(int controller_index)
 			return 1;
 		}
 
-		WATCHDOG_RESET();
+		schedule();
 		usb_gadget_handle_interrupts(controller_index);
 	}
 
@@ -927,7 +927,7 @@ int spl_sdp_handle(int controller_index, struct spl_image_info *spl_image,
 		if (flag == SDP_EXIT)
 			return 0;
 
-		WATCHDOG_RESET();
+		schedule();
 		usb_gadget_handle_interrupts(controller_index);
 
 #ifdef CONFIG_SPL_BUILD
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index f033198a7c19..d30f2a0d13b4 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -641,7 +641,7 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
 		token = hc32_to_cpu(vtd->qt_token);
 		if (!(QT_TOKEN_GET_STATUS(token) & QT_TOKEN_STATUS_ACTIVE))
 			break;
-		WATCHDOG_RESET();
+		schedule();
 	} while (get_timer(ts) < timeout);
 	qhtoken = hc32_to_cpu(qh->qh_overlay.qt_token);
 
diff --git a/drivers/usb/musb-new/musb_uboot.c b/drivers/usb/musb-new/musb_uboot.c
index d186facc7e02..62c5e8e5fa4c 100644
--- a/drivers/usb/musb-new/musb_uboot.c
+++ b/drivers/usb/musb-new/musb_uboot.c
@@ -378,7 +378,7 @@ static struct musb *gadget;
 
 int usb_gadget_handle_interrupts(int index)
 {
-	WATCHDOG_RESET();
+	schedule();
 	if (!gadget || !gadget->isr)
 		return -EINVAL;
 
diff --git a/drivers/video/video_bmp.c b/drivers/video/video_bmp.c
index 4d2d961696aa..082895a50ec4 100644
--- a/drivers/video/video_bmp.c
+++ b/drivers/video/video_bmp.c
@@ -329,7 +329,7 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
 			byte_width = width;
 
 		for (i = 0; i < height; ++i) {
-			WATCHDOG_RESET();
+			schedule();
 			for (j = 0; j < width; j++) {
 				write_pix8(fb, bpix, eformat, palette, bmap);
 				bmap++;
@@ -342,7 +342,7 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
 	case 16:
 		if (IS_ENABLED(CONFIG_BMP_16BPP)) {
 			for (i = 0; i < height; ++i) {
-				WATCHDOG_RESET();
+				schedule();
 				for (j = 0; j < width; j++) {
 					*fb++ = *bmap++;
 					*fb++ = *bmap++;
diff --git a/env/common.c b/env/common.c
index f9226e0690d0..8dd05ff76d94 100644
--- a/env/common.c
+++ b/env/common.c
@@ -115,7 +115,7 @@ char *env_get(const char *name)
 	if (gd->flags & GD_FLG_ENV_READY) { /* after import into hashtable */
 		struct env_entry e, *ep;
 
-		WATCHDOG_RESET();
+		schedule();
 
 		e.key	= name;
 		e.data	= NULL;
diff --git a/fs/cramfs/uncompress.c b/fs/cramfs/uncompress.c
index 38e10e2e4422..0d071b69f4cc 100644
--- a/fs/cramfs/uncompress.c
+++ b/fs/cramfs/uncompress.c
@@ -21,6 +21,7 @@
  */
 
 #include <common.h>
+#include <cyclic.h>
 #include <malloc.h>
 #include <watchdog.h>
 #include <u-boot/zlib.h>
@@ -62,7 +63,7 @@ int cramfs_uncompress_init (void)
 	stream.avail_in = 0;
 
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
-	stream.outcb = (cb_func)watchdog_reset_func;
+	stream.outcb = (cb_func)cyclic_run;
 #else
 	stream.outcb = Z_NULL;
 #endif /* CONFIG_HW_WATCHDOG */
diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
index ef7b302725ca..49ba82ef9596 100644
--- a/fs/jffs2/jffs2_1pass.c
+++ b/fs/jffs2/jffs2_1pass.c
@@ -1523,7 +1523,7 @@ jffs2_1pass_build_lists(struct part_info * part)
 
 		/* Set buf_size to maximum length */
 		buf_size = DEFAULT_EMPTY_SCAN_SIZE;
-		WATCHDOG_RESET();
+		schedule();
 
 #ifdef CONFIG_JFFS2_SUMMARY
 		buf_len = sizeof(*sm);
diff --git a/include/linux/compat.h b/include/linux/compat.h
index 3d0acbd582ef..921e698f407c 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -2,6 +2,7 @@
 #define _LINUX_COMPAT_H_
 
 #include <console.h>
+#include <cyclic.h>
 #include <log.h>
 #include <malloc.h>
 
@@ -230,7 +231,6 @@ typedef unsigned long blkcnt_t;
 #define try_to_freeze(...)		0
 #define set_current_state(...)		do { } while (0)
 #define kthread_should_stop(...)	0
-#define schedule()			do { } while (0)
 
 #define setup_timer(timer, func, data) do {} while (0)
 #define del_timer_sync(timer) do {} while (0)
diff --git a/include/wait_bit.h b/include/wait_bit.h
index dcc5c4fd396c..f1d70aef873d 100644
--- a/include/wait_bit.h
+++ b/include/wait_bit.h
@@ -63,7 +63,7 @@ static inline int wait_for_bit_##sfx(const void *reg,			\
 		}							\
 									\
 		udelay(1);						\
-		WATCHDOG_RESET();					\
+		schedule();					\
 	}								\
 									\
 	debug("%s: Timeout (reg=%p mask=%x wait_set=%i)\n", __func__,	\
diff --git a/include/watchdog.h b/include/watchdog.h
index 0a9777edcbad..7a09346a0959 100644
--- a/include/watchdog.h
+++ b/include/watchdog.h
@@ -88,14 +88,6 @@ int init_func_watchdog_reset(void);
 	#endif /* CONFIG_WATCHDOG && !__ASSEMBLY__ */
 #endif /* CONFIG_HW_WATCHDOG */
 
-#if !defined(__ASSEMBLY__)
-/* Currently only needed for fs/cramfs/uncompress.c */
-static inline void watchdog_reset_func(void)
-{
-	WATCHDOG_RESET();
-}
-#endif
-
 /*
  * Prototypes from $(CPU)/cpu.c.
  */
diff --git a/lib/bzip2/bzlib.c b/lib/bzip2/bzlib.c
index 377b269b06db..bd589aa810c1 100644
--- a/lib/bzip2/bzlib.c
+++ b/lib/bzip2/bzlib.c
@@ -844,7 +844,7 @@ int BZ_API(BZ2_bzDecompress) ( bz_stream *strm )
 
    while (True) {
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
-	WATCHDOG_RESET();
+	schedule();
 #endif
       if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;
       if (s->state == BZ_X_OUTPUT) {
diff --git a/lib/bzip2/bzlib_decompress.c b/lib/bzip2/bzlib_decompress.c
index 4412b8a23eab..3b417d57b276 100644
--- a/lib/bzip2/bzlib_decompress.c
+++ b/lib/bzip2/bzlib_decompress.c
@@ -418,7 +418,7 @@ Int32 BZ2_decompress ( DState* s )
       while (True) {
 
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
-	WATCHDOG_RESET();
+	schedule();
 #endif
 	 if (nextSym == EOB) break;
 
@@ -503,7 +503,7 @@ Int32 BZ2_decompress ( DState* s )
 		     kk = MTFA_SIZE-1;
 		     for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
-			WATCHDOG_RESET();
+			schedule();
 #endif
 			for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
 			   s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
@@ -568,7 +568,7 @@ Int32 BZ2_decompress ( DState* s )
 	    while (i != s->origPtr);
 
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
-	WATCHDOG_RESET();
+	schedule();
 #endif
 	 s->tPos = s->origPtr;
 	 s->nblock_used = 0;
@@ -583,7 +583,7 @@ Int32 BZ2_decompress ( DState* s )
       } else {
 
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
-	WATCHDOG_RESET();
+	schedule();
 #endif
 	 /*-- compute the T^(-1) vector --*/
 	 for (i = 0; i < nblock; i++) {
diff --git a/lib/crc32.c b/lib/crc32.c
index 5a3127e03ada..aa94d70ef3e6 100644
--- a/lib/crc32.c
+++ b/lib/crc32.c
@@ -255,7 +255,7 @@ uint32_t crc32_wd(uint32_t crc, const unsigned char *buf, uInt len,
 			chunk = chunk_sz;
 		crc = crc32(crc, curr, chunk);
 		curr += chunk;
-		WATCHDOG_RESET ();
+		schedule();
 	}
 #else
 	crc = crc32(crc, buf, len);
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index 1233418e7738..8da3bb29aa72 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -828,7 +828,7 @@ void efi_timer_check(void)
 		efi_signal_event(evt);
 	}
 	efi_process_event_queue();
-	WATCHDOG_RESET();
+	schedule();
 }
 
 /**
@@ -2193,7 +2193,7 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
 
 	/* Give the payload some time to boot */
 	efi_set_watchdog(0);
-	WATCHDOG_RESET();
+	schedule();
 out:
 	if (IS_ENABLED(CONFIG_EFI_TCG2_PROTOCOL)) {
 		if (ret != EFI_SUCCESS)
diff --git a/lib/gunzip.c b/lib/gunzip.c
index a8e498d98d8a..932e3e8036d1 100644
--- a/lib/gunzip.c
+++ b/lib/gunzip.c
@@ -251,7 +251,7 @@ int gzwrite(unsigned char *src, int len,
 				puts("abort\n");
 				goto out;
 			}
-			WATCHDOG_RESET();
+			schedule();
 		} while (s.avail_out == 0);
 		/* done when inflate() says it's done */
 	} while (r != Z_STREAM_END);
diff --git a/lib/lzma/LzmaDec.c b/lib/lzma/LzmaDec.c
index 4f45f80fe264..341149f766b6 100644
--- a/lib/lzma/LzmaDec.c
+++ b/lib/lzma/LzmaDec.c
@@ -153,7 +153,7 @@ static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte
   UInt32 range = p->range;
   UInt32 code = p->code;
 
-  WATCHDOG_RESET();
+  schedule();
 
   do
   {
@@ -177,7 +177,7 @@ static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte
         state -= (state < 4) ? state : 3;
         symbol = 1;
 
-        WATCHDOG_RESET();
+        schedule();
 
         do { GET_BIT(prob + symbol, symbol) } while (symbol < 0x100);
       }
@@ -188,7 +188,7 @@ static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte
         state -= (state < 10) ? 3 : 6;
         symbol = 1;
 
-        WATCHDOG_RESET();
+        schedule();
 
         do
         {
@@ -321,7 +321,7 @@ static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte
               UInt32 mask = 1;
               unsigned i = 1;
 
-              WATCHDOG_RESET();
+              schedule();
 
               do
               {
@@ -335,7 +335,7 @@ static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte
           {
             numDirectBits -= kNumAlignBits;
 
-            WATCHDOG_RESET();
+            schedule();
 
             do
             {
@@ -409,7 +409,7 @@ static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte
           const Byte *lim = dest + curLen;
           dicPos += curLen;
 
-          WATCHDOG_RESET();
+          schedule();
 
           do
             *(dest) = (Byte)*(dest + src);
@@ -418,7 +418,7 @@ static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte
         else
         {
 
-          WATCHDOG_RESET();
+          schedule();
 
           do
           {
@@ -433,7 +433,7 @@ static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte
   }
   while (dicPos < limit && buf < bufLimit);
 
-  WATCHDOG_RESET();
+  schedule();
 
   NORMALIZE;
   p->buf = buf;
diff --git a/lib/lzma/LzmaTools.c b/lib/lzma/LzmaTools.c
index af88900d315f..55f64cd28908 100644
--- a/lib/lzma/LzmaTools.c
+++ b/lib/lzma/LzmaTools.c
@@ -104,7 +104,7 @@ int lzmaBuffToBuffDecompress(unsigned char *outStream, SizeT *uncompressedSize,
     /* Decompress */
     outProcessed = min(outSizeFull, *uncompressedSize);
 
-    WATCHDOG_RESET();
+    schedule();
 
     res = LzmaDecode(
         outStream, &outProcessed,
diff --git a/lib/md5.c b/lib/md5.c
index 9d34465564e3..1636ab936619 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -304,7 +304,7 @@ md5_wd(const unsigned char *input, unsigned int len, unsigned char output[16],
 			chunk = chunk_sz;
 		MD5Update(&context, curr, chunk);
 		curr += chunk;
-		WATCHDOG_RESET ();
+		schedule();
 	}
 #else
 	MD5Update(&context, input, len);
diff --git a/lib/sha1.c b/lib/sha1.c
index e5e42bc9fe38..8d0740789349 100644
--- a/lib/sha1.c
+++ b/lib/sha1.c
@@ -344,7 +344,7 @@ void sha1_csum_wd(const unsigned char *input, unsigned int ilen,
 			chunk = chunk_sz;
 		sha1_update (&ctx, curr, chunk);
 		curr += chunk;
-		WATCHDOG_RESET ();
+		schedule();
 	}
 #else
 	sha1_update (&ctx, input, ilen);
diff --git a/lib/sha256.c b/lib/sha256.c
index 50b0b511834f..4d26aea1c8ce 100644
--- a/lib/sha256.c
+++ b/lib/sha256.c
@@ -293,7 +293,7 @@ void sha256_csum_wd(const unsigned char *input, unsigned int ilen,
 			chunk = chunk_sz;
 		sha256_update(&ctx, curr, chunk);
 		curr += chunk;
-		WATCHDOG_RESET();
+		schedule();
 	}
 #else
 	sha256_update(&ctx, input, ilen);
diff --git a/lib/sha512.c b/lib/sha512.c
index a421f249ba2c..fbe8d5f5bfe9 100644
--- a/lib/sha512.c
+++ b/lib/sha512.c
@@ -309,7 +309,7 @@ void sha384_csum_wd(const unsigned char *input, unsigned int ilen,
 			chunk = chunk_sz;
 		sha384_update(&ctx, curr, chunk);
 		curr += chunk;
-		WATCHDOG_RESET();
+		schedule();
 	}
 #else
 	sha384_update(&ctx, input, ilen);
@@ -372,7 +372,7 @@ void sha512_csum_wd(const unsigned char *input, unsigned int ilen,
 			chunk = chunk_sz;
 		sha512_update(&ctx, curr, chunk);
 		curr += chunk;
-		WATCHDOG_RESET();
+		schedule();
 	}
 #else
 	sha512_update(&ctx, input, ilen);
diff --git a/lib/time.c b/lib/time.c
index bbf191f67323..f3aaf472d103 100644
--- a/lib/time.c
+++ b/lib/time.c
@@ -198,7 +198,7 @@ void udelay(unsigned long usec)
 	ulong kv;
 
 	do {
-		WATCHDOG_RESET();
+		schedule();
 		kv = usec > CONFIG_WD_PERIOD ? CONFIG_WD_PERIOD : usec;
 		__udelay(kv);
 		usec -= kv;
diff --git a/lib/zlib/inflate.c b/lib/zlib/inflate.c
index 6411c4793252..30dfe1559955 100644
--- a/lib/zlib/inflate.c
+++ b/lib/zlib/inflate.c
@@ -25,7 +25,7 @@ int ZEXPORT inflateReset(z_streamp strm)
     state->hold = 0;
     state->bits = 0;
     state->lencode = state->distcode = state->next = state->codes;
-    WATCHDOG_RESET();
+    schedule();
     Tracev((stderr, "inflate: reset\n"));
     return Z_OK;
 }
@@ -543,7 +543,7 @@ int ZEXPORT inflate(z_streamp strm, int flush)
             strm->adler = state->check = adler32(0L, Z_NULL, 0);
             state->mode = TYPE;
         case TYPE:
-	    WATCHDOG_RESET();
+	    schedule();
             if (flush == Z_BLOCK) goto inf_leave;
         case TYPEDO:
             if (state->last) {
@@ -721,7 +721,7 @@ int ZEXPORT inflate(z_streamp strm, int flush)
             Tracev((stderr, "inflate:       codes ok\n"));
             state->mode = LEN;
         case LEN:
-	    WATCHDOG_RESET();
+	    schedule();
             if (have >= 6 && left >= 258) {
                 RESTORE();
                 inflate_fast(strm, out);
@@ -933,7 +933,7 @@ int ZEXPORT inflateEnd(z_streamp strm)
         return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
     if (state->window != Z_NULL) {
-	WATCHDOG_RESET();
+	schedule();
 	ZFREE(strm, state->window);
     }
     ZFREE(strm, strm->state);
diff --git a/net/net.c b/net/net.c
index 81905f631592..f9d11c08d2e9 100644
--- a/net/net.c
+++ b/net/net.c
@@ -559,7 +559,7 @@ restart:
 	 *	someone sets `net_state' to a state that terminates.
 	 */
 	for (;;) {
-		WATCHDOG_RESET();
+		schedule();
 		if (arp_timeout_check() > 0)
 			time_start = get_timer(0);
 
diff --git a/post/cpu/mpc83xx/ecc.c b/post/cpu/mpc83xx/ecc.c
index f88eff8998f9..edd74115672b 100644
--- a/post/cpu/mpc83xx/ecc.c
+++ b/post/cpu/mpc83xx/ecc.c
@@ -73,7 +73,7 @@ int ecc_post_test(int flags)
 	for (addr = (u64*)CONFIG_SYS_POST_ECC_START_ADDR, errbit=0;
 	     addr < (u64*)CONFIG_SYS_POST_ECC_STOP_ADDR; addr++, errbit++ ) {
 
-		WATCHDOG_RESET();
+		schedule();
 
 		ecc_clear(ddr);
 
diff --git a/post/drivers/memory.c b/post/drivers/memory.c
index 4fb9355d6036..d249942af068 100644
--- a/post/drivers/memory.c
+++ b/post/drivers/memory.c
@@ -279,7 +279,7 @@ static int memory_post_test1(unsigned long start,
 	for (i = 0; i < size / sizeof (ulong); i++) {
 		mem[i] = val;
 		if (i % 1024 == 0)
-			WATCHDOG_RESET();
+			schedule();
 	}
 
 	for (i = 0; i < size / sizeof (ulong) && !ret; i++) {
@@ -292,7 +292,7 @@ static int memory_post_test1(unsigned long start,
 			break;
 		}
 		if (i % 1024 == 0)
-			WATCHDOG_RESET();
+			schedule();
 	}
 
 	return ret;
@@ -308,7 +308,7 @@ static int memory_post_test2(unsigned long start, unsigned long size)
 	for (i = 0; i < size / sizeof (ulong); i++) {
 		mem[i] = 1 << (i % 32);
 		if (i % 1024 == 0)
-			WATCHDOG_RESET();
+			schedule();
 	}
 
 	for (i = 0; i < size / sizeof (ulong) && !ret; i++) {
@@ -321,7 +321,7 @@ static int memory_post_test2(unsigned long start, unsigned long size)
 			break;
 		}
 		if (i % 1024 == 0)
-			WATCHDOG_RESET();
+			schedule();
 	}
 
 	return ret;
@@ -337,7 +337,7 @@ static int memory_post_test3(unsigned long start, unsigned long size)
 	for (i = 0; i < size / sizeof (ulong); i++) {
 		mem[i] = i;
 		if (i % 1024 == 0)
-			WATCHDOG_RESET();
+			schedule();
 	}
 
 	for (i = 0; i < size / sizeof (ulong) && !ret; i++) {
@@ -350,7 +350,7 @@ static int memory_post_test3(unsigned long start, unsigned long size)
 			break;
 		}
 		if (i % 1024 == 0)
-			WATCHDOG_RESET();
+			schedule();
 	}
 
 	return ret;
@@ -366,7 +366,7 @@ static int memory_post_test4(unsigned long start, unsigned long size)
 	for (i = 0; i < size / sizeof (ulong); i++) {
 		mem[i] = ~i;
 		if (i % 1024 == 0)
-			WATCHDOG_RESET();
+			schedule();
 	}
 
 	for (i = 0; i < size / sizeof (ulong) && !ret; i++) {
@@ -379,7 +379,7 @@ static int memory_post_test4(unsigned long start, unsigned long size)
 			break;
 		}
 		if (i % 1024 == 0)
-			WATCHDOG_RESET();
+			schedule();
 	}
 
 	return ret;
@@ -390,15 +390,15 @@ static int memory_post_test_lines(unsigned long start, unsigned long size)
 	int ret = 0;
 
 	ret = memory_post_dataline((unsigned long long *)start);
-	WATCHDOG_RESET();
+	schedule();
 	if (!ret)
 		ret = memory_post_addrline((ulong *)start, (ulong *)start,
 				size);
-	WATCHDOG_RESET();
+	schedule();
 	if (!ret)
 		ret = memory_post_addrline((ulong *)(start+size-8),
 				(ulong *)start, size);
-	WATCHDOG_RESET();
+	schedule();
 
 	return ret;
 }
@@ -408,25 +408,25 @@ static int memory_post_test_patterns(unsigned long start, unsigned long size)
 	int ret = 0;
 
 	ret = memory_post_test1(start, size, 0x00000000);
-	WATCHDOG_RESET();
+	schedule();
 	if (!ret)
 		ret = memory_post_test1(start, size, 0xffffffff);
-	WATCHDOG_RESET();
+	schedule();
 	if (!ret)
 		ret = memory_post_test1(start, size, 0x55555555);
-	WATCHDOG_RESET();
+	schedule();
 	if (!ret)
 		ret = memory_post_test1(start, size, 0xaaaaaaaa);
-	WATCHDOG_RESET();
+	schedule();
 	if (!ret)
 		ret = memory_post_test2(start, size);
-	WATCHDOG_RESET();
+	schedule();
 	if (!ret)
 		ret = memory_post_test3(start, size);
-	WATCHDOG_RESET();
+	schedule();
 	if (!ret)
 		ret = memory_post_test4(start, size);
-	WATCHDOG_RESET();
+	schedule();
 
 	return ret;
 }
diff --git a/post/lib_powerpc/cpu.c b/post/lib_powerpc/cpu.c
index 8506fd6b7152..1d4710734291 100644
--- a/post/lib_powerpc/cpu.c
+++ b/post/lib_powerpc/cpu.c
@@ -61,7 +61,7 @@ int cpu_post_test (int flags)
 	int ic = icache_status();
 	int ret = 0;
 
-	WATCHDOG_RESET();
+	schedule();
 	if (ic)
 		icache_disable();
 
@@ -73,7 +73,7 @@ int cpu_post_test (int flags)
 		ret = cpu_post_test_two ();
 	if (ret == 0)
 		ret = cpu_post_test_twox ();
-	WATCHDOG_RESET();
+	schedule();
 	if (ret == 0)
 		ret = cpu_post_test_three ();
 	if (ret == 0)
@@ -82,7 +82,7 @@ int cpu_post_test (int flags)
 		ret = cpu_post_test_threei ();
 	if (ret == 0)
 		ret = cpu_post_test_andi ();
-	WATCHDOG_RESET();
+	schedule();
 	if (ret == 0)
 		ret = cpu_post_test_srawi ();
 	if (ret == 0)
@@ -91,7 +91,7 @@ int cpu_post_test (int flags)
 		ret = cpu_post_test_rlwinm ();
 	if (ret == 0)
 		ret = cpu_post_test_rlwimi ();
-	WATCHDOG_RESET();
+	schedule();
 	if (ret == 0)
 		ret = cpu_post_test_store ();
 	if (ret == 0)
@@ -100,20 +100,20 @@ int cpu_post_test (int flags)
 		ret = cpu_post_test_cr ();
 	if (ret == 0)
 		ret = cpu_post_test_b ();
-	WATCHDOG_RESET();
+	schedule();
 	if (ret == 0)
 		ret = cpu_post_test_multi ();
-	WATCHDOG_RESET();
+	schedule();
 	if (ret == 0)
 		ret = cpu_post_test_string ();
 	if (ret == 0)
 		ret = cpu_post_test_complex ();
-	WATCHDOG_RESET();
+	schedule();
 
 	if (ic)
 		icache_enable();
 
-	WATCHDOG_RESET();
+	schedule();
 
 	return ret;
 }
diff --git a/post/lib_powerpc/fpu/fpu.c b/post/lib_powerpc/fpu/fpu.c
index 0de76ce0514f..bd65f623d500 100644
--- a/post/lib_powerpc/fpu/fpu.c
+++ b/post/lib_powerpc/fpu/fpu.c
@@ -43,7 +43,7 @@ int fpu_post_test (int flags)
 
 	int ret = 0;
 
-	WATCHDOG_RESET ();
+	schedule();
 
 	if (!fpu)
 		fpu_enable ();
@@ -66,7 +66,7 @@ int fpu_post_test (int flags)
 	if (!fpu)
 		fpu_disable ();
 
-	WATCHDOG_RESET ();
+	schedule();
 
 	return ret;
 }
diff --git a/post/post.c b/post/post.c
index d67c43ed8ae8..b81425d8cf81 100644
--- a/post/post.c
+++ b/post/post.c
@@ -245,7 +245,7 @@ static int post_run_single(struct post_test *test,
 {
 	if ((flags & test_flags & POST_ALWAYS) &&
 		(flags & test_flags & POST_MEM)) {
-		WATCHDOG_RESET();
+		schedule();
 
 		if (!(flags & POST_REBOOT)) {
 			if ((test_flags & POST_REBOOT) &&
@@ -350,7 +350,7 @@ int post_run(char *name, int flags)
 		}
 
 		if (i < post_list_size) {
-			WATCHDOG_RESET();
+			schedule();
 			return post_run_single(post_list + i,
 						test_flags[i],
 						flags, i);
diff --git a/test/common/cyclic.c b/test/common/cyclic.c
index a5c4e78989b9..6e758e89dbdb 100644
--- a/test/common/cyclic.c
+++ b/test/common/cyclic.c
@@ -27,7 +27,7 @@ static int dm_test_cyclic_running(struct unit_test_state *uts)
 					 NULL));
 
 	/* Execute all registered cyclic functions */
-	WATCHDOG_RESET();
+	schedule();
 	ut_asserteq(true, cyclic_active);
 
 	return 0;
diff --git a/test/dm/wdt.c b/test/dm/wdt.c
index 535f00a87403..653d7b1c8b36 100644
--- a/test/dm/wdt.c
+++ b/test/dm/wdt.c
@@ -4,6 +4,7 @@
  */
 
 #include <common.h>
+#include <cyclic.h>
 #include <dm.h>
 #include <wdt.h>
 #include <asm/gpio.h>
@@ -130,7 +131,7 @@ static int dm_test_wdt_watchdog_reset(struct unit_test_state *uts)
 	/* Neither device should be "started", so watchdog_reset() should be a no-op. */
 	reset_count = state->wdt.reset_count;
 	val = sandbox_gpio_get_value(gpio, offset);
-	watchdog_reset();
+	cyclic_run();
 	ut_asserteq(reset_count, state->wdt.reset_count);
 	ut_asserteq(val, sandbox_gpio_get_value(gpio, offset));
 
@@ -140,19 +141,19 @@ static int dm_test_wdt_watchdog_reset(struct unit_test_state *uts)
 
 	/* Make sure both devices have just been pinged. */
 	timer_test_add_offset(100);
-	watchdog_reset();
+	cyclic_run();
 	reset_count = state->wdt.reset_count;
 	val = sandbox_gpio_get_value(gpio, offset);
 
 	/* The gpio watchdog should be pinged, the sandbox one not. */
 	timer_test_add_offset(30);
-	watchdog_reset();
+	cyclic_run();
 	ut_asserteq(reset_count, state->wdt.reset_count);
 	ut_asserteq(!val, sandbox_gpio_get_value(gpio, offset));
 
 	/* After another ~30ms, both devices should get pinged. */
 	timer_test_add_offset(30);
-	watchdog_reset();
+	cyclic_run();
 	ut_asserteq(reset_count + 1, state->wdt.reset_count);
 	ut_asserteq(val, sandbox_gpio_get_value(gpio, offset));
 
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 4/6] watchdog: Get rid of ASSEMBLY hacks
  2022-09-17  8:14 [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Stefan Roese
                   ` (2 preceding siblings ...)
  2022-09-17  8:14 ` [PATCH v2 3/6] cyclic: Use schedule() instead of WATCHDOG_RESET() Stefan Roese
@ 2022-09-17  8:14 ` Stefan Roese
  2022-09-17  8:14 ` [PATCH v2 5/6] watchdog: Remove WATCHDOG_RESET macro Stefan Roese
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Stefan Roese @ 2022-09-17  8:14 UTC (permalink / raw)
  To: u-boot; +Cc: trini, sjg, rasmus.villemoes

Only one occurance of WATCHDOG_RESET is left in one assembler file.
This patch changes this occurance to a direct call to watchdog_reset
and then removes all the ASSEMBLY ifdef'ery in watchdog.h, as it's not
needed any more to clean this mess a bit up.

Signed-off-by: Stefan Roese <sr@denx.de>
---
v1:
- No change

 arch/powerpc/lib/ticks.S |  5 ++--
 include/watchdog.h       | 50 +++++++++++++---------------------------
 2 files changed, 19 insertions(+), 36 deletions(-)

diff --git a/arch/powerpc/lib/ticks.S b/arch/powerpc/lib/ticks.S
index c487f938fa8d..8647d77cc9ad 100644
--- a/arch/powerpc/lib/ticks.S
+++ b/arch/powerpc/lib/ticks.S
@@ -9,7 +9,6 @@
 #include <ppc_asm.tmpl>
 #include <ppc_defs.h>
 #include <config.h>
-#include <watchdog.h>
 
 /*
  * unsigned long long get_ticks(void);
@@ -42,7 +41,9 @@ wait_ticks:
 	addc    r14, r4, r14	/* Compute end time lower */
 	addze	r15, r3		/*     and end time upper */
 
-	WATCHDOG_RESET		/* Trigger watchdog, if needed */
+#if defined(CONFIG_WATCHDOG) || defined(CONFIG_HW_WATCHDOG)
+	bl	schedule	/* Trigger watchdog, if needed */
+#endif
 1:	bl	get_ticks	/* Get current time */
 	subfc	r4, r4, r14	/* Subtract current time from end time */
 	subfe.	r3, r3, r15
diff --git a/include/watchdog.h b/include/watchdog.h
index 7a09346a0959..1365b154a295 100644
--- a/include/watchdog.h
+++ b/include/watchdog.h
@@ -38,54 +38,36 @@ int init_func_watchdog_reset(void);
  * Hardware watchdog
  */
 #ifdef CONFIG_HW_WATCHDOG
-	#if defined(__ASSEMBLY__)
-		#define WATCHDOG_RESET bl hw_watchdog_reset
-	#else
-		extern void hw_watchdog_reset(void);
+	extern void hw_watchdog_reset(void);
 
-		#define WATCHDOG_RESET hw_watchdog_reset
-	#endif /* __ASSEMBLY__ */
+	#define WATCHDOG_RESET hw_watchdog_reset
 #else
 	/*
 	 * Maybe a software watchdog?
 	 */
 	#if defined(CONFIG_WATCHDOG)
-		#if defined(__ASSEMBLY__)
-			/* Don't require the watchdog to be enabled in SPL */
-			#if defined(CONFIG_SPL_BUILD) &&		\
-				!defined(CONFIG_SPL_WATCHDOG)
-				#define WATCHDOG_RESET /*XXX DO_NOT_DEL_THIS_COMMENT*/
-			#else
-				#define WATCHDOG_RESET bl watchdog_reset
-			#endif
+		/* Don't require the watchdog to be enabled in SPL */
+		#if defined(CONFIG_SPL_BUILD) &&		\
+			!defined(CONFIG_SPL_WATCHDOG)
+			#define WATCHDOG_RESET() { \
+				cyclic_run(); \
+			}
 		#else
-			/* Don't require the watchdog to be enabled in SPL */
-			#if defined(CONFIG_SPL_BUILD) &&		\
-				!defined(CONFIG_SPL_WATCHDOG)
-				#define WATCHDOG_RESET() { \
-					cyclic_run(); \
-				}
-			#else
-				extern void watchdog_reset(void);
+			extern void watchdog_reset(void);
 
-				#define WATCHDOG_RESET() { \
-					watchdog_reset(); \
-					cyclic_run(); \
-				}
-			#endif
+			#define WATCHDOG_RESET() { \
+				watchdog_reset(); \
+				cyclic_run(); \
+			}
 		#endif
 	#else
 		/*
 		 * No hardware or software watchdog.
 		 */
-		#if defined(__ASSEMBLY__)
-			#define WATCHDOG_RESET /*XXX DO_NOT_DEL_THIS_COMMENT*/
-		#else
-			#define WATCHDOG_RESET() { \
-				cyclic_run(); \
+		#define WATCHDOG_RESET() { \
+			cyclic_run(); \
 			}
-		#endif /* __ASSEMBLY__ */
-	#endif /* CONFIG_WATCHDOG && !__ASSEMBLY__ */
+	#endif /* CONFIG_WATCHDOG */
 #endif /* CONFIG_HW_WATCHDOG */
 
 /*
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 5/6] watchdog: Remove WATCHDOG_RESET macro
  2022-09-17  8:14 [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Stefan Roese
                   ` (3 preceding siblings ...)
  2022-09-17  8:14 ` [PATCH v2 4/6] watchdog: Get rid of ASSEMBLY hacks Stefan Roese
@ 2022-09-17  8:14 ` Stefan Roese
  2022-09-17  8:14 ` [PATCH v2 6/6] watchdog: Further cleanup Stefan Roese
  2022-09-17 14:08 ` [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Tom Rini
  6 siblings, 0 replies; 8+ messages in thread
From: Stefan Roese @ 2022-09-17  8:14 UTC (permalink / raw)
  To: u-boot; +Cc: trini, sjg, rasmus.villemoes

Now that we've globally replaced all WATCHDOG_RESET occurances, let's
remove the ugly macro itself in the header.

Signed-off-by: Stefan Roese <sr@denx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v1:
- Add Simon's RB tag

 include/watchdog.h | 36 ------------------------------------
 1 file changed, 36 deletions(-)

diff --git a/include/watchdog.h b/include/watchdog.h
index 1365b154a295..91506d3327a8 100644
--- a/include/watchdog.h
+++ b/include/watchdog.h
@@ -34,42 +34,6 @@ int init_func_watchdog_reset(void);
 #  error "Configuration error: CONFIG_HW_WATCHDOG and CONFIG_WATCHDOG can't be used together."
 #endif
 
-/*
- * Hardware watchdog
- */
-#ifdef CONFIG_HW_WATCHDOG
-	extern void hw_watchdog_reset(void);
-
-	#define WATCHDOG_RESET hw_watchdog_reset
-#else
-	/*
-	 * Maybe a software watchdog?
-	 */
-	#if defined(CONFIG_WATCHDOG)
-		/* Don't require the watchdog to be enabled in SPL */
-		#if defined(CONFIG_SPL_BUILD) &&		\
-			!defined(CONFIG_SPL_WATCHDOG)
-			#define WATCHDOG_RESET() { \
-				cyclic_run(); \
-			}
-		#else
-			extern void watchdog_reset(void);
-
-			#define WATCHDOG_RESET() { \
-				watchdog_reset(); \
-				cyclic_run(); \
-			}
-		#endif
-	#else
-		/*
-		 * No hardware or software watchdog.
-		 */
-		#define WATCHDOG_RESET() { \
-			cyclic_run(); \
-			}
-	#endif /* CONFIG_WATCHDOG */
-#endif /* CONFIG_HW_WATCHDOG */
-
 /*
  * Prototypes from $(CPU)/cpu.c.
  */
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 6/6] watchdog: Further cleanup
  2022-09-17  8:14 [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Stefan Roese
                   ` (4 preceding siblings ...)
  2022-09-17  8:14 ` [PATCH v2 5/6] watchdog: Remove WATCHDOG_RESET macro Stefan Roese
@ 2022-09-17  8:14 ` Stefan Roese
  2022-09-17 14:08 ` [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Tom Rini
  6 siblings, 0 replies; 8+ messages in thread
From: Stefan Roese @ 2022-09-17  8:14 UTC (permalink / raw)
  To: u-boot; +Cc: trini, sjg, rasmus.villemoes

Remove some now unused macros and #ifdef's.

Signed-off-by: Stefan Roese <sr@denx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v1:
- Add Simon's RB tag

 include/watchdog.h | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/include/watchdog.h b/include/watchdog.h
index 91506d3327a8..ac5f11e376fa 100644
--- a/include/watchdog.h
+++ b/include/watchdog.h
@@ -10,7 +10,6 @@
 #ifndef _WATCHDOG_H_
 #define _WATCHDOG_H_
 
-#if !defined(__ASSEMBLY__)
 #include <cyclic.h>
 
 /*
@@ -20,7 +19,6 @@
  * and the legacy arch/<arch>/board.c code.
  */
 int init_func_watchdog_reset(void);
-#endif
 
 #if defined(CONFIG_WATCHDOG) || defined(CONFIG_HW_WATCHDOG)
 #define INIT_FUNC_WATCHDOG_INIT	init_func_watchdog_init,
@@ -38,11 +36,11 @@ int init_func_watchdog_reset(void);
  * Prototypes from $(CPU)/cpu.c.
  */
 
-#if (defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)) && !defined(__ASSEMBLY__)
+#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
 	void hw_watchdog_init(void);
 #endif
 
-#if defined(CONFIG_MPC85xx) && !defined(__ASSEMBLY__)
+#if defined(CONFIG_MPC85xx)
 	void init_85xx_watchdog(void);
 #endif
 #endif /* _WATCHDOG_H_ */
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure
  2022-09-17  8:14 [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Stefan Roese
                   ` (5 preceding siblings ...)
  2022-09-17  8:14 ` [PATCH v2 6/6] watchdog: Further cleanup Stefan Roese
@ 2022-09-17 14:08 ` Tom Rini
  6 siblings, 0 replies; 8+ messages in thread
From: Tom Rini @ 2022-09-17 14:08 UTC (permalink / raw)
  To: Stefan Roese; +Cc: u-boot, sjg, rasmus.villemoes

[-- Attachment #1: Type: text/plain, Size: 1039 bytes --]

On Sat, Sep 17, 2022 at 10:14:44AM +0200, Stefan Roese wrote:

> This patchset migrates the watchdog triggering (WATCHDOG_RESET calls)
> to the newly introduced cyclic execution framework. For this, the
> watchdog driver now registers a cyclic execution function for each
> WDT device that needs to get serviced. Additionally the cyclic IF is
> a bit extended to also support the CONFIG_HW_WATCHDOG users. It might
> make sense to deprecate this HW_WATCHDOG usage at some point.
> 
> Please note that this migration work is based on the cyclic execution
> infrastructure, which I posted in the last few weeks. So these cyclic
> patches need to be applied for this migration to work.
> 
> Some further cleanup and improvements are possible after this patch.
> E.g. Heinrich mentioned that the WATCHDOG_RESET call locations need to
> get improved / changed in some places.

For the series:
Tested-by: Tom Rini <trini@konsulko.com> [am335x_evm, mx6cuboxi, rpi_3,
dra7xx_evm, pine64_plus, am65x_evm, j721e_evm]

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-09-17 14:08 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-17  8:14 [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Stefan Roese
2022-09-17  8:14 ` [PATCH v2 1/6] watchdog: Integrate watchdog triggering into the cyclic framework Stefan Roese
2022-09-17  8:14 ` [PATCH v2 2/6] cyclic: Introduce schedule() function Stefan Roese
2022-09-17  8:14 ` [PATCH v2 3/6] cyclic: Use schedule() instead of WATCHDOG_RESET() Stefan Roese
2022-09-17  8:14 ` [PATCH v2 4/6] watchdog: Get rid of ASSEMBLY hacks Stefan Roese
2022-09-17  8:14 ` [PATCH v2 5/6] watchdog: Remove WATCHDOG_RESET macro Stefan Roese
2022-09-17  8:14 ` [PATCH v2 6/6] watchdog: Further cleanup Stefan Roese
2022-09-17 14:08 ` [PATCH v2 0/6] Migrate watchdog reset to cyclic infrastructure Tom Rini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.