diff mbox

[07/10] cpufreq: dt: Identify cpu-sharing for platforms without operating-points-v2

Message ID e42f0fdd6b67461a631ca9d966a52357bbc6cc75.1461228504.git.viresh.kumar@linaro.org
State Superseded
Headers show

Commit Message

Viresh Kumar April 21, 2016, 8:58 a.m. UTC
Existing platforms, which do not support operating-points-v2, can
explicitly tell the opp core that some of the CPUs share opp tables,
with help of dev_pm_opp_set_sharing_cpus().

For such platforms, explicitly ask the opp core to provide list of CPUs
sharing the opp table with current cpu device, before falling back to
platform data.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

---
 drivers/cpufreq/cpufreq-dt.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

-- 
2.7.1.410.g6faf27b

Comments

Viresh Kumar April 25, 2016, 9:36 a.m. UTC | #1
On 22-04-16, 15:27, Stephen Boyd wrote:
> On 04/21, Viresh Kumar wrote:

> > @@ -167,14 +167,16 @@ static int cpufreq_init(struct cpufreq_policy *policy)

> >  	/* Get OPP-sharing information from "operating-points-v2" bindings */

> >  	ret = dev_pm_opp_of_get_sharing_cpus(cpu_dev, policy->cpus);

> >  	if (ret) {

> > +		if (ret != -ENOENT)

> > +			goto out_put_clk;

> > +

> >  		/*

> >  		 * operating-points-v2 not supported, fallback to old method of

> > -		 * finding shared-OPPs for backward compatibility.

> > +		 * finding shared-OPPs for backward compatibility if the

> > +		 * platform hasn't set sharing CPUs.

> >  		 */

> > -		if (ret == -ENOENT)

> > -			opp_v1 = true;

> > -		else

> > -			goto out_put_clk;

> > +		if (dev_pm_opp_get_sharing_cpus(cpu_dev, policy->cpus))

> > +			fallback = true;

> 

> I'm sort of lost, we make the same call twice here. Why would the

> return value change between the first time and the second?


Two different APIs, which look similar :)

The first one tries to find the sharing-cpus relation from DT, the
other one is for v1 bindings and finds it due to platform code
dev_pm_opp_set_sharing_cpus() call.

-- 
viresh
diff mbox

Patch

diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
index 5f8dbe640a20..aca9bec00f91 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
@@ -147,7 +147,7 @@  static int cpufreq_init(struct cpufreq_policy *policy)
 	struct clk *cpu_clk;
 	struct dev_pm_opp *suspend_opp;
 	unsigned int transition_latency;
-	bool opp_v1 = false;
+	bool fallback = false;
 	const char *name;
 	int ret;
 
@@ -167,14 +167,16 @@  static int cpufreq_init(struct cpufreq_policy *policy)
 	/* Get OPP-sharing information from "operating-points-v2" bindings */
 	ret = dev_pm_opp_of_get_sharing_cpus(cpu_dev, policy->cpus);
 	if (ret) {
+		if (ret != -ENOENT)
+			goto out_put_clk;
+
 		/*
 		 * operating-points-v2 not supported, fallback to old method of
-		 * finding shared-OPPs for backward compatibility.
+		 * finding shared-OPPs for backward compatibility if the
+		 * platform hasn't set sharing CPUs.
 		 */
-		if (ret == -ENOENT)
-			opp_v1 = true;
-		else
-			goto out_put_clk;
+		if (dev_pm_opp_get_sharing_cpus(cpu_dev, policy->cpus))
+			fallback = true;
 	}
 
 	/*
@@ -214,7 +216,7 @@  static int cpufreq_init(struct cpufreq_policy *policy)
 		goto out_free_opp;
 	}
 
-	if (opp_v1) {
+	if (fallback) {
 		struct cpufreq_dt_platform_data *pd = cpufreq_get_driver_data();
 
 		if (!pd || !pd->independent_clocks)