aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/platforms/cell/cbe_cpufreq.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/arch/powerpc/platforms/cell/cbe_cpufreq.c b/arch/powerpc/platforms/cell/cbe_cpufreq.c
index 5820fb9a4521..3a26b3c115b9 100644
--- a/arch/powerpc/platforms/cell/cbe_cpufreq.c
+++ b/arch/powerpc/platforms/cell/cbe_cpufreq.c
@@ -196,10 +196,9 @@ static int pmi_notifier(struct notifier_block *nb,
196{ 196{
197 struct cpufreq_policy *policy = data; 197 struct cpufreq_policy *policy = data;
198 198
199 if (event != CPUFREQ_INCOMPATIBLE) 199 if (pmi_frequency_limit)
200 return 0; 200 cpufreq_verify_within_limits(policy, 0, pmi_frequency_limit);
201 201
202 cpufreq_verify_within_limits(policy, 0, pmi_frequency_limit);
203 return 0; 202 return 0;
204} 203}
205 204
@@ -263,11 +262,6 @@ static int cbe_cpufreq_cpu_init(struct cpufreq_policy *policy)
263 262
264 cpufreq_frequency_table_get_attr(cbe_freqs, policy->cpu); 263 cpufreq_frequency_table_get_attr(cbe_freqs, policy->cpu);
265 264
266 if (cbe_cpufreq_has_pmi) {
267 /* frequency might get limited later, initialize limit with max_freq */
268 pmi_frequency_limit = max_freq;
269 cpufreq_register_notifier(&pmi_notifier_block, CPUFREQ_POLICY_NOTIFIER);
270 }
271 265
272 /* this ensures that policy->cpuinfo_min and policy->cpuinfo_max are set correctly */ 266 /* this ensures that policy->cpuinfo_min and policy->cpuinfo_max are set correctly */
273 return cpufreq_frequency_table_cpuinfo(policy, cbe_freqs); 267 return cpufreq_frequency_table_cpuinfo(policy, cbe_freqs);
@@ -275,9 +269,6 @@ static int cbe_cpufreq_cpu_init(struct cpufreq_policy *policy)
275 269
276static int cbe_cpufreq_cpu_exit(struct cpufreq_policy *policy) 270static int cbe_cpufreq_cpu_exit(struct cpufreq_policy *policy)
277{ 271{
278 if (cbe_cpufreq_has_pmi)
279 cpufreq_unregister_notifier(&pmi_notifier_block, CPUFREQ_POLICY_NOTIFIER);
280
281 cpufreq_frequency_table_put_attr(policy->cpu); 272 cpufreq_frequency_table_put_attr(policy->cpu);
282 return 0; 273 return 0;
283} 274}
@@ -341,6 +332,9 @@ static int __init cbe_cpufreq_init(void)
341 332
342 cbe_cpufreq_has_pmi = pmi_register_handler(&cbe_pmi_handler) == 0; 333 cbe_cpufreq_has_pmi = pmi_register_handler(&cbe_pmi_handler) == 0;
343 334
335 if (cbe_cpufreq_has_pmi)
336 cpufreq_register_notifier(&pmi_notifier_block, CPUFREQ_POLICY_NOTIFIER);
337
344 return cpufreq_register_driver(&cbe_cpufreq_driver); 338 return cpufreq_register_driver(&cbe_cpufreq_driver);
345} 339}
346 340
@@ -348,8 +342,10 @@ static void __exit cbe_cpufreq_exit(void)
348{ 342{
349 cpufreq_unregister_driver(&cbe_cpufreq_driver); 343 cpufreq_unregister_driver(&cbe_cpufreq_driver);
350 344
351 if (cbe_cpufreq_has_pmi) 345 if (cbe_cpufreq_has_pmi) {
346 cpufreq_unregister_notifier(&pmi_notifier_block, CPUFREQ_POLICY_NOTIFIER);
352 pmi_unregister_handler(&cbe_pmi_handler); 347 pmi_unregister_handler(&cbe_pmi_handler);
348 }
353} 349}
354 350
355module_init(cbe_cpufreq_init); 351module_init(cbe_cpufreq_init);