[PATCH v3 04/11] imx8mp: power-domain: Don't power off pd_bus
Marek Vasut
marex at denx.de
Fri Mar 22 17:39:11 CET 2024
On 3/22/24 5:55 AM, Sumit Garg wrote:
Hi,
>>>>> I think if people are concerned about power consumption then it
>>>>> should be implemented properly in U-Boot to remove all the DT based
>>>>> devices before passing on control to the next stage.
>>>>
>>>> I would expect imx8mp_hsiomix_off() to be called either on 'usb stop' or
>>>> just before Linux boots (esp. at that point), so if you do not power off
>>>> the bus domain before booting Linux, you may hand over a device which
>>>> was not fully power cycled.
>>>
>>> Unfortunately that's the current situation I see. IMO, the better
>>> solution would be to just remove all the DT devices before passing on
>>> control to Linux. That should automatically power off devices.
>>
>> Doesn't CONFIG_DM_DEVICE_REMOVE=y do something like that already ?
>
> I just did simple experiment via following diff:
>
> diff --git a/drivers/power/domain/imx8mp-hsiomix.c
> b/drivers/power/domain/imx8mp-hsiomix.c
> index 6188a04c45e..0ddcd39923a 100644
> --- a/drivers/power/domain/imx8mp-hsiomix.c
> +++ b/drivers/power/domain/imx8mp-hsiomix.c
> @@ -101,6 +101,7 @@ static int imx8mp_hsiomix_set(struct power_domain
> *power_domain, bool power_on)
> if (gpr_reg0_bits)
> setbits_le32(priv->base + GPR_REG0, gpr_reg0_bits);
> } else {
> + while(1);
> if (gpr_reg0_bits)
> clrbits_le32(priv->base + GPR_REG0, gpr_reg0_bits);
>
> The boot doesn't hang suggesting that CONFIG_DM_DEVICE_REMOVE=y isn't
> effective to remove any DT devices. It can for sure be another
> followup series to make it effective.
That's odd. Please try and edit drivers/core/device-remove.c , look up
device_remove() at the end , and see if the remove is being called on
the hsiomix device . You might need to add some sort of printf() there,
but that's where the removal happens.
The removal before boot is I think called from drivers/core/root.c
dm_remove_devices_flags(), which itself is called from
arch/arm/lib/bootm.c announce_and_cleanup() .
More information about the U-Boot
mailing list