More power management and ACPI fixes for v4.4-rc3
- Fix a recent regression in the cpufreq core causing it to fail to clean up sysfs directories properly on cpufreq driver removal (Viresh Kumar). - Fix a build problem in the SCPI support code recently added to the arm_big_little cpufreq driver (Punit Agrawal). - Fix up the recently added CPPC cpufreq frontend to process the CPU coordination information provided by the platform firmware correctly (Ashwin Chaugule). - Fix the intel_pstate driver to behave as intended when switched over to the "performance" mode via sysfs if hardware-driven P-state selection (HWP) is enabled (Alexandra Yates). - Fix two rounding errors in the intel_pstate driver that sometimes cause it to use lower P-states than requested (Prarit Bhargava). / -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABCAAGBQJWWH0cAAoJEILEb/54YlRx4CYP/RaAg2GsuMci2odcBy4STJ1p /kPd+ocZDFZd9Zen25h4MpI/isSZVLOC4QUvlARhpnP6lril7XlO33vGyvbJYK8E ffFjg/XfPfisgTnNqVduHBFAXwLp1yNjjPDzpGNL25MagI9unl37s0oAURmE63/9 KFWoiKkqaoNh+FbMFBrYPbalikSxVMJ+0jBtCdMZcvhOjIPF/MGRYLLSlcY0vB5t dtf3u7GWmPNTm+bQo/nCCGtWwa9plDLGqdkl6HXi10O0lcjAdIZAD6q67KjTxWtt CfP/GnU+mGEaBJFhT/xdiHo9x0li//J3WtnWZWKNlgzDddyRsztP1ap+nvx5EzjG er+K3fYtrx4iziLxXk6DpxNRUxgT5ZWiSgu19OE8l3sEYI+JieXY01yC1QstkmKy aQKmTmPAE2tFvTYIwwcSlW5g3zN1QlA+r7kh0PNyY34cUfrQX6TXxL+V31X1bQct u1VVKNyLu+6+ukwSTQR+qWskvsbh2+CUeKYCssQinYOrVddC30cD5G66bEms6j+3 Y1NxhXD7Cm1qufuypikR/YzThmkBIATRrivsQTqXcl6N/BFDEOhpJLpI8dLX90RD bHf95yIRSt29NBOf2tGUu9iYCFGKvTdwmmwqpF3EmYwjbSdPVmTOIkffCJrwp2PK 5H2Ush0cwwGitQMUFs/p =Blij -----END PGP SIGNATURE----- Merge tag 'pm+acpi-4.4-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull more power management and ACPI fixes from Rafael Wysocki: "These fix one recent regression (cpufreq core), fix up two features added recently (ACPI CPPC support, SCPI support in the arm_big_little cpufreq driver) and fix three older bugs in the intel_pstate driver. Specifics: - Fix a recent regression in the cpufreq core causing it to fail to clean up sysfs directories properly on cpufreq driver removal (Viresh Kumar). - Fix a build problem in the SCPI support code recently added to the arm_big_little cpufreq driver (Punit Agrawal). - Fix up the recently added CPPC cpufreq frontend to process the CPU coordination information provided by the platform firmware correctly (Ashwin Chaugule). - Fix the intel_pstate driver to behave as intended when switched over to the "performance" mode via sysfs if hardware-driven P-state selection (HWP) is enabled (Alexandra Yates). - Fix two rounding errors in the intel_pstate driver that sometimes cause it to use lower P-states than requested (Prarit Bhargava)" * tag 'pm+acpi-4.4-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: intel_pstate: Fix "performance" mode behavior with HWP enabled cpufreq: SCPI: Depend on SCPI clk driver cpufreq: intel_pstate: Fix limits->max_perf rounding error cpufreq: intel_pstate: Fix limits->max_policy_pct rounding error cpufreq: Always remove sysfs cpuX/cpufreq link on ->remove_dev() cpufreq: CPPC: Initialize and check CPUFreq CPU co-ord type correctly
This commit is contained in:
commit
a3b11c79ad
|
@ -202,7 +202,7 @@ config ARM_SA1110_CPUFREQ
|
|||
|
||||
config ARM_SCPI_CPUFREQ
|
||||
tristate "SCPI based CPUfreq driver"
|
||||
depends on ARM_BIG_LITTLE_CPUFREQ && ARM_SCPI_PROTOCOL
|
||||
depends on ARM_BIG_LITTLE_CPUFREQ && ARM_SCPI_PROTOCOL && COMMON_CLK_SCPI
|
||||
help
|
||||
This adds the CPUfreq driver support for ARM big.LITTLE platforms
|
||||
using SCPI protocol for CPU power management.
|
||||
|
|
|
@ -98,10 +98,11 @@ static int cppc_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
|||
policy->max = cpu->perf_caps.highest_perf;
|
||||
policy->cpuinfo.min_freq = policy->min;
|
||||
policy->cpuinfo.max_freq = policy->max;
|
||||
policy->shared_type = cpu->shared_type;
|
||||
|
||||
if (policy->shared_type == CPUFREQ_SHARED_TYPE_ANY)
|
||||
cpumask_copy(policy->cpus, cpu->shared_cpu_map);
|
||||
else {
|
||||
else if (policy->shared_type == CPUFREQ_SHARED_TYPE_ALL) {
|
||||
/* Support only SW_ANY for now. */
|
||||
pr_debug("Unsupported CPU co-ord type\n");
|
||||
return -EFAULT;
|
||||
|
|
|
@ -1401,13 +1401,10 @@ static void cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
|
|||
}
|
||||
|
||||
cpumask_clear_cpu(cpu, policy->real_cpus);
|
||||
|
||||
if (cpumask_empty(policy->real_cpus)) {
|
||||
cpufreq_policy_free(policy, true);
|
||||
return;
|
||||
}
|
||||
|
||||
remove_cpu_dev_symlink(policy, cpu);
|
||||
|
||||
if (cpumask_empty(policy->real_cpus))
|
||||
cpufreq_policy_free(policy, true);
|
||||
}
|
||||
|
||||
static void handle_update(struct work_struct *work)
|
||||
|
|
|
@ -1101,6 +1101,8 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy)
|
|||
policy->max >= policy->cpuinfo.max_freq) {
|
||||
pr_debug("intel_pstate: set performance\n");
|
||||
limits = &performance_limits;
|
||||
if (hwp_active)
|
||||
intel_pstate_hwp_set();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1108,7 +1110,8 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy)
|
|||
limits = &powersave_limits;
|
||||
limits->min_policy_pct = (policy->min * 100) / policy->cpuinfo.max_freq;
|
||||
limits->min_policy_pct = clamp_t(int, limits->min_policy_pct, 0 , 100);
|
||||
limits->max_policy_pct = (policy->max * 100) / policy->cpuinfo.max_freq;
|
||||
limits->max_policy_pct = DIV_ROUND_UP(policy->max * 100,
|
||||
policy->cpuinfo.max_freq);
|
||||
limits->max_policy_pct = clamp_t(int, limits->max_policy_pct, 0 , 100);
|
||||
|
||||
/* Normalize user input to [min_policy_pct, max_policy_pct] */
|
||||
|
@ -1120,6 +1123,7 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy)
|
|||
limits->max_sysfs_pct);
|
||||
limits->max_perf_pct = max(limits->min_policy_pct,
|
||||
limits->max_perf_pct);
|
||||
limits->max_perf = round_up(limits->max_perf, 8);
|
||||
|
||||
/* Make sure min_perf_pct <= max_perf_pct */
|
||||
limits->min_perf_pct = min(limits->max_perf_pct, limits->min_perf_pct);
|
||||
|
|
Loading…
Reference in New Issue