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

Merge branch 'cpufreq/arm/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm into pm-cpufreq

Pull ARM cpufreq drivers changes for v5.2 from Viresh Kumar:

"This pull request contains:

- Fix for possible object reference leak for few drivers (Wen Yang).
- Fix for armada frequency calculation (Gregory).
- Code cleanup in maple driver (Viresh).

This contains some non-ARM bits as well this time as the patches were
picked up from a series."

* 'cpufreq/arm/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm:
cpufreq: armada-37xx: fix frequency calculation for opp
cpufreq: maple: Remove redundant code from maple_cpufreq_init()
cpufreq: ppc_cbe: fix possible object reference leak
cpufreq: pmac32: fix possible object reference leak
cpufreq/pasemi: fix possible object reference leak
cpufreq: maple: fix possible object reference leak
cpufreq: kirkwood: fix possible object reference leak
cpufreq: imx6q: fix possible object reference leak
cpufreq: ap806: fix possible object reference leak

+38 -18
+19 -3
drivers/cpufreq/armada-37xx-cpufreq.c
··· 359 359 struct armada_37xx_dvfs *dvfs; 360 360 struct platform_device *pdev; 361 361 unsigned long freq; 362 - unsigned int cur_frequency; 362 + unsigned int cur_frequency, base_frequency; 363 363 struct regmap *nb_pm_base, *avs_base; 364 364 struct device *cpu_dev; 365 365 int load_lvl, ret; 366 - struct clk *clk; 366 + struct clk *clk, *parent; 367 367 368 368 nb_pm_base = 369 369 syscon_regmap_lookup_by_compatible("marvell,armada-3700-nb-pm"); ··· 399 399 return PTR_ERR(clk); 400 400 } 401 401 402 + parent = clk_get_parent(clk); 403 + if (IS_ERR(parent)) { 404 + dev_err(cpu_dev, "Cannot get parent clock for CPU0\n"); 405 + clk_put(clk); 406 + return PTR_ERR(parent); 407 + } 408 + 409 + /* Get parent CPU frequency */ 410 + base_frequency = clk_get_rate(parent); 411 + 412 + if (!base_frequency) { 413 + dev_err(cpu_dev, "Failed to get parent clock rate for CPU\n"); 414 + clk_put(clk); 415 + return -EINVAL; 416 + } 417 + 402 418 /* Get nominal (current) CPU frequency */ 403 419 cur_frequency = clk_get_rate(clk); 404 420 if (!cur_frequency) { ··· 447 431 for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR; 448 432 load_lvl++) { 449 433 unsigned long u_volt = avs_map[dvfs->avs[load_lvl]] * 1000; 450 - freq = cur_frequency / dvfs->divider[load_lvl]; 434 + freq = base_frequency / dvfs->divider[load_lvl]; 451 435 ret = dev_pm_opp_add(cpu_dev, freq, u_volt); 452 436 if (ret) 453 437 goto remove_opp;
+1
drivers/cpufreq/armada-8k-cpufreq.c
··· 132 132 of_node_put(node); 133 133 return -ENODEV; 134 134 } 135 + of_node_put(node); 135 136 136 137 nb_cpus = num_possible_cpus(); 137 138 freq_tables = kcalloc(nb_cpus, sizeof(*freq_tables), GFP_KERNEL);
+2 -2
drivers/cpufreq/imx6q-cpufreq.c
··· 388 388 ret = imx6ul_opp_check_speed_grading(cpu_dev); 389 389 if (ret) { 390 390 if (ret == -EPROBE_DEFER) 391 - return ret; 391 + goto put_node; 392 392 393 393 dev_err(cpu_dev, "failed to read ocotp: %d\n", 394 394 ret); 395 - return ret; 395 + goto put_node; 396 396 } 397 397 } else { 398 398 imx6q_opp_check_speed_grading(cpu_dev);
+11 -8
drivers/cpufreq/kirkwood-cpufreq.c
··· 124 124 priv.cpu_clk = of_clk_get_by_name(np, "cpu_clk"); 125 125 if (IS_ERR(priv.cpu_clk)) { 126 126 dev_err(priv.dev, "Unable to get cpuclk\n"); 127 - return PTR_ERR(priv.cpu_clk); 127 + err = PTR_ERR(priv.cpu_clk); 128 + goto out_node; 128 129 } 129 130 130 131 err = clk_prepare_enable(priv.cpu_clk); 131 132 if (err) { 132 133 dev_err(priv.dev, "Unable to prepare cpuclk\n"); 133 - return err; 134 + goto out_node; 134 135 } 135 136 136 137 kirkwood_freq_table[0].frequency = clk_get_rate(priv.cpu_clk) / 1000; ··· 162 161 goto out_ddr; 163 162 } 164 163 165 - of_node_put(np); 166 - np = NULL; 167 - 168 164 err = cpufreq_register_driver(&kirkwood_cpufreq_driver); 169 - if (!err) 170 - return 0; 165 + if (err) { 166 + dev_err(priv.dev, "Failed to register cpufreq driver\n"); 167 + goto out_powersave; 168 + } 171 169 172 - dev_err(priv.dev, "Failed to register cpufreq driver\n"); 170 + of_node_put(np); 171 + return 0; 173 172 173 + out_powersave: 174 174 clk_disable_unprepare(priv.powersave_clk); 175 175 out_ddr: 176 176 clk_disable_unprepare(priv.ddr_clk); 177 177 out_cpu: 178 178 clk_disable_unprepare(priv.cpu_clk); 179 + out_node: 179 180 of_node_put(np); 180 181 181 182 return err;
+1 -5
drivers/cpufreq/maple-cpufreq.c
··· 210 210 */ 211 211 valp = of_get_property(cpunode, "clock-frequency", NULL); 212 212 if (!valp) 213 - return -ENODEV; 213 + goto bail_noprops; 214 214 max_freq = (*valp)/1000; 215 215 maple_cpu_freqs[0].frequency = max_freq; 216 216 maple_cpu_freqs[1].frequency = max_freq/2; ··· 230 230 maple_cpu_freqs[maple_pmode_cur].frequency/1000); 231 231 232 232 rc = cpufreq_register_driver(&maple_cpufreq_driver); 233 - 234 - of_node_put(cpunode); 235 - 236 - return rc; 237 233 238 234 bail_noprops: 239 235 of_node_put(cpunode);
+1
drivers/cpufreq/pasemi-cpufreq.c
··· 146 146 147 147 cpu = of_get_cpu_node(policy->cpu, NULL); 148 148 149 + of_node_put(cpu); 149 150 if (!cpu) 150 151 goto out; 151 152
+2
drivers/cpufreq/pmac32-cpufreq.c
··· 552 552 volt_gpio_np = of_find_node_by_name(NULL, "cpu-vcore-select"); 553 553 if (volt_gpio_np) 554 554 voltage_gpio = read_gpio(volt_gpio_np); 555 + of_node_put(volt_gpio_np); 555 556 if (!voltage_gpio){ 556 557 pr_err("missing cpu-vcore-select gpio\n"); 557 558 return 1; ··· 589 588 if (volt_gpio_np) 590 589 voltage_gpio = read_gpio(volt_gpio_np); 591 590 591 + of_node_put(volt_gpio_np); 592 592 pvr = mfspr(SPRN_PVR); 593 593 has_cpu_l2lve = !((pvr & 0xf00) == 0x100); 594 594
+1
drivers/cpufreq/ppc_cbe_cpufreq.c
··· 86 86 if (!cbe_get_cpu_pmd_regs(policy->cpu) || 87 87 !cbe_get_cpu_mic_tm_regs(policy->cpu)) { 88 88 pr_info("invalid CBE regs pointers for cpufreq\n"); 89 + of_node_put(cpu); 89 90 return -EINVAL; 90 91 } 91 92