Commit 1421df63 authored by Philippe Longepe's avatar Philippe Longepe Committed by Rafael J. Wysocki

cpufreq: intel_pstate: Add separate support for Airmont cores

There are two flavors of Atom cores to be supported by intel_pstate,
Silvermont and Airmont, so make the driver distinguish between them by
adding separate frequency tables.

Separate the CPU defaults params for each of them and match the CPU IDs
against them as appropriate.
Signed-off-by: default avatarPhilippe Longepe <philippe.longepe@linux.intel.com>
Signed-off-by: default avatarStephane Gasparini <stephane.gasparini@linux.intel.com>
Acked-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject and changelog ]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 938d21a2
...@@ -577,20 +577,35 @@ static void atom_set_pstate(struct cpudata *cpudata, int pstate) ...@@ -577,20 +577,35 @@ static void atom_set_pstate(struct cpudata *cpudata, int pstate)
wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val); wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val);
} }
#define ATOM_BCLK_FREQS 5 static int silvermont_get_scaling(void)
static int atom_freq_table[ATOM_BCLK_FREQS] = { 833, 1000, 1333, 1167, 800};
static int atom_get_scaling(void)
{ {
u64 value; u64 value;
int i; int i;
/* Defined in Table 35-6 from SDM (Sept 2015) */
static int silvermont_freq_table[] = {
83300, 100000, 133300, 116700, 80000};
rdmsrl(MSR_FSB_FREQ, value); rdmsrl(MSR_FSB_FREQ, value);
i = value & 0x3; i = value & 0x7;
WARN_ON(i > 4);
WARN_ON(i > ATOM_BCLK_FREQS); return silvermont_freq_table[i];
}
return atom_freq_table[i] * 100; static int airmont_get_scaling(void)
{
u64 value;
int i;
/* Defined in Table 35-10 from SDM (Sept 2015) */
static int airmont_freq_table[] = {
83300, 100000, 133300, 116700, 80000,
93300, 90000, 88900, 87500};
rdmsrl(MSR_FSB_FREQ, value);
i = value & 0xF;
WARN_ON(i > 8);
return airmont_freq_table[i];
} }
static void atom_get_vid(struct cpudata *cpudata) static void atom_get_vid(struct cpudata *cpudata)
...@@ -726,7 +741,27 @@ static struct cpu_defaults core_params = { ...@@ -726,7 +741,27 @@ static struct cpu_defaults core_params = {
}, },
}; };
static struct cpu_defaults atom_params = { static struct cpu_defaults silvermont_params = {
.pid_policy = {
.sample_rate_ms = 10,
.deadband = 0,
.setpoint = 60,
.p_gain_pct = 14,
.d_gain_pct = 0,
.i_gain_pct = 4,
},
.funcs = {
.get_max = atom_get_max_pstate,
.get_max_physical = atom_get_max_pstate,
.get_min = atom_get_min_pstate,
.get_turbo = atom_get_turbo_pstate,
.set = atom_set_pstate,
.get_scaling = silvermont_get_scaling,
.get_vid = atom_get_vid,
},
};
static struct cpu_defaults airmont_params = {
.pid_policy = { .pid_policy = {
.sample_rate_ms = 10, .sample_rate_ms = 10,
.deadband = 0, .deadband = 0,
...@@ -741,7 +776,7 @@ static struct cpu_defaults atom_params = { ...@@ -741,7 +776,7 @@ static struct cpu_defaults atom_params = {
.get_min = atom_get_min_pstate, .get_min = atom_get_min_pstate,
.get_turbo = atom_get_turbo_pstate, .get_turbo = atom_get_turbo_pstate,
.set = atom_set_pstate, .set = atom_set_pstate,
.get_scaling = atom_get_scaling, .get_scaling = airmont_get_scaling,
.get_vid = atom_get_vid, .get_vid = atom_get_vid,
}, },
}; };
...@@ -983,7 +1018,7 @@ static void intel_pstate_timer_func(unsigned long __data) ...@@ -983,7 +1018,7 @@ static void intel_pstate_timer_func(unsigned long __data)
static const struct x86_cpu_id intel_pstate_cpu_ids[] = { static const struct x86_cpu_id intel_pstate_cpu_ids[] = {
ICPU(0x2a, core_params), ICPU(0x2a, core_params),
ICPU(0x2d, core_params), ICPU(0x2d, core_params),
ICPU(0x37, atom_params), ICPU(0x37, silvermont_params),
ICPU(0x3a, core_params), ICPU(0x3a, core_params),
ICPU(0x3c, core_params), ICPU(0x3c, core_params),
ICPU(0x3d, core_params), ICPU(0x3d, core_params),
...@@ -992,7 +1027,7 @@ static const struct x86_cpu_id intel_pstate_cpu_ids[] = { ...@@ -992,7 +1027,7 @@ static const struct x86_cpu_id intel_pstate_cpu_ids[] = {
ICPU(0x45, core_params), ICPU(0x45, core_params),
ICPU(0x46, core_params), ICPU(0x46, core_params),
ICPU(0x47, core_params), ICPU(0x47, core_params),
ICPU(0x4c, atom_params), ICPU(0x4c, airmont_params),
ICPU(0x4e, core_params), ICPU(0x4e, core_params),
ICPU(0x4f, core_params), ICPU(0x4f, core_params),
ICPU(0x5e, core_params), ICPU(0x5e, core_params),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment