diff options
| -rw-r--r-- | drivers/cpufreq/armada-37xx-cpufreq.c | 22 | ||||
| -rw-r--r-- | drivers/cpufreq/armada-8k-cpufreq.c | 1 | ||||
| -rw-r--r-- | drivers/cpufreq/imx6q-cpufreq.c | 4 | ||||
| -rw-r--r-- | drivers/cpufreq/kirkwood-cpufreq.c | 19 | ||||
| -rw-r--r-- | drivers/cpufreq/maple-cpufreq.c | 6 | ||||
| -rw-r--r-- | drivers/cpufreq/pasemi-cpufreq.c | 1 | ||||
| -rw-r--r-- | drivers/cpufreq/pmac32-cpufreq.c | 2 | ||||
| -rw-r--r-- | drivers/cpufreq/ppc_cbe_cpufreq.c | 1 |
8 files changed, 38 insertions, 18 deletions
diff --git a/drivers/cpufreq/armada-37xx-cpufreq.c b/drivers/cpufreq/armada-37xx-cpufreq.c index 75491fc841a6..0df16eb1eb3c 100644 --- a/drivers/cpufreq/armada-37xx-cpufreq.c +++ b/drivers/cpufreq/armada-37xx-cpufreq.c | |||
| @@ -359,11 +359,11 @@ static int __init armada37xx_cpufreq_driver_init(void) | |||
| 359 | struct armada_37xx_dvfs *dvfs; | 359 | struct armada_37xx_dvfs *dvfs; |
| 360 | struct platform_device *pdev; | 360 | struct platform_device *pdev; |
| 361 | unsigned long freq; | 361 | unsigned long freq; |
| 362 | unsigned int cur_frequency; | 362 | unsigned int cur_frequency, base_frequency; |
| 363 | struct regmap *nb_pm_base, *avs_base; | 363 | struct regmap *nb_pm_base, *avs_base; |
| 364 | struct device *cpu_dev; | 364 | struct device *cpu_dev; |
| 365 | int load_lvl, ret; | 365 | int load_lvl, ret; |
| 366 | struct clk *clk; | 366 | struct clk *clk, *parent; |
| 367 | 367 | ||
| 368 | nb_pm_base = | 368 | nb_pm_base = |
| 369 | syscon_regmap_lookup_by_compatible("marvell,armada-3700-nb-pm"); | 369 | syscon_regmap_lookup_by_compatible("marvell,armada-3700-nb-pm"); |
| @@ -399,6 +399,22 @@ static int __init armada37xx_cpufreq_driver_init(void) | |||
| 399 | return PTR_ERR(clk); | 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 | /* Get nominal (current) CPU frequency */ | 418 | /* Get nominal (current) CPU frequency */ |
| 403 | cur_frequency = clk_get_rate(clk); | 419 | cur_frequency = clk_get_rate(clk); |
| 404 | if (!cur_frequency) { | 420 | if (!cur_frequency) { |
| @@ -431,7 +447,7 @@ static int __init armada37xx_cpufreq_driver_init(void) | |||
| 431 | for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR; | 447 | for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR; |
| 432 | load_lvl++) { | 448 | load_lvl++) { |
| 433 | unsigned long u_volt = avs_map[dvfs->avs[load_lvl]] * 1000; | 449 | unsigned long u_volt = avs_map[dvfs->avs[load_lvl]] * 1000; |
| 434 | freq = cur_frequency / dvfs->divider[load_lvl]; | 450 | freq = base_frequency / dvfs->divider[load_lvl]; |
| 435 | ret = dev_pm_opp_add(cpu_dev, freq, u_volt); | 451 | ret = dev_pm_opp_add(cpu_dev, freq, u_volt); |
| 436 | if (ret) | 452 | if (ret) |
| 437 | goto remove_opp; | 453 | goto remove_opp; |
diff --git a/drivers/cpufreq/armada-8k-cpufreq.c b/drivers/cpufreq/armada-8k-cpufreq.c index b3f4bd647e9b..988ebc326bdb 100644 --- a/drivers/cpufreq/armada-8k-cpufreq.c +++ b/drivers/cpufreq/armada-8k-cpufreq.c | |||
| @@ -132,6 +132,7 @@ static int __init armada_8k_cpufreq_init(void) | |||
| 132 | of_node_put(node); | 132 | of_node_put(node); |
| 133 | return -ENODEV; | 133 | return -ENODEV; |
| 134 | } | 134 | } |
| 135 | of_node_put(node); | ||
| 135 | 136 | ||
| 136 | nb_cpus = num_possible_cpus(); | 137 | nb_cpus = num_possible_cpus(); |
| 137 | freq_tables = kcalloc(nb_cpus, sizeof(*freq_tables), GFP_KERNEL); | 138 | freq_tables = kcalloc(nb_cpus, sizeof(*freq_tables), GFP_KERNEL); |
diff --git a/drivers/cpufreq/imx6q-cpufreq.c b/drivers/cpufreq/imx6q-cpufreq.c index a4ff09f91c8f..3e17560b1efe 100644 --- a/drivers/cpufreq/imx6q-cpufreq.c +++ b/drivers/cpufreq/imx6q-cpufreq.c | |||
| @@ -388,11 +388,11 @@ static int imx6q_cpufreq_probe(struct platform_device *pdev) | |||
| 388 | ret = imx6ul_opp_check_speed_grading(cpu_dev); | 388 | ret = imx6ul_opp_check_speed_grading(cpu_dev); |
| 389 | if (ret) { | 389 | if (ret) { |
| 390 | if (ret == -EPROBE_DEFER) | 390 | if (ret == -EPROBE_DEFER) |
| 391 | return ret; | 391 | goto put_node; |
| 392 | 392 | ||
| 393 | dev_err(cpu_dev, "failed to read ocotp: %d\n", | 393 | dev_err(cpu_dev, "failed to read ocotp: %d\n", |
| 394 | ret); | 394 | ret); |
| 395 | return ret; | 395 | goto put_node; |
| 396 | } | 396 | } |
| 397 | } else { | 397 | } else { |
| 398 | imx6q_opp_check_speed_grading(cpu_dev); | 398 | imx6q_opp_check_speed_grading(cpu_dev); |
diff --git a/drivers/cpufreq/kirkwood-cpufreq.c b/drivers/cpufreq/kirkwood-cpufreq.c index c2dd43f3f5d8..8d63a6dc8383 100644 --- a/drivers/cpufreq/kirkwood-cpufreq.c +++ b/drivers/cpufreq/kirkwood-cpufreq.c | |||
| @@ -124,13 +124,14 @@ static int kirkwood_cpufreq_probe(struct platform_device *pdev) | |||
| 124 | priv.cpu_clk = of_clk_get_by_name(np, "cpu_clk"); | 124 | priv.cpu_clk = of_clk_get_by_name(np, "cpu_clk"); |
| 125 | if (IS_ERR(priv.cpu_clk)) { | 125 | if (IS_ERR(priv.cpu_clk)) { |
| 126 | dev_err(priv.dev, "Unable to get cpuclk\n"); | 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 | err = clk_prepare_enable(priv.cpu_clk); | 131 | err = clk_prepare_enable(priv.cpu_clk); |
| 131 | if (err) { | 132 | if (err) { |
| 132 | dev_err(priv.dev, "Unable to prepare cpuclk\n"); | 133 | dev_err(priv.dev, "Unable to prepare cpuclk\n"); |
| 133 | return err; | 134 | goto out_node; |
| 134 | } | 135 | } |
| 135 | 136 | ||
| 136 | kirkwood_freq_table[0].frequency = clk_get_rate(priv.cpu_clk) / 1000; | 137 | kirkwood_freq_table[0].frequency = clk_get_rate(priv.cpu_clk) / 1000; |
| @@ -161,20 +162,22 @@ static int kirkwood_cpufreq_probe(struct platform_device *pdev) | |||
| 161 | goto out_ddr; | 162 | goto out_ddr; |
| 162 | } | 163 | } |
| 163 | 164 | ||
| 164 | of_node_put(np); | ||
| 165 | np = NULL; | ||
| 166 | |||
| 167 | err = cpufreq_register_driver(&kirkwood_cpufreq_driver); | 165 | err = cpufreq_register_driver(&kirkwood_cpufreq_driver); |
| 168 | if (!err) | 166 | if (err) { |
| 169 | return 0; | 167 | dev_err(priv.dev, "Failed to register cpufreq driver\n"); |
| 168 | goto out_powersave; | ||
| 169 | } | ||
| 170 | 170 | ||
| 171 | dev_err(priv.dev, "Failed to register cpufreq driver\n"); | 171 | of_node_put(np); |
| 172 | return 0; | ||
| 172 | 173 | ||
| 174 | out_powersave: | ||
| 173 | clk_disable_unprepare(priv.powersave_clk); | 175 | clk_disable_unprepare(priv.powersave_clk); |
| 174 | out_ddr: | 176 | out_ddr: |
| 175 | clk_disable_unprepare(priv.ddr_clk); | 177 | clk_disable_unprepare(priv.ddr_clk); |
| 176 | out_cpu: | 178 | out_cpu: |
| 177 | clk_disable_unprepare(priv.cpu_clk); | 179 | clk_disable_unprepare(priv.cpu_clk); |
| 180 | out_node: | ||
| 178 | of_node_put(np); | 181 | of_node_put(np); |
| 179 | 182 | ||
| 180 | return err; | 183 | return err; |
diff --git a/drivers/cpufreq/maple-cpufreq.c b/drivers/cpufreq/maple-cpufreq.c index d9df89392b84..a94355723ef8 100644 --- a/drivers/cpufreq/maple-cpufreq.c +++ b/drivers/cpufreq/maple-cpufreq.c | |||
| @@ -210,7 +210,7 @@ static int __init maple_cpufreq_init(void) | |||
| 210 | */ | 210 | */ |
| 211 | valp = of_get_property(cpunode, "clock-frequency", NULL); | 211 | valp = of_get_property(cpunode, "clock-frequency", NULL); |
| 212 | if (!valp) | 212 | if (!valp) |
| 213 | return -ENODEV; | 213 | goto bail_noprops; |
| 214 | max_freq = (*valp)/1000; | 214 | max_freq = (*valp)/1000; |
| 215 | maple_cpu_freqs[0].frequency = max_freq; | 215 | maple_cpu_freqs[0].frequency = max_freq; |
| 216 | maple_cpu_freqs[1].frequency = max_freq/2; | 216 | maple_cpu_freqs[1].frequency = max_freq/2; |
| @@ -231,10 +231,6 @@ static int __init maple_cpufreq_init(void) | |||
| 231 | 231 | ||
| 232 | rc = cpufreq_register_driver(&maple_cpufreq_driver); | 232 | rc = cpufreq_register_driver(&maple_cpufreq_driver); |
| 233 | 233 | ||
| 234 | of_node_put(cpunode); | ||
| 235 | |||
| 236 | return rc; | ||
| 237 | |||
| 238 | bail_noprops: | 234 | bail_noprops: |
| 239 | of_node_put(cpunode); | 235 | of_node_put(cpunode); |
| 240 | 236 | ||
diff --git a/drivers/cpufreq/pasemi-cpufreq.c b/drivers/cpufreq/pasemi-cpufreq.c index 75dfbd2a58ea..c7710c149de8 100644 --- a/drivers/cpufreq/pasemi-cpufreq.c +++ b/drivers/cpufreq/pasemi-cpufreq.c | |||
| @@ -146,6 +146,7 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy) | |||
| 146 | 146 | ||
| 147 | cpu = of_get_cpu_node(policy->cpu, NULL); | 147 | cpu = of_get_cpu_node(policy->cpu, NULL); |
| 148 | 148 | ||
| 149 | of_node_put(cpu); | ||
| 149 | if (!cpu) | 150 | if (!cpu) |
| 150 | goto out; | 151 | goto out; |
| 151 | 152 | ||
diff --git a/drivers/cpufreq/pmac32-cpufreq.c b/drivers/cpufreq/pmac32-cpufreq.c index 52f0d91d30c1..9b4ce2eb8222 100644 --- a/drivers/cpufreq/pmac32-cpufreq.c +++ b/drivers/cpufreq/pmac32-cpufreq.c | |||
| @@ -552,6 +552,7 @@ static int pmac_cpufreq_init_7447A(struct device_node *cpunode) | |||
| 552 | volt_gpio_np = of_find_node_by_name(NULL, "cpu-vcore-select"); | 552 | volt_gpio_np = of_find_node_by_name(NULL, "cpu-vcore-select"); |
| 553 | if (volt_gpio_np) | 553 | if (volt_gpio_np) |
| 554 | voltage_gpio = read_gpio(volt_gpio_np); | 554 | voltage_gpio = read_gpio(volt_gpio_np); |
| 555 | of_node_put(volt_gpio_np); | ||
| 555 | if (!voltage_gpio){ | 556 | if (!voltage_gpio){ |
| 556 | pr_err("missing cpu-vcore-select gpio\n"); | 557 | pr_err("missing cpu-vcore-select gpio\n"); |
| 557 | return 1; | 558 | return 1; |
| @@ -588,6 +589,7 @@ static int pmac_cpufreq_init_750FX(struct device_node *cpunode) | |||
| 588 | if (volt_gpio_np) | 589 | if (volt_gpio_np) |
| 589 | voltage_gpio = read_gpio(volt_gpio_np); | 590 | voltage_gpio = read_gpio(volt_gpio_np); |
| 590 | 591 | ||
| 592 | of_node_put(volt_gpio_np); | ||
| 591 | pvr = mfspr(SPRN_PVR); | 593 | pvr = mfspr(SPRN_PVR); |
| 592 | has_cpu_l2lve = !((pvr & 0xf00) == 0x100); | 594 | has_cpu_l2lve = !((pvr & 0xf00) == 0x100); |
| 593 | 595 | ||
diff --git a/drivers/cpufreq/ppc_cbe_cpufreq.c b/drivers/cpufreq/ppc_cbe_cpufreq.c index 41a0f0be3f9f..8414c3a4ea08 100644 --- a/drivers/cpufreq/ppc_cbe_cpufreq.c +++ b/drivers/cpufreq/ppc_cbe_cpufreq.c | |||
| @@ -86,6 +86,7 @@ static int cbe_cpufreq_cpu_init(struct cpufreq_policy *policy) | |||
| 86 | if (!cbe_get_cpu_pmd_regs(policy->cpu) || | 86 | if (!cbe_get_cpu_pmd_regs(policy->cpu) || |
| 87 | !cbe_get_cpu_mic_tm_regs(policy->cpu)) { | 87 | !cbe_get_cpu_mic_tm_regs(policy->cpu)) { |
| 88 | pr_info("invalid CBE regs pointers for cpufreq\n"); | 88 | pr_info("invalid CBE regs pointers for cpufreq\n"); |
| 89 | of_node_put(cpu); | ||
| 89 | return -EINVAL; | 90 | return -EINVAL; |
| 90 | } | 91 | } |
| 91 | 92 | ||
