From: Denis Mukhin <[email protected]> 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 <[email protected]> --- 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

