Message ID | 20190709071056.26361-1-Anson.Huang@nxp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] opp: of: Support multiple suspend OPPs defined in DT | expand |
On 09-07-19, 15:10, Anson.Huang@nxp.com wrote: > From: Anson Huang <Anson.Huang@nxp.com> > > With property "opp-supported-hw" introduced, the OPP table > in DT could be a large OPP table and ONLY a subset of OPPs > are available, based on the version of the hardware running > on. That introduces restriction of using "opp-suspend" > property to define the suspend OPP, as we are NOT sure if the > OPP containing "opp-suspend" property is available for the > hardware running on, and the of opp core does NOT allow multiple > suspend OPPs defined in DT OPP table. > > To eliminate this restrition, make of opp core allow multiple > suspend OPPs defined in DT, and pick the OPP with highest rate > and with "opp-suspend" property present to be suspend OPP, it > can speed up the suspend/resume process. > > Signed-off-by: Anson Huang <Anson.Huang@nxp.com> > --- > drivers/opp/of.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) Please update the DT bindings first. FWIW, all three patches look fine otherwise.
Hi, Viresh > On 09-07-19, 15:10, Anson.Huang@nxp.com wrote: > > From: Anson Huang <Anson.Huang@nxp.com> > > > > With property "opp-supported-hw" introduced, the OPP table in DT could > > be a large OPP table and ONLY a subset of OPPs are available, based on > > the version of the hardware running on. That introduces restriction of > > using "opp-suspend" > > property to define the suspend OPP, as we are NOT sure if the OPP > > containing "opp-suspend" property is available for the hardware > > running on, and the of opp core does NOT allow multiple suspend OPPs > > defined in DT OPP table. > > > > To eliminate this restrition, make of opp core allow multiple suspend > > OPPs defined in DT, and pick the OPP with highest rate and with > > "opp-suspend" property present to be suspend OPP, it can speed up the > > suspend/resume process. > > > > Signed-off-by: Anson Huang <Anson.Huang@nxp.com> > > --- > > drivers/opp/of.c | 9 ++++++--- > > 1 file changed, 6 insertions(+), 3 deletions(-) > > Please update the DT bindings first. OK, will send a V2 containing DT binding changes. > > FWIW, all three patches look fine otherwise. Thank you! Anson.
diff --git a/drivers/opp/of.c b/drivers/opp/of.c index b313aca..7e8ec6c 100644 --- a/drivers/opp/of.c +++ b/drivers/opp/of.c @@ -617,9 +617,12 @@ static struct dev_pm_opp *_opp_add_static_v2(struct opp_table *opp_table, /* OPP to select on device suspend */ if (of_property_read_bool(np, "opp-suspend")) { if (opp_table->suspend_opp) { - dev_warn(dev, "%s: Multiple suspend OPPs found (%lu %lu)\n", - __func__, opp_table->suspend_opp->rate, - new_opp->rate); + /* Pick the OPP with higher rate as suspend OPP */ + if (new_opp->rate > opp_table->suspend_opp->rate) { + opp_table->suspend_opp->suspend = false; + new_opp->suspend = true; + opp_table->suspend_opp = new_opp; + } } else { new_opp->suspend = true; opp_table->suspend_opp = new_opp;