aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/cppc_cpufreq.c
diff options
context:
space:
mode:
authorPrakash, Prashanth <pprakash@codeaurora.org>2017-05-11 18:39:44 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-06-26 20:19:39 -0400
commit73808d0fd26b3d3f0f44cc7c469ad1d3c1b570b8 (patch)
tree3099d7f581101eebeb06cebc9245daf0c9f78ff5 /drivers/cpufreq/cppc_cpufreq.c
parent0370f0f975e5561c658aa86e2c372079e6a425eb (diff)
cpufreq / CPPC: Initialize policy->min to lowest nonlinear performance
Description of Lowest Perfomance in ACPI 6.1 specification states: "Lowest Performance is the absolute lowest performance level of the platform. Selecting a performance level lower than the lowest nonlinear performance level may actually cause an efficiency penalty, but should reduce the instantaneous power consumption of the processor. In traditional terms, this represents the T-state range of performance levels." Set the default value of policy->min to Lowest Nonlinear Performance to avoid any potential efficiency penalty. Signed-off-by: Prashanth Prakash <pprakash@codeaurora.org> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Acked-by: Alexey Klimov <alexey.klimov@arm.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/cpufreq/cppc_cpufreq.c')
-rw-r--r--drivers/cpufreq/cppc_cpufreq.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c
index e82bb3c30b92..10be285c9055 100644
--- a/drivers/cpufreq/cppc_cpufreq.c
+++ b/drivers/cpufreq/cppc_cpufreq.c
@@ -144,10 +144,23 @@ static int cppc_cpufreq_cpu_init(struct cpufreq_policy *policy)
144 144
145 cppc_dmi_max_khz = cppc_get_dmi_max_khz(); 145 cppc_dmi_max_khz = cppc_get_dmi_max_khz();
146 146
147 policy->min = cpu->perf_caps.lowest_perf * cppc_dmi_max_khz / cpu->perf_caps.highest_perf; 147 /*
148 * Set min to lowest nonlinear perf to avoid any efficiency penalty (see
149 * Section 8.4.7.1.1.5 of ACPI 6.1 spec)
150 */
151 policy->min = cpu->perf_caps.lowest_nonlinear_perf * cppc_dmi_max_khz /
152 cpu->perf_caps.highest_perf;
148 policy->max = cppc_dmi_max_khz; 153 policy->max = cppc_dmi_max_khz;
149 policy->cpuinfo.min_freq = policy->min; 154
150 policy->cpuinfo.max_freq = policy->max; 155 /*
156 * Set cpuinfo.min_freq to Lowest to make the full range of performance
157 * available if userspace wants to use any perf between lowest & lowest
158 * nonlinear perf
159 */
160 policy->cpuinfo.min_freq = cpu->perf_caps.lowest_perf * cppc_dmi_max_khz /
161 cpu->perf_caps.highest_perf;
162 policy->cpuinfo.max_freq = cppc_dmi_max_khz;
163
151 policy->cpuinfo.transition_latency = cppc_get_transition_latency(cpu_num); 164 policy->cpuinfo.transition_latency = cppc_get_transition_latency(cpu_num);
152 policy->shared_type = cpu->shared_type; 165 policy->shared_type = cpu->shared_type;
153 166