linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] cpufreq-dt: register cooling device after validating cpufreq table
@ 2014-11-24 10:59 Viresh Kumar
  2014-11-24 18:10 ` Eduardo Valentin
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Viresh Kumar @ 2014-11-24 10:59 UTC (permalink / raw)
  To: Rafael Wysocki
  Cc: linaro-kernel, linux-pm, l.majewski, edubezval, Viresh Kumar

of_cpufreq_cooling_register() can use frequency values from
policy->min/max/cpuinfo.min_freq/cpuinfo.max_freq, which are available only
after calling cpufreq_table_validate_and_show().

The right order of calling should be: cpufreq_table_validate_and_show() followed
by of_cpufreq_cooling_register(). Fix it.

Reported-by: Lukasz Majewski <l.majewski@samsung.com>
Reported-by: Eduardo Valentin <edubezval@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

---
For 3.18.
---
 drivers/cpufreq/cpufreq-dt.c | 35 +++++++++++++++++------------------
 1 file changed, 17 insertions(+), 18 deletions(-)

diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
index 8cba13d..22eb6e5 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
@@ -186,7 +186,6 @@ static int cpufreq_init(struct cpufreq_policy *policy)
 {
 	struct cpufreq_dt_platform_data *pd;
 	struct cpufreq_frequency_table *freq_table;
-	struct thermal_cooling_device *cdev;
 	struct device_node *np;
 	struct private_data *priv;
 	struct device *cpu_dev;
@@ -269,20 +268,6 @@ static int cpufreq_init(struct cpufreq_policy *policy)
 		goto out_free_priv;
 	}
 
-	/*
-	 * For now, just loading the cooling device;
-	 * thermal DT code takes care of matching them.
-	 */
-	if (of_find_property(np, "#cooling-cells", NULL)) {
-		cdev = of_cpufreq_cooling_register(np, cpu_present_mask);
-		if (IS_ERR(cdev))
-			dev_err(cpu_dev,
-				"running cpufreq without cooling device: %ld\n",
-				PTR_ERR(cdev));
-		else
-			priv->cdev = cdev;
-	}
-
 	priv->cpu_dev = cpu_dev;
 	priv->cpu_reg = cpu_reg;
 	policy->driver_data = priv;
@@ -292,7 +277,22 @@ static int cpufreq_init(struct cpufreq_policy *policy)
 	if (ret) {
 		dev_err(cpu_dev, "%s: invalid frequency table: %d\n", __func__,
 			ret);
-		goto out_cooling_unregister;
+		goto out_free_cpufreq_table;
+	}
+
+	/*
+	 * For now, just loading the cooling device;
+	 * thermal DT code takes care of matching them.
+	 */
+	if (of_find_property(np, "#cooling-cells", NULL)) {
+		priv->cdev = of_cpufreq_cooling_register(np, cpu_present_mask);
+		if (IS_ERR(priv->cdev)) {
+			dev_err(cpu_dev,
+				"running cpufreq without cooling device: %ld\n",
+				PTR_ERR(priv->cdev));
+
+			priv->cdev = NULL;
+		}
 	}
 
 	policy->cpuinfo.transition_latency = transition_latency;
@@ -305,8 +305,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
 
 	return 0;
 
-out_cooling_unregister:
-	cpufreq_cooling_unregister(priv->cdev);
+out_free_cpufreq_table:
 	dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table);
 out_free_priv:
 	kfree(priv);
-- 
2.0.3.693.g996b0fd


^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-11-26 22:35 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-24 10:59 [PATCH] cpufreq-dt: register cooling device after validating cpufreq table Viresh Kumar
2014-11-24 18:10 ` Eduardo Valentin
2014-11-25 10:57   ` Viresh Kumar
2014-11-25  1:44     ` Eduardo Valentin
2014-11-25 15:26       ` Viresh Kumar
2014-11-25 20:47         ` Rafael J. Wysocki
2014-11-26  3:28           ` Viresh Kumar
2014-11-25 10:56 ` Lukasz Majewski
2014-11-25 21:49 ` Rafael J. Wysocki
2014-11-25 22:05   ` Rafael J. Wysocki
2014-11-26  5:57     ` Viresh Kumar
2014-11-26  6:02       ` Viresh Kumar
2014-11-26 15:10       ` Eduardo Valentin
2014-11-26 22:57         ` Rafael J. Wysocki
2014-11-26  3:30   ` Viresh Kumar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).