[U-Boot] [PATCH 1/3] sysreset: switch to using SYSRESET_POWER_OFF for poweroff

Patrick DELAUNAY patrick.delaunay at st.com
Thu May 16 07:44:19 UTC 2019


Hi Urja,

> 
> It seems that SYSRESET_POWER_OFF was added recently, and all previous
> code used SYSRESET_POWER for poweroff. SYSRESET_POWER is supposed
> to be a PMIC-level power cycle, not a poweroff.
> 
> Signed-off-by: Urja Rannikko <urjaman at gmail.com>
> ---
> Note: I didnt touch the test/dm/sysreset.c code yet, mostly because I wanted to
> get feedback on this first and that i'd need to understand the tests properly to do
> that (and i havent used them before at all).
> ---
>  arch/arm/mach-stm32mp/cmd_poweroff.c | 2 +-
>  arch/sandbox/cpu/state.c             | 2 +-
>  drivers/power/pmic/stpmic1.c         | 2 +-
>  drivers/sysreset/sysreset_psci.c     | 2 +-
>  drivers/sysreset/sysreset_sandbox.c  | 4 ++--
>  5 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/arm/mach-stm32mp/cmd_poweroff.c b/arch/arm/mach-
> stm32mp/cmd_poweroff.c
> index f54dd1daf2..62347425a0 100644
> --- a/arch/arm/mach-stm32mp/cmd_poweroff.c
> +++ b/arch/arm/mach-stm32mp/cmd_poweroff.c
> @@ -14,7 +14,7 @@ int do_poweroff(cmd_tbl_t *cmdtp, int flag, int argc, char *
> const argv[])
>  	puts("poweroff ...\n");
>  	mdelay(100);
> 
> -	ret = sysreset_walk(SYSRESET_POWER);
> +	ret = sysreset_walk(SYSRESET_POWER_OFF);
> 
>  	if (ret == -EINPROGRESS)
>  		mdelay(1000);
> diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c index
> d3b9c05985..dee5fde4f7 100644
> --- a/arch/sandbox/cpu/state.c
> +++ b/arch/sandbox/cpu/state.c
> @@ -355,7 +355,7 @@ void state_reset_for_test(struct sandbox_state *state)  {
>  	/* No reset yet, so mark it as such. Always allow power reset */
>  	state->last_sysreset = SYSRESET_COUNT;
> -	state->sysreset_allowed[SYSRESET_POWER] = true;
> +	state->sysreset_allowed[SYSRESET_POWER_OFF] = true;
> 
>  	memset(&state->wdt, '\0', sizeof(state->wdt));
>  	memset(state->spi, '\0', sizeof(state->spi)); diff --git
> a/drivers/power/pmic/stpmic1.c b/drivers/power/pmic/stpmic1.c index
> 65296c5fc3..eb735f4fe3 100644
> --- a/drivers/power/pmic/stpmic1.c
> +++ b/drivers/power/pmic/stpmic1.c
> @@ -221,7 +221,7 @@ static int stpmic1_sysreset_request(struct udevice *dev,
> enum sysreset_t type)
>  	struct udevice *pmic_dev;
>  	int ret;
> 
> -	if (type != SYSRESET_POWER)
> +	if (type != SYSRESET_POWER_OFF)
>  		return -EPROTONOSUPPORT;

In fact in the next part of the code, we are supporting 
only SYSRESET_POWER (reset with PMIC1 switch OFF and restart) 
and not SYSRESET_POWER_OFF....

because Power Cycle if RREQ_EN=1

I think you need to remove the update on this file for your patch and
I will modified this function is to support both mode....

>  	ret = uclass_get_device_by_driver(UCLASS_PMIC,
> diff --git a/drivers/sysreset/sysreset_psci.c b/drivers/sysreset/sysreset_psci.c
> index de2ec8aeb1..c7907b3226 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 38e2a7e241..8bc9f4b4cc 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;
>  	default:
> --
> 2.21.0

Regards.

Patrick


More information about the U-Boot mailing list