summaryrefslogtreecommitdiff
path: root/drivers/sysreset
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/sysreset')
-rw-r--r--drivers/sysreset/sysreset-uclass.c11
-rw-r--r--drivers/sysreset/sysreset_psci.c8
2 files changed, 12 insertions, 7 deletions
diff --git a/drivers/sysreset/sysreset-uclass.c b/drivers/sysreset/sysreset-uclass.c
index 9512f6881fc..279b087d16d 100644
--- a/drivers/sysreset/sysreset-uclass.c
+++ b/drivers/sysreset/sysreset-uclass.c
@@ -122,10 +122,19 @@ void reset_cpu(void)
#if IS_ENABLED(CONFIG_SYSRESET_CMD_RESET)
int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
{
+ enum sysreset_t reset_type = SYSRESET_COLD;
+
+ if (argc > 2)
+ return CMD_RET_USAGE;
+
+ if (argc == 2 && argv[1][0] == '-' && argv[1][1] == 'w') {
+ reset_type = SYSRESET_WARM;
+ }
+
printf("resetting ...\n");
mdelay(100);
- sysreset_walk_halt(SYSRESET_COLD);
+ sysreset_walk_halt(reset_type);
return 0;
}
diff --git a/drivers/sysreset/sysreset_psci.c b/drivers/sysreset/sysreset_psci.c
index c7907b3226d..83ecbcb9d2c 100644
--- a/drivers/sysreset/sysreset_psci.c
+++ b/drivers/sysreset/sysreset_psci.c
@@ -11,22 +11,18 @@
static int psci_sysreset_request(struct udevice *dev, enum sysreset_t type)
{
- unsigned long function_id;
-
switch (type) {
case SYSRESET_WARM:
case SYSRESET_COLD:
- function_id = PSCI_0_2_FN_SYSTEM_RESET;
+ psci_sys_reset(type);
break;
case SYSRESET_POWER_OFF:
- function_id = PSCI_0_2_FN_SYSTEM_OFF;
+ psci_sys_poweroff();
break;
default:
return -ENOSYS;
}
- invoke_psci_fn(function_id, 0, 0, 0);
-
return -EINPROGRESS;
}