Commit 92091c43 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'pm-4.12-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull power management fixes from Rafael Wysocki:
 "These revert a recent cpufreq schedutil governor change that turned
  out to be problematic and fix a few minor issues in cpufreq, cpuidle
  and the Exynos devfreq drivers.

  Specifics:

   - Revert a recent cpufreq schedutil governor change that caused some
     systems to behave undesirably (Rafael Wysocki).

   - Fix a cpufreq conservative governor issue introduced during the
     3.10 cycle that prevents it from working as expected in some
     situations (Tomasz Wilczyński).

   - Fix an error code path in the generic cpuidle driver for DT-based
     systems (Christophe Jaillet).

   - Fix three minor issues in devfreq drivers for Exynos (Arvind Yadav,
     Krzysztof Kozlowski)"

* tag 'pm-4.12-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  cpuidle: dt: Add missing 'of_node_put()'
  cpufreq: conservative: Allow down_threshold to take values from 1 to 10
  Revert "cpufreq: schedutil: Reduce frequencies slower"
  PM / devfreq: exynos-ppmu: Staticize event list
  PM / devfreq: exynos-ppmu: Handle return value of clk_prepare_enable
  PM / devfreq: exynos-nocp: Handle return value of clk_prepare_enable
parents b45edc2d f63e4f7d
...@@ -185,8 +185,8 @@ static ssize_t store_down_threshold(struct gov_attr_set *attr_set, ...@@ -185,8 +185,8 @@ static ssize_t store_down_threshold(struct gov_attr_set *attr_set,
int ret; int ret;
ret = sscanf(buf, "%u", &input); ret = sscanf(buf, "%u", &input);
/* cannot be lower than 11 otherwise freq will not fall */ /* cannot be lower than 1 otherwise freq will not fall */
if (ret != 1 || input < 11 || input > 100 || if (ret != 1 || input < 1 || input > 100 ||
input >= dbs_data->up_threshold) input >= dbs_data->up_threshold)
return -EINVAL; return -EINVAL;
......
...@@ -180,8 +180,10 @@ int dt_init_idle_driver(struct cpuidle_driver *drv, ...@@ -180,8 +180,10 @@ int dt_init_idle_driver(struct cpuidle_driver *drv,
if (!state_node) if (!state_node)
break; break;
if (!of_device_is_available(state_node)) if (!of_device_is_available(state_node)) {
of_node_put(state_node);
continue; continue;
}
if (!idle_state_valid(state_node, i, cpumask)) { if (!idle_state_valid(state_node, i, cpumask)) {
pr_warn("%s idle state not valid, bailing out\n", pr_warn("%s idle state not valid, bailing out\n",
......
...@@ -267,7 +267,11 @@ static int exynos_nocp_probe(struct platform_device *pdev) ...@@ -267,7 +267,11 @@ static int exynos_nocp_probe(struct platform_device *pdev)
} }
platform_set_drvdata(pdev, nocp); platform_set_drvdata(pdev, nocp);
clk_prepare_enable(nocp->clk); ret = clk_prepare_enable(nocp->clk);
if (ret) {
dev_err(&pdev->dev, "failed to prepare ppmu clock\n");
return ret;
}
pr_info("exynos-nocp: new NoC Probe device registered: %s\n", pr_info("exynos-nocp: new NoC Probe device registered: %s\n",
dev_name(dev)); dev_name(dev));
......
...@@ -44,7 +44,7 @@ struct exynos_ppmu { ...@@ -44,7 +44,7 @@ struct exynos_ppmu {
{ "ppmu-event2-"#name, PPMU_PMNCNT2 }, \ { "ppmu-event2-"#name, PPMU_PMNCNT2 }, \
{ "ppmu-event3-"#name, PPMU_PMNCNT3 } { "ppmu-event3-"#name, PPMU_PMNCNT3 }
struct __exynos_ppmu_events { static struct __exynos_ppmu_events {
char *name; char *name;
int id; int id;
} ppmu_events[] = { } ppmu_events[] = {
...@@ -648,7 +648,11 @@ static int exynos_ppmu_probe(struct platform_device *pdev) ...@@ -648,7 +648,11 @@ static int exynos_ppmu_probe(struct platform_device *pdev)
dev_name(&pdev->dev), desc[i].name); dev_name(&pdev->dev), desc[i].name);
} }
clk_prepare_enable(info->ppmu.clk); ret = clk_prepare_enable(info->ppmu.clk);
if (ret) {
dev_err(&pdev->dev, "failed to prepare ppmu clock\n");
return ret;
}
return 0; return 0;
} }
......
...@@ -101,9 +101,6 @@ static void sugov_update_commit(struct sugov_policy *sg_policy, u64 time, ...@@ -101,9 +101,6 @@ static void sugov_update_commit(struct sugov_policy *sg_policy, u64 time,
if (sg_policy->next_freq == next_freq) if (sg_policy->next_freq == next_freq)
return; return;
if (sg_policy->next_freq > next_freq)
next_freq = (sg_policy->next_freq + next_freq) >> 1;
sg_policy->next_freq = next_freq; sg_policy->next_freq = next_freq;
sg_policy->last_freq_update_time = time; sg_policy->last_freq_update_time = time;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment