|
@@ -383,6 +383,7 @@ static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max)
|
|
|
static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
|
|
|
{
|
|
|
int max_perf, min_perf;
|
|
|
+ u64 val;
|
|
|
|
|
|
intel_pstate_get_min_max(cpu, &min_perf, &max_perf);
|
|
|
|
|
@@ -394,11 +395,11 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
|
|
|
trace_cpu_frequency(pstate * 100000, cpu->cpu);
|
|
|
|
|
|
cpu->pstate.current_pstate = pstate;
|
|
|
+ val = pstate << 8;
|
|
|
if (limits.no_turbo)
|
|
|
- wrmsrl(MSR_IA32_PERF_CTL, BIT(32) | (pstate << 8));
|
|
|
- else
|
|
|
- wrmsrl(MSR_IA32_PERF_CTL, pstate << 8);
|
|
|
+ val |= (u64)1 << 32;
|
|
|
|
|
|
+ wrmsrl(MSR_IA32_PERF_CTL, val);
|
|
|
}
|
|
|
|
|
|
static inline void intel_pstate_pstate_increase(struct cpudata *cpu, int steps)
|
|
@@ -637,8 +638,8 @@ static int intel_pstate_cpu_exit(struct cpufreq_policy *policy)
|
|
|
|
|
|
static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
|
|
|
{
|
|
|
- int rc, min_pstate, max_pstate;
|
|
|
struct cpudata *cpu;
|
|
|
+ int rc;
|
|
|
|
|
|
rc = intel_pstate_init_cpu(policy->cpu);
|
|
|
if (rc)
|
|
@@ -652,9 +653,8 @@ static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
|
|
|
else
|
|
|
policy->policy = CPUFREQ_POLICY_POWERSAVE;
|
|
|
|
|
|
- intel_pstate_get_min_max(cpu, &min_pstate, &max_pstate);
|
|
|
- policy->min = min_pstate * 100000;
|
|
|
- policy->max = max_pstate * 100000;
|
|
|
+ policy->min = cpu->pstate.min_pstate * 100000;
|
|
|
+ policy->max = cpu->pstate.turbo_pstate * 100000;
|
|
|
|
|
|
/* cpuinfo and default policy values */
|
|
|
policy->cpuinfo.min_freq = cpu->pstate.min_pstate * 100000;
|