Re: [PATCH] regulator: qcom_rpm: Fix circular deferral regression

From: Krzysztof Kozlowski
Date: Fri Sep 09 2022 - 12:51:51 EST


On 09/09/2022 13:25, Linus Walleij wrote:
> On recent kernels, the PM8058 L16 (or any other PM8058 LDO-regulator)
> does not come up if they are supplied by an SMPS-regulator. This
> is not very strange since the regulators are registered in a long
> array and the L-regulators are registered before the S-regulators,
> and if an L-regulator defers, it will never get around to registering
> the S-regulator that it needs.
>
> See arch/arm/boot/dts/qcom-apq8060-dragonboard.dts:
>
> pm8058-regulators {
> (...)
> vdd_l13_l16-supply = <&pm8058_s4>;
> (...)
>
> Ooops.
>
> Fix this by moving the PM8058 S-regulators first in the array.
>
> Do the same for the PM8901 S-regulators (though this is currently
> not causing any problems with out device trees) so that the pattern
> of registration order is the same on all PMnnnn chips.
>
> Fixes: 087a1b5cdd55 ("regulator: qcom: Rework to single platform device")
> Cc: stable@xxxxxxxxxxxxxxx
> Cc: Andy Gross <agross@xxxxxxxxxx>
> Cc: Bjorn Andersson <andersson@xxxxxxxxxx>
> Cc: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxx>
> Cc: linux-arm-msm@xxxxxxxxxxxxxxx
> Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
> ---
> drivers/regulator/qcom_rpm-regulator.c | 24 ++++++++++++------------
> 1 file changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/regulator/qcom_rpm-regulator.c b/drivers/regulator/qcom_rpm-regulator.c
> index 7f9d66ac37ff..3c41b71a1f52 100644
> --- a/drivers/regulator/qcom_rpm-regulator.c
> +++ b/drivers/regulator/qcom_rpm-regulator.c
> @@ -802,6 +802,12 @@ static const struct rpm_regulator_data rpm_pm8018_regulators[] = {
> };
>
> static const struct rpm_regulator_data rpm_pm8058_regulators[] = {
> + { "s0", QCOM_RPM_PM8058_SMPS0, &pm8058_smps, "vdd_s0" },
> + { "s1", QCOM_RPM_PM8058_SMPS1, &pm8058_smps, "vdd_s1" },
> + { "s2", QCOM_RPM_PM8058_SMPS2, &pm8058_smps, "vdd_s2" },
> + { "s3", QCOM_RPM_PM8058_SMPS3, &pm8058_smps, "vdd_s3" },
> + { "s4", QCOM_RPM_PM8058_SMPS4, &pm8058_smps, "vdd_s4" },
> +

Would be great to have here a comment like "S-regulators (being used as
supplies) must come before the rest".

Same also in second table.

We like to re-order some things from time to time and no one would think
about checking Git history for any issues with it.

Best regards,
Krzysztof