Your subject is 87 columns long, better to squeeze it a bit. On 05-09-22, 19:16, Clément Péron wrote: > devm_pm_opp_set_regulators() doesn't enable regulator, which make > regulator framework switching it off during regulator_late_cleanup(). This isn't the normal behavior as it works for everyone at the moment. You need to explain what special you are doing here, because of which you are reaching such a situation. i.e. you are disabling some code that uses GPU ? Please specify exact code so others can reproduce it as well. > Call dev_pm_opp_set_opp() with the recommend OPP in > panfrost_devfreq_init() to enable the regulator and avoid any switch off > by regulator_late_cleanup(). The regulator is already enabled I think at this point by the bootloader. What you are doing here is syncing the state of the hardware with the software, which would disallow disabling of the resource unnecessarily. > Suggested-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx> > Signed-off-by: Clément Péron <peron.clem@xxxxxxxxx> > --- > drivers/gpu/drm/panfrost/panfrost_devfreq.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/panfrost/panfrost_devfreq.c > index 5110cd9b2425..67b242407156 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c > +++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c > @@ -131,6 +131,14 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev) > return PTR_ERR(opp); > > panfrost_devfreq_profile.initial_freq = cur_freq; > + > + /* Setup and enable regulator */ Similarly here, explain why this is required to be done. > + ret = dev_pm_opp_set_opp(dev, opp); > + if (ret) { > + DRM_DEV_ERROR(dev, "Couldn't set recommended OPP\n"); > + return ret; > + } > + > dev_pm_opp_put(opp); Do this before checking if (ret), so the resource can be freed all the time. > > /* > -- > 2.34.1 -- viresh