[PATCH v3 11/14] mach-snapdragon: fixup power-domains
Sumit Garg
sumit.garg at linaro.org
Tue Mar 19 14:51:22 CET 2024
On Tue, 19 Mar 2024 at 17:52, Caleb Connolly <caleb.connolly at linaro.org> wrote:
>
> We don't support the RPM(h)PD power domains in U-Boot, and we don't need
> to - the necessary resources are on, and we aren't going to enter any
> low power modes.
>
> We could try using a no-op device, but this requires adding a compatible
> for every platform, and just pollutes the driver model. So instead let's
> just remove every "power-domains" property that references the RPM(h)pd
> power controller. This takes <1ms as we're using OF_LIVE.
Similar reasoning here as on patch #10, it would be better if we can
handle it via a no-op device.
-Sumit
>
> Of note, this only applies to drivers which are loading post-relocation.
> Drivers loaded pre-reloc that reference the rpm(h)pd still need
> DM_FLAG_DEFAULT_PD_CTRL_OFF in their flags.
>
> Signed-off-by: Caleb Connolly <caleb.connolly at linaro.org>
> ---
> arch/arm/mach-snapdragon/of_fixup.c | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/arch/arm/mach-snapdragon/of_fixup.c b/arch/arm/mach-snapdragon/of_fixup.c
> index 6810c8617cc0..49f1fc1948f3 100644
> --- a/arch/arm/mach-snapdragon/of_fixup.c
> +++ b/arch/arm/mach-snapdragon/of_fixup.c
> @@ -21,8 +21,9 @@
> #include <dm/of_access.h>
> #include <dm/of.h>
> #include <fdt_support.h>
> #include <linux/errno.h>
> +#include <stdlib.h>
>
> /* U-Boot only supports USB high-speed mode on Qualcomm platforms with DWC3
> * USB controllers. Rather than requiring source level DT changes, we fix up
> * DT here. This improves compatibility with upstream DT and simplifies the
> @@ -108,8 +109,39 @@ static void fixup_usb_nodes(void)
> log_warning("Failed to fixup node %s: %d\n", glue_np->name, ret);
> }
> }
>
> +/* Remove all references to the rpmhpd device */
> +static void fixup_power_domains(void)
> +{
> + struct device_node *pd = NULL, *np = NULL;
> + struct property *prop;
> + const __be32 *val;
> +
> + /* All Qualcomm platforms name the rpm(h)pd "power-controller" */
> + for_each_of_allnodes(pd) {
> + if (pd->name && !strcmp("power-controller", pd->name))
> + break;
> + }
> +
> + /* Sanity check that this is indeed a power domain controller */
> + if (!of_find_property(pd, "#power-domain-cells", NULL)) {
> + log_err("Found power-controller but it doesn't have #power-domain-cells\n");
> + return;
> + }
> +
> + /* Remove all references to the power domain controller */
> + for_each_of_allnodes(np) {
> + if (!(prop = of_find_property(np, "power-domains", NULL)))
> + continue;
> +
> + val = prop->value;
> + if (val[0] == cpu_to_fdt32(pd->phandle))
> + of_remove_property(np, prop);
> + }
> +}
> +
> void qcom_of_fixup_nodes(void)
> {
> fixup_usb_nodes();
> + fixup_power_domains();
> }
>
> --
> 2.44.0
>
More information about the U-Boot
mailing list