Messages in this thread | | | Date | Thu, 27 Aug 2020 15:31:04 +0530 | From | Viresh Kumar <> | Subject | Re: [PATCH v2] opp: Power on (virtual) power domains managed by the OPP core |
| |
On 26-08-20, 11:33, Stephan Gerhold wrote: > diff --git a/drivers/opp/core.c b/drivers/opp/core.c > index 8b3c3986f589..7e53a7b94c59 100644 > --- a/drivers/opp/core.c > +++ b/drivers/opp/core.c > @@ -17,6 +17,7 @@ > #include <linux/device.h> > #include <linux/export.h> > #include <linux/pm_domain.h> > +#include <linux/pm_runtime.h> > #include <linux/regulator/consumer.h> > > #include "opp.h" > @@ -1964,10 +1965,13 @@ static void _opp_detach_genpd(struct opp_table *opp_table) > if (!opp_table->genpd_virt_devs[index]) > continue; > > + if (opp_table->genpd_virt_links && opp_table->genpd_virt_links[index]) > + device_link_del(opp_table->genpd_virt_links[index]); > dev_pm_domain_detach(opp_table->genpd_virt_devs[index], false); > opp_table->genpd_virt_devs[index] = NULL; > } > > + kfree(opp_table->genpd_virt_links); > kfree(opp_table->genpd_virt_devs); > opp_table->genpd_virt_devs = NULL; > } > @@ -1999,8 +2003,10 @@ struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, > { > struct opp_table *opp_table; > struct device *virt_dev; > - int index = 0, ret = -EINVAL; > + struct device_link *dev_link; > + int index = 0, ret = -EINVAL, num_devs; > const char **name = names; > + u32 flags; > > opp_table = dev_pm_opp_get_opp_table(dev); > if (IS_ERR(opp_table)) > @@ -2049,6 +2055,32 @@ struct opp_table *dev_pm_opp_attach_genpd(struct device *dev,
I was about to apply this patch when I noticed that this routine does return the array of virtual devices back to the caller, like the qcom cpufreq driver in this case. IIRC we did it this way as a generic solution for this in the OPP core wasn't preferable.
And so I think again if this patch should be picked instead of letting the platform handle this ?
-- viresh
| |