Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

cpufreq: arm_big_little: free OPP table created during ->init()

OPP layer now supports freeing of OPPs and we should free them once they aren't
useful anymore.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

authored by

Viresh Kumar and committed by
Rafael J. Wysocki
493b4cd2 cc87b8a8

+11 -2
+6 -1
drivers/cpufreq/arm_big_little.c
··· 289 289 290 290 clk_put(clk[cluster]); 291 291 dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table[cluster]); 292 + if (arm_bL_ops->free_opp_table) 293 + arm_bL_ops->free_opp_table(cpu_dev); 292 294 dev_dbg(cpu_dev, "%s: cluster: %d\n", __func__, cluster); 293 295 } 294 296 ··· 339 337 if (ret) { 340 338 dev_err(cpu_dev, "%s: failed to init cpufreq table, cpu: %d, err: %d\n", 341 339 __func__, cpu_dev->id, ret); 342 - goto out; 340 + goto free_opp_table; 343 341 } 344 342 345 343 name[12] = cluster + '0'; ··· 356 354 ret = PTR_ERR(clk[cluster]); 357 355 dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table[cluster]); 358 356 357 + free_opp_table: 358 + if (arm_bL_ops->free_opp_table) 359 + arm_bL_ops->free_opp_table(cpu_dev); 359 360 out: 360 361 dev_err(cpu_dev, "%s: Failed to get data for cluster: %d\n", __func__, 361 362 cluster);
+4 -1
drivers/cpufreq/arm_big_little.h
··· 25 25 26 26 struct cpufreq_arm_bL_ops { 27 27 char name[CPUFREQ_NAME_LEN]; 28 - int (*get_transition_latency)(struct device *cpu_dev); 29 28 30 29 /* 31 30 * This must set opp table for cpu_dev in a similar way as done by 32 31 * of_init_opp_table(). 33 32 */ 34 33 int (*init_opp_table)(struct device *cpu_dev); 34 + 35 + /* Optional */ 36 + int (*get_transition_latency)(struct device *cpu_dev); 37 + void (*free_opp_table)(struct device *cpu_dev); 35 38 }; 36 39 37 40 int bL_cpufreq_register(struct cpufreq_arm_bL_ops *ops);
+1
drivers/cpufreq/arm_big_little_dt.c
··· 82 82 .name = "dt-bl", 83 83 .get_transition_latency = dt_get_transition_latency, 84 84 .init_opp_table = dt_init_opp_table, 85 + .free_opp_table = of_free_opp_table, 85 86 }; 86 87 87 88 static int generic_bL_probe(struct platform_device *pdev)