[PATCH v3 1/6] reset: Allow per-board reset type
dmukhin at ford.com
dmukhin at ford.com
Fri May 29 05:48:34 CEST 2026
From: Denis Mukhin <dmukhin at ford.com>
Some prototype boards may not have (temporarily) all required reset
types supported (e.g. only warm reset supported).
Add a Kconfig choice to select the board-specific default reset type
used by the `reset` command, allowing it to work on such boards.
Keep cold reset as the default.
Signed-off-by: Denis Mukhin <dmukhin at ford.com>
---
Changes since v2:
- n/a
---
drivers/sysreset/Kconfig | 31 ++++++++++++++++++++++++++++++
drivers/sysreset/sysreset-uclass.c | 19 +++++++++++++++++-
2 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
index 90f740f51d42..2584c2b203e5 100644
--- a/drivers/sysreset/Kconfig
+++ b/drivers/sysreset/Kconfig
@@ -57,6 +57,37 @@ config SYSRESET_CMD_RESET_ARGS
additional arguments for implementing arch/board specific
functionality.
+if SYSRESET_CMD_RESET
+choice
+ prompt "Default reset type for reset command"
+ default SYSRESET_CMD_RESET_DEFAULT_COLD
+ help
+ Select the default reset type used by the reset command when no
+ explicit reset type is requested.
+
+config SYSRESET_CMD_RESET_DEFAULT_WARM
+ bool "Warm reset"
+ help
+ Reset CPU while keeping GPIOs active.
+
+config SYSRESET_CMD_RESET_DEFAULT_COLD
+ bool "Cold reset"
+ help
+ Reset CPU and GPIOs.
+
+config SYSRESET_CMD_RESET_DEFAULT_POWER
+ bool "Power reset"
+ help
+ Reset PMIC by removing and restoring power.
+
+config SYSRESET_CMD_RESET_DEFAULT_POWER_OFF
+ bool "Power off"
+ help
+ Turn off power.
+
+endchoice
+endif
+
if CMD_POWEROFF
config SYSRESET_CMD_POWEROFF
diff --git a/drivers/sysreset/sysreset-uclass.c b/drivers/sysreset/sysreset-uclass.c
index f25e09e9cd06..d2fddb470bf1 100644
--- a/drivers/sysreset/sysreset-uclass.c
+++ b/drivers/sysreset/sysreset-uclass.c
@@ -150,9 +150,26 @@ void reset_cpu(void)
}
#if IS_ENABLED(CONFIG_SYSRESET_CMD_RESET)
+static enum sysreset_t sysreset_get_default_type(void)
+{
+ if (IS_ENABLED(CONFIG_SYSRESET_CMD_RESET_DEFAULT_WARM))
+ return SYSRESET_WARM;
+
+ if (IS_ENABLED(CONFIG_SYSRESET_CMD_RESET_DEFAULT_COLD))
+ return SYSRESET_COLD;
+
+ if (IS_ENABLED(CONFIG_SYSRESET_CMD_RESET_DEFAULT_POWER))
+ return SYSRESET_POWER;
+
+ if (IS_ENABLED(CONFIG_SYSRESET_CMD_RESET_DEFAULT_POWER_OFF))
+ return SYSRESET_POWER_OFF;
+
+ return SYSRESET_COLD;
+}
+
int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
{
- enum sysreset_t reset_type = SYSRESET_COLD;
+ enum sysreset_t reset_type = sysreset_get_default_type();
if (argc > 2)
return CMD_RET_USAGE;
--
2.54.0
More information about the U-Boot
mailing list