[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190614041733.120807-4-saravanak@google.com>
Date: Thu, 13 Jun 2019 21:17:25 -0700
From: Saravana Kannan <saravanak@...gle.com>
To: Georgi Djakov <georgi.djakov@...aro.org>,
Rob Herring <robh+dt@...nel.org>,
Mark Rutland <mark.rutland@....com>,
Viresh Kumar <vireshk@...nel.org>, Nishanth Menon <nm@...com>,
Stephen Boyd <sboyd@...nel.org>,
"Rafael J. Wysocki" <rjw@...ysocki.net>,
MyungJoo Ham <myungjoo.ham@...sung.com>,
Kyungmin Park <kyungmin.park@...sung.com>,
Chanwoo Choi <cw00.choi@...sung.com>
Cc: Saravana Kannan <saravanak@...gle.com>,
Rajendra Nayak <rnayak@...eaurora.org>,
Jordan Crouse <jcrouse@...eaurora.org>,
vincent.guittot@...aro.org, bjorn.andersson@...aro.org,
amit.kucheria@...aro.org, seansw@....qualcomm.com,
daidavid1@...eaurora.org, evgreen@...omium.org,
sibis@...eaurora.org, kernel-team@...roid.com,
linux-pm@...r.kernel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [PATCH v2 03/11] PM / devfreq: Add required OPPs support to passive governor
Look at the required OPPs of the "parent" device to determine the OPP that
is required from the slave device managed by the passive governor. This
allows having mappings between a parent device and a slave device even when
they don't have the same number of OPPs.
Signed-off-by: Saravana Kannan <saravanak@...gle.com>
---
drivers/devfreq/governor_passive.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/drivers/devfreq/governor_passive.c b/drivers/devfreq/governor_passive.c
index 3bc29acbd54e..bd4a98bb15b1 100644
--- a/drivers/devfreq/governor_passive.c
+++ b/drivers/devfreq/governor_passive.c
@@ -21,8 +21,9 @@ static int devfreq_passive_get_target_freq(struct devfreq *devfreq,
struct devfreq_passive_data *p_data
= (struct devfreq_passive_data *)devfreq->data;
struct devfreq *parent_devfreq = (struct devfreq *)p_data->parent;
+ struct opp_table *opp_table = NULL, *c_opp_table = NULL;
unsigned long child_freq = ULONG_MAX;
- struct dev_pm_opp *opp;
+ struct dev_pm_opp *opp = NULL, *c_opp = NULL;
int i, count, ret = 0;
/*
@@ -65,7 +66,20 @@ static int devfreq_passive_get_target_freq(struct devfreq *devfreq,
goto out;
}
- dev_pm_opp_put(opp);
+ opp_table = dev_pm_opp_get_opp_table(parent_devfreq->dev.parent);
+ if (IS_ERR_OR_NULL(opp_table)) {
+ ret = PTR_ERR(opp_table);
+ goto out;
+ }
+
+ c_opp_table = dev_pm_opp_get_opp_table(devfreq->dev.parent);
+ if (!IS_ERR_OR_NULL(c_opp_table))
+ c_opp = dev_pm_opp_xlate_opp(opp_table, c_opp_table, opp);
+ if (c_opp) {
+ *freq = dev_pm_opp_get_freq(c_opp);
+ dev_pm_opp_put(c_opp);
+ goto out;
+ }
/*
* Get the OPP table's index of decided freqeuncy by governor
@@ -92,6 +106,13 @@ static int devfreq_passive_get_target_freq(struct devfreq *devfreq,
*freq = child_freq;
out:
+ if (!IS_ERR_OR_NULL(opp_table))
+ dev_pm_opp_put_opp_table(opp_table);
+ if (!IS_ERR_OR_NULL(c_opp_table))
+ dev_pm_opp_put_opp_table(c_opp_table);
+ if (!IS_ERR_OR_NULL(opp))
+ dev_pm_opp_put(opp);
+
return ret;
}
--
2.22.0.rc2.383.gf4fbbf30c2-goog
Powered by blists - more mailing lists