|
@@ -706,19 +706,20 @@ static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max)
|
|
|
*min = clamp_t(int, min_perf, cpu->pstate.min_pstate, max_perf);
|
|
|
}
|
|
|
|
|
|
-static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
|
|
|
+static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate, bool force)
|
|
|
{
|
|
|
int max_perf, min_perf;
|
|
|
|
|
|
- update_turbo_state();
|
|
|
-
|
|
|
- intel_pstate_get_min_max(cpu, &min_perf, &max_perf);
|
|
|
+ if (force) {
|
|
|
+ update_turbo_state();
|
|
|
|
|
|
- pstate = clamp_t(int, pstate, min_perf, max_perf);
|
|
|
+ intel_pstate_get_min_max(cpu, &min_perf, &max_perf);
|
|
|
|
|
|
- if (pstate == cpu->pstate.current_pstate)
|
|
|
- return;
|
|
|
+ pstate = clamp_t(int, pstate, min_perf, max_perf);
|
|
|
|
|
|
+ if (pstate == cpu->pstate.current_pstate)
|
|
|
+ return;
|
|
|
+ }
|
|
|
trace_cpu_frequency(pstate * cpu->pstate.scaling, cpu->cpu);
|
|
|
|
|
|
cpu->pstate.current_pstate = pstate;
|
|
@@ -735,7 +736,7 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
|
|
|
|
|
|
if (pstate_funcs.get_vid)
|
|
|
pstate_funcs.get_vid(cpu);
|
|
|
- intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate);
|
|
|
+ intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate, false);
|
|
|
}
|
|
|
|
|
|
static inline void intel_pstate_calc_busy(struct cpudata *cpu)
|
|
@@ -855,7 +856,7 @@ static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu)
|
|
|
ctl = pid_calc(pid, busy_scaled);
|
|
|
|
|
|
/* Negative values of ctl increase the pstate and vice versa */
|
|
|
- intel_pstate_set_pstate(cpu, cpu->pstate.current_pstate - ctl);
|
|
|
+ intel_pstate_set_pstate(cpu, cpu->pstate.current_pstate - ctl, true);
|
|
|
|
|
|
sample = &cpu->sample;
|
|
|
trace_pstate_sample(fp_toint(sample->core_pct_busy),
|
|
@@ -1018,7 +1019,7 @@ static void intel_pstate_stop_cpu(struct cpufreq_policy *policy)
|
|
|
if (hwp_active)
|
|
|
return;
|
|
|
|
|
|
- intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate);
|
|
|
+ intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate, false);
|
|
|
}
|
|
|
|
|
|
static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
|