summaryrefslogtreecommitdiff
path: root/drivers/sysreset
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2019-08-19 09:22:57 -0400
committerTom Rini <trini@konsulko.com>2019-08-19 09:22:57 -0400
commita2ca54ff52146f2bbf52d87bf4e121e8e15e9e07 (patch)
tree4e85487bc3da5aa7a918ca7bb2f8fffb2c8c0d20 /drivers/sysreset
parent0ed2e2d825ac70d99ef89e3bb745979a22e2972e (diff)
parentb8050511c6ee4ab60ef4248dff42aff187696249 (diff)
Merge tag 'u-boot-rockchip-20190819' of https://gitlab.denx.de/u-boot/custodians/u-boot-rockchip
- Add ROC-RK3399-PC board support - Move CONFIG_SPI_FLASH_GIGADEVICE and CONFIG_CMD_USB_MASS_STORAGE to Kconfig - using SYSRESET_POWER_OFF for poweroff (Note that patch for rk8xx pmic is droped for it can not pass Travis build) - fix ofnode_get_name() assert
Diffstat (limited to 'drivers/sysreset')
-rw-r--r--drivers/sysreset/Kconfig10
-rw-r--r--drivers/sysreset/sysreset-uclass.c18
-rw-r--r--drivers/sysreset/sysreset_psci.c2
-rw-r--r--drivers/sysreset/sysreset_sandbox.c4
4 files changed, 31 insertions, 3 deletions
diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
index 90c41ab44d7..f565ae03109 100644
--- a/drivers/sysreset/Kconfig
+++ b/drivers/sysreset/Kconfig
@@ -33,6 +33,16 @@ config TPL_SYSRESET
if SYSRESET
+if CMD_POWEROFF
+
+config SYSRESET_CMD_POWEROFF
+ bool "sysreset implementation of the poweroff command"
+ help
+ This should be selected by the appropriate PMIC driver if
+ the poweroff command is enabled.
+
+endif
+
config SYSRESET_GPIO
bool "Enable support for GPIO reset driver"
select DM_GPIO
diff --git a/drivers/sysreset/sysreset-uclass.c b/drivers/sysreset/sysreset-uclass.c
index ad831c703a9..39202588ae4 100644
--- a/drivers/sysreset/sysreset-uclass.c
+++ b/drivers/sysreset/sysreset-uclass.c
@@ -118,6 +118,24 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
return 0;
}
+#if IS_ENABLED(CONFIG_SYSRESET_CMD_POWEROFF)
+int do_poweroff(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int ret;
+
+ puts("poweroff ...\n");
+ mdelay(100);
+
+ ret = sysreset_walk(SYSRESET_POWER_OFF);
+
+ if (ret == -EINPROGRESS)
+ mdelay(1000);
+
+ /*NOTREACHED when power off*/
+ return CMD_RET_FAILURE;
+}
+#endif
+
static int sysreset_post_bind(struct udevice *dev)
{
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
diff --git a/drivers/sysreset/sysreset_psci.c b/drivers/sysreset/sysreset_psci.c
index de2ec8aeb1e..c7907b3226d 100644
--- a/drivers/sysreset/sysreset_psci.c
+++ b/drivers/sysreset/sysreset_psci.c
@@ -18,7 +18,7 @@ static int psci_sysreset_request(struct udevice *dev, enum sysreset_t type)
case SYSRESET_COLD:
function_id = PSCI_0_2_FN_SYSTEM_RESET;
break;
- case SYSRESET_POWER:
+ case SYSRESET_POWER_OFF:
function_id = PSCI_0_2_FN_SYSTEM_OFF;
break;
default:
diff --git a/drivers/sysreset/sysreset_sandbox.c b/drivers/sysreset/sysreset_sandbox.c
index 7dfd89460f0..69c22a70008 100644
--- a/drivers/sysreset/sysreset_sandbox.c
+++ b/drivers/sysreset/sysreset_sandbox.c
@@ -57,13 +57,13 @@ static int sandbox_sysreset_request(struct udevice *dev, enum sysreset_t type)
case SYSRESET_COLD:
state->last_sysreset = type;
break;
- case SYSRESET_POWER:
+ case SYSRESET_POWER_OFF:
state->last_sysreset = type;
if (!state->sysreset_allowed[type])
return -EACCES;
sandbox_exit();
break;
- case SYSRESET_POWER_OFF:
+ case SYSRESET_POWER:
if (!state->sysreset_allowed[type])
return -EACCES;
sandbox_exit();