aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/cpufreq.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-05-06 16:01:14 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-05-06 16:01:14 -0400
commitda43af961b50f1b6367660c0dba0b5fd205c4217 (patch)
tree2f0d60beae3b2a3c5f1d2441e24e90104dc010f9 /drivers/cpufreq/cpufreq.c
parent9485e4ca0b486248ce07d7dd1411a1080d24ed0d (diff)
parent6d45b719cbd51f014bb1b5dd8ed99068d78d36af (diff)
Merge cpufreq fixes going into v4.6.
* pm-cpufreq-fixes: intel_pstate: Fix intel_pstate_get() cpufreq: intel_pstate: Fix HWP on boot CPU after system resume cpufreq: st: enable selective initialization based on the platform cpufreq: intel_pstate: Fix processing for turbo activation ratio
Diffstat (limited to 'drivers/cpufreq/cpufreq.c')
-rw-r--r--drivers/cpufreq/cpufreq.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index a48b998b3304..035513b012ee 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1631,21 +1631,25 @@ void cpufreq_suspend(void)
1631 if (!cpufreq_driver) 1631 if (!cpufreq_driver)
1632 return; 1632 return;
1633 1633
1634 if (!has_target()) 1634 if (!has_target() && !cpufreq_driver->suspend)
1635 goto suspend; 1635 goto suspend;
1636 1636
1637 pr_debug("%s: Suspending Governors\n", __func__); 1637 pr_debug("%s: Suspending Governors\n", __func__);
1638 1638
1639 for_each_active_policy(policy) { 1639 for_each_active_policy(policy) {
1640 down_write(&policy->rwsem); 1640 if (has_target()) {
1641 ret = cpufreq_governor(policy, CPUFREQ_GOV_STOP); 1641 down_write(&policy->rwsem);
1642 up_write(&policy->rwsem); 1642 ret = cpufreq_governor(policy, CPUFREQ_GOV_STOP);
1643 up_write(&policy->rwsem);
1643 1644
1644 if (ret) 1645 if (ret) {
1645 pr_err("%s: Failed to stop governor for policy: %p\n", 1646 pr_err("%s: Failed to stop governor for policy: %p\n",
1646 __func__, policy); 1647 __func__, policy);
1647 else if (cpufreq_driver->suspend 1648 continue;
1648 && cpufreq_driver->suspend(policy)) 1649 }
1650 }
1651
1652 if (cpufreq_driver->suspend && cpufreq_driver->suspend(policy))
1649 pr_err("%s: Failed to suspend driver: %p\n", __func__, 1653 pr_err("%s: Failed to suspend driver: %p\n", __func__,
1650 policy); 1654 policy);
1651 } 1655 }
@@ -1670,7 +1674,7 @@ void cpufreq_resume(void)
1670 1674
1671 cpufreq_suspended = false; 1675 cpufreq_suspended = false;
1672 1676
1673 if (!has_target()) 1677 if (!has_target() && !cpufreq_driver->resume)
1674 return; 1678 return;
1675 1679
1676 pr_debug("%s: Resuming Governors\n", __func__); 1680 pr_debug("%s: Resuming Governors\n", __func__);
@@ -1679,7 +1683,7 @@ void cpufreq_resume(void)
1679 if (cpufreq_driver->resume && cpufreq_driver->resume(policy)) { 1683 if (cpufreq_driver->resume && cpufreq_driver->resume(policy)) {
1680 pr_err("%s: Failed to resume driver: %p\n", __func__, 1684 pr_err("%s: Failed to resume driver: %p\n", __func__,
1681 policy); 1685 policy);
1682 } else { 1686 } else if (has_target()) {
1683 down_write(&policy->rwsem); 1687 down_write(&policy->rwsem);
1684 ret = cpufreq_start_governor(policy); 1688 ret = cpufreq_start_governor(policy);
1685 up_write(&policy->rwsem); 1689 up_write(&policy->rwsem);