[PATCH 2/8] Revert "power: regulator: Trigger probe of regulators which are always-on or boot-on"

Svyatoslav Ryhel clamor95 at gmail.com
Sun Dec 1 16:05:53 CET 2024


нд, 1 груд. 2024 р. о 16:42 Simon Glass <sjg at chromium.org> пише:
>
> Unfortunately this commit causes a problem on nyan-big:
>
>    U-Boot SPL 2024.10-rc6-00632-g51c4679d2f84 (Nov 30 2024 - 13:28:40 -0700)
>    Trying to boot from RAM
>
>    U-Boot 2024.10-rc6-00632-g51c4679d2f84 (Nov 30 2024 - 13:28:40 -0700)
>
>    SoC: tegra124
>    Reset cause: POR
>    Model: Acer Chromebook 13 CB5-311
>    Board: Google/NVIDIA Nyan-big, ID: -2
>    DRAM:  2 GiB
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    Unknown PLL id 14
>    failed to read ID1 register: -121
>    failed to read ID: -121
>    initcall failed at call 810029c8 (err=-121: Remote I/O error)
>    ### ERROR ### Please RESET the board ###
>
> This reverts commit 51c4679d2f848e91b4a0cf867a426ffe5bb094b2.
>
> Tweak a few tests also, so they continue to pass.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
>  drivers/power/regulator/regulator-uclass.c | 22 +++++++---------------
>  test/dm/regulator.c                        |  6 ++++--
>  2 files changed, 11 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/power/regulator/regulator-uclass.c b/drivers/power/regulator/regulator-uclass.c
> index decd0802c84..3da7c09ef14 100644
> --- a/drivers/power/regulator/regulator-uclass.c
> +++ b/drivers/power/regulator/regulator-uclass.c
> @@ -433,8 +433,6 @@ static int regulator_post_bind(struct udevice *dev)
>         const char *property = "regulator-name";
>
>         uc_pdata = dev_get_uclass_plat(dev);
> -       uc_pdata->always_on = dev_read_bool(dev, "regulator-always-on");
> -       uc_pdata->boot_on = dev_read_bool(dev, "regulator-boot-on");
>
>         /* Regulator's mandatory constraint */
>         uc_pdata->name = dev_read_string(dev, property);
> @@ -446,21 +444,13 @@ static int regulator_post_bind(struct udevice *dev)
>                         return -EINVAL;
>         }
>
> -       if (!regulator_name_is_unique(dev, uc_pdata->name)) {
> -               debug("'%s' of dev: '%s', has nonunique value: '%s\n",
> -                     property, dev->name, uc_pdata->name);
> -               return -EINVAL;
> -       }
> +       if (regulator_name_is_unique(dev, uc_pdata->name))
> +               return 0;
>
> -       /*
> -        * In case the regulator has regulator-always-on or
> -        * regulator-boot-on DT property, trigger probe() to
> -        * configure its default state during startup.
> -        */
> -       if (uc_pdata->always_on || uc_pdata->boot_on)
> -               dev_or_flags(dev, DM_FLAG_PROBE_AFTER_BIND);
> +       debug("'%s' of dev: '%s', has nonunique value: '%s\n",
> +             property, dev->name, uc_pdata->name);
>
> -       return 0;
> +       return -EINVAL;
>  }
>
>  static int regulator_pre_probe(struct udevice *dev)
> @@ -483,6 +473,8 @@ static int regulator_pre_probe(struct udevice *dev)
>                                                 -ENODATA);
>         uc_pdata->max_uA = dev_read_u32_default(dev, "regulator-max-microamp",
>                                                 -ENODATA);
> +       uc_pdata->always_on = dev_read_bool(dev, "regulator-always-on");
> +       uc_pdata->boot_on = dev_read_bool(dev, "regulator-boot-on");
>         uc_pdata->ramp_delay = dev_read_u32_default(dev, "regulator-ramp-delay",
>                                                     0);
>         uc_pdata->force_off = dev_read_bool(dev, "regulator-force-boot-off");
> diff --git a/test/dm/regulator.c b/test/dm/regulator.c
> index 449748ad52f..59cdd6a3e98 100644
> --- a/test/dm/regulator.c
> +++ b/test/dm/regulator.c
> @@ -186,7 +186,8 @@ int dm_test_power_regulator_set_enable_if_allowed(struct unit_test_state *uts)
>
>         /* Get BUCK1 - always on regulator */
>         platname = regulator_names[BUCK1][PLATNAME];
> -       ut_asserteq(-EALREADY, regulator_autoset_by_name(platname, &dev_autoset));
> +       ut_asserteq(-EALREADY,
> +                   regulator_autoset_by_name(platname, &dev_autoset));
>         ut_assertok(regulator_get_by_platname(platname, &dev));
>
>         /* Try disabling always-on regulator */
> @@ -288,7 +289,8 @@ static int dm_test_power_regulator_autoset(struct unit_test_state *uts)
>          * Expected output state: uV=1200000; uA=200000; output enabled
>          */
>         platname = regulator_names[BUCK1][PLATNAME];
> -       ut_asserteq(-EALREADY, regulator_autoset_by_name(platname, &dev_autoset));
> +       ut_asserteq(-EALREADY,
> +                   regulator_autoset_by_name(platname, &dev_autoset));
>
>         /* Check, that the returned device is proper */
>         ut_assertok(regulator_get_by_platname(platname, &dev));
> --
> 2.43.0
>

It seems that I have found a fix for this issue. Simon, please test
this commit https://gitlab.com/clamor-s/u-boot/-/commit/6149722aa48f84d9ea037ae990141a231106244e


More information about the U-Boot mailing list