watchdog: Allow to use CONFIG_WDT without starting watchdog
authorPali Rohár <pali@kernel.org>
Tue, 9 Mar 2021 13:26:56 +0000 (14:26 +0100)
committerStefan Roese <sr@denx.de>
Tue, 6 Apr 2021 08:47:32 +0000 (10:47 +0200)
In some cases it is useful to compile support for U-Boot command 'wdt'
without starting HW watchdog in early U-Boot phase. For example when the
user want to start the watchdog only on demand by some boot script.

This change adds a new compile option WATCHDOG_AUTOSTART to control whether
U-Boot should automatically start the watchdog during init phase or not.

This option is enabled by default as it was the default behavior prior
introducing this new change. When compiling U-Boot users can decide to turn
this option off.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
drivers/watchdog/Kconfig
drivers/watchdog/wdt-uclass.c

index 602ccbe..aa76a8f 100644 (file)
@@ -9,6 +9,19 @@ config WATCHDOG
          this option if you want to service enabled watchdog by U-Boot. Disable
          this option if you want U-Boot to start watchdog but never service it.
 
+config WATCHDOG_AUTOSTART
+       bool "Automatically start watchdog timer"
+       depends on WDT
+       default y
+       help
+         Automatically start watchdog timer and start servicing it during
+         init phase. Enabled by default. Disable this option if you want
+         to compile U-Boot with CONFIG_WDT support but do not want to
+         activate watchdog, like when CONFIG_WDT option is disabled. You
+         would be able to start watchdog manually by 'wdt' command. Useful
+         when you want to have support for 'wdt' command but do not want
+         to have watchdog enabled by default.
+
 config WATCHDOG_TIMEOUT_MSECS
        int "Watchdog timeout in msec"
        default 128000 if ARCH_MX25 || ARCH_MX31 || ARCH_MX5 || ARCH_MX6
index 7500b3e..0603ffb 100644 (file)
@@ -51,6 +51,11 @@ int initr_watchdog(void)
                                                    4 * reset_period) / 4;
        }
 
+       if (!CONFIG_IS_ENABLED(WATCHDOG_AUTOSTART)) {
+               printf("WDT:   Not starting\n");
+               return 0;
+       }
+
        ret = wdt_start(gd->watchdog_dev, timeout * 1000, 0);
        if (ret != 0) {
                printf("WDT:   Failed to start\n");