[PATCH 3/4] power: axp: Avoid do_poweroff conflict with sysreset

Samuel Holland samuel at sholland.org
Mon Oct 25 03:09:41 CEST 2021


On 10/24/21 7:38 PM, Andre Przywara wrote:
> On Sun, 22 Aug 2021 18:18:05 -0500
> Samuel Holland <samuel at sholland.org> wrote:
> 
> Hi Samuel,
> 
>> The sysreset uclass has an option to provide the do_poweroff() function.
>> When that option is enabled, the AXP power drivers should not provide
>> their own definition.
>>
>> For the AXP305, which is paired with 64-bit systems where TF-A provides
>> PSCI, there is another possible conflict with the PSCI firmware driver.
>> This driver can be enabled even if CONFIG_PSCI_RESET is disabled, so
>> make sure to use the right symbol in the condition.
>>
>> Signed-off-by: Samuel Holland <samuel at sholland.org>
> 
> Not a big fan of adding #ifdef's, but it looks like these
> implementations of do_poweroff() can eventually be removed, when
> SYSRESET works everywhere? Or is there a reason we cannot select
> SYSRESET later on, and would still need do_poweroff from those AXP
> drivers directly?

Yes, the intention is to remove these function as soon as SYSRESET is enabled
everywhere. We should be able to do that once the watchdog driver is hooked up.

I will send a rebased patch 4.

Regards,
Samuel

> Anyway:
> Reviewed-by: Andre Przywara <andre.przywara at arm.com>
> 
> Cheers,
> Andre
> 
>> ---
>>
>>  drivers/power/axp152.c | 2 ++
>>  drivers/power/axp209.c | 2 ++
>>  drivers/power/axp221.c | 2 ++
>>  drivers/power/axp305.c | 2 +-
>>  drivers/power/axp809.c | 2 ++
>>  drivers/power/axp818.c | 2 ++
>>  6 files changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/power/axp152.c b/drivers/power/axp152.c
>> index d6e36125c12..a93987c1538 100644
>> --- a/drivers/power/axp152.c
>> +++ b/drivers/power/axp152.c
>> @@ -79,6 +79,7 @@ int axp_init(void)
>>  	return 0;
>>  }
>>  
>> +#if !IS_ENABLED(CONFIG_SYSRESET_CMD_POWEROFF)
>>  int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  {
>>  	pmic_bus_write(AXP152_SHUTDOWN, AXP152_POWEROFF);
>> @@ -89,3 +90,4 @@ int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  	/* not reached */
>>  	return 0;
>>  }
>> +#endif
>> diff --git a/drivers/power/axp209.c b/drivers/power/axp209.c
>> index ade531940b9..3447b9f0113 100644
>> --- a/drivers/power/axp209.c
>> +++ b/drivers/power/axp209.c
>> @@ -230,6 +230,7 @@ int axp_init(void)
>>  	return 0;
>>  }
>>  
>> +#if !IS_ENABLED(CONFIG_SYSRESET_CMD_POWEROFF)
>>  int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  {
>>  	pmic_bus_write(AXP209_SHUTDOWN, AXP209_POWEROFF);
>> @@ -240,3 +241,4 @@ int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  	/* not reached */
>>  	return 0;
>>  }
>> +#endif
>> diff --git a/drivers/power/axp221.c b/drivers/power/axp221.c
>> index 3446fe7365d..d251c314b98 100644
>> --- a/drivers/power/axp221.c
>> +++ b/drivers/power/axp221.c
>> @@ -264,6 +264,7 @@ int axp_get_sid(unsigned int *sid)
>>  	return 0;
>>  }
>>  
>> +#if !IS_ENABLED(CONFIG_SYSRESET_CMD_POWEROFF)
>>  int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  {
>>  	pmic_bus_write(AXP221_SHUTDOWN, AXP221_SHUTDOWN_POWEROFF);
>> @@ -274,3 +275,4 @@ int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  	/* not reached */
>>  	return 0;
>>  }
>> +#endif
>> diff --git a/drivers/power/axp305.c b/drivers/power/axp305.c
>> index 0191e4d427e..049ef07f746 100644
>> --- a/drivers/power/axp305.c
>> +++ b/drivers/power/axp305.c
>> @@ -69,7 +69,7 @@ int axp_init(void)
>>  	return ret;
>>  }
>>  
>> -#ifndef CONFIG_PSCI_RESET
>> +#if !CONFIG_IS_ENABLED(ARM_PSCI_FW) && !IS_ENABLED(CONFIG_SYSRESET_CMD_POWEROFF)
>>  int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  {
>>  	pmic_bus_write(AXP305_SHUTDOWN, AXP305_POWEROFF);
>> diff --git a/drivers/power/axp809.c b/drivers/power/axp809.c
>> index 6323492b66d..49584e502fe 100644
>> --- a/drivers/power/axp809.c
>> +++ b/drivers/power/axp809.c
>> @@ -220,6 +220,7 @@ int axp_init(void)
>>  	return pmic_bus_init();
>>  }
>>  
>> +#if !IS_ENABLED(CONFIG_SYSRESET_CMD_POWEROFF)
>>  int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  {
>>  	pmic_bus_write(AXP809_SHUTDOWN, AXP809_SHUTDOWN_POWEROFF);
>> @@ -230,3 +231,4 @@ int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  	/* not reached */
>>  	return 0;
>>  }
>> +#endif
>> diff --git a/drivers/power/axp818.c b/drivers/power/axp818.c
>> index 0531707c8aa..0960786f4a7 100644
>> --- a/drivers/power/axp818.c
>> +++ b/drivers/power/axp818.c
>> @@ -256,6 +256,7 @@ int axp_init(void)
>>  	return 0;
>>  }
>>  
>> +#if !IS_ENABLED(CONFIG_SYSRESET_CMD_POWEROFF)
>>  int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  {
>>  	pmic_bus_write(AXP818_SHUTDOWN, AXP818_SHUTDOWN_POWEROFF);
>> @@ -266,3 +267,4 @@ int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>>  	/* not reached */
>>  	return 0;
>>  }
>> +#endif
> 



More information about the U-Boot mailing list