Commit 3b9f5d56 authored by Dave Jones's avatar Dave Jones Committed by Dave Jones

[CPUFREQ] Improved Banias detection.

The built-in tables are only valid for Pentium M (Banias) processors
with CPUID 6/9/5. So, add a pointer to the proper struct cpu_id to the
cpu_model struct, and re-name _CPU/CPU to _BANIAS/BANIAS
parent 523e88fe
...@@ -55,11 +55,13 @@ static const struct cpu_id cpu_id_banias = { ...@@ -55,11 +55,13 @@ static const struct cpu_id cpu_id_banias = {
struct cpu_model struct cpu_model
{ {
const struct cpu_id *cpu_id;
const char *model_name; const char *model_name;
unsigned max_freq; /* max clock in kHz */ unsigned max_freq; /* max clock in kHz */
struct cpufreq_frequency_table *op_points; /* clock/voltage pairs */ struct cpufreq_frequency_table *op_points; /* clock/voltage pairs */
}; };
static int centrino_verify_cpu_id(struct cpuinfo_x86 *c, const struct cpu_id *x);
/* Operating points for current CPU */ /* Operating points for current CPU */
static struct cpu_model *centrino_model; static struct cpu_model *centrino_model;
...@@ -82,8 +84,8 @@ static struct cpu_model *centrino_model; ...@@ -82,8 +84,8 @@ static struct cpu_model *centrino_model;
* M. * M.
*/ */
/* Ultra Low Voltage Intel Pentium M processor 900MHz */ /* Ultra Low Voltage Intel Pentium M processor 900MHz (Banias) */
static struct cpufreq_frequency_table op_900[] = static struct cpufreq_frequency_table banias_900[] =
{ {
OP(600, 844), OP(600, 844),
OP(800, 988), OP(800, 988),
...@@ -91,8 +93,8 @@ static struct cpufreq_frequency_table op_900[] = ...@@ -91,8 +93,8 @@ static struct cpufreq_frequency_table op_900[] =
{ .frequency = CPUFREQ_TABLE_END } { .frequency = CPUFREQ_TABLE_END }
}; };
/* Ultra Low Voltage Intel Pentium M processor 1000MHz */ /* Ultra Low Voltage Intel Pentium M processor 1000MHz (Banias) */
static struct cpufreq_frequency_table op_1000[] = static struct cpufreq_frequency_table banias_1000[] =
{ {
OP(600, 844), OP(600, 844),
OP(800, 972), OP(800, 972),
...@@ -101,8 +103,8 @@ static struct cpufreq_frequency_table op_1000[] = ...@@ -101,8 +103,8 @@ static struct cpufreq_frequency_table op_1000[] =
{ .frequency = CPUFREQ_TABLE_END } { .frequency = CPUFREQ_TABLE_END }
}; };
/* Low Voltage Intel Pentium M processor 1.10GHz */ /* Low Voltage Intel Pentium M processor 1.10GHz (Banias) */
static struct cpufreq_frequency_table op_1100[] = static struct cpufreq_frequency_table banias_1100[] =
{ {
OP( 600, 956), OP( 600, 956),
OP( 800, 1020), OP( 800, 1020),
...@@ -113,8 +115,8 @@ static struct cpufreq_frequency_table op_1100[] = ...@@ -113,8 +115,8 @@ static struct cpufreq_frequency_table op_1100[] =
}; };
/* Low Voltage Intel Pentium M processor 1.20GHz */ /* Low Voltage Intel Pentium M processor 1.20GHz (Banias) */
static struct cpufreq_frequency_table op_1200[] = static struct cpufreq_frequency_table banias_1200[] =
{ {
OP( 600, 956), OP( 600, 956),
OP( 800, 1004), OP( 800, 1004),
...@@ -125,8 +127,8 @@ static struct cpufreq_frequency_table op_1200[] = ...@@ -125,8 +127,8 @@ static struct cpufreq_frequency_table op_1200[] =
{ .frequency = CPUFREQ_TABLE_END } { .frequency = CPUFREQ_TABLE_END }
}; };
/* Intel Pentium M processor 1.30GHz */ /* Intel Pentium M processor 1.30GHz (Banias) */
static struct cpufreq_frequency_table op_1300[] = static struct cpufreq_frequency_table banias_1300[] =
{ {
OP( 600, 956), OP( 600, 956),
OP( 800, 1260), OP( 800, 1260),
...@@ -136,8 +138,8 @@ static struct cpufreq_frequency_table op_1300[] = ...@@ -136,8 +138,8 @@ static struct cpufreq_frequency_table op_1300[] =
{ .frequency = CPUFREQ_TABLE_END } { .frequency = CPUFREQ_TABLE_END }
}; };
/* Intel Pentium M processor 1.40GHz */ /* Intel Pentium M processor 1.40GHz (Banias) */
static struct cpufreq_frequency_table op_1400[] = static struct cpufreq_frequency_table banias_1400[] =
{ {
OP( 600, 956), OP( 600, 956),
OP( 800, 1180), OP( 800, 1180),
...@@ -147,8 +149,8 @@ static struct cpufreq_frequency_table op_1400[] = ...@@ -147,8 +149,8 @@ static struct cpufreq_frequency_table op_1400[] =
{ .frequency = CPUFREQ_TABLE_END } { .frequency = CPUFREQ_TABLE_END }
}; };
/* Intel Pentium M processor 1.50GHz */ /* Intel Pentium M processor 1.50GHz (Banias) */
static struct cpufreq_frequency_table op_1500[] = static struct cpufreq_frequency_table banias_1500[] =
{ {
OP( 600, 956), OP( 600, 956),
OP( 800, 1116), OP( 800, 1116),
...@@ -159,8 +161,8 @@ static struct cpufreq_frequency_table op_1500[] = ...@@ -159,8 +161,8 @@ static struct cpufreq_frequency_table op_1500[] =
{ .frequency = CPUFREQ_TABLE_END } { .frequency = CPUFREQ_TABLE_END }
}; };
/* Intel Pentium M processor 1.60GHz */ /* Intel Pentium M processor 1.60GHz (Banias) */
static struct cpufreq_frequency_table op_1600[] = static struct cpufreq_frequency_table banias_1600[] =
{ {
OP( 600, 956), OP( 600, 956),
OP( 800, 1036), OP( 800, 1036),
...@@ -171,8 +173,8 @@ static struct cpufreq_frequency_table op_1600[] = ...@@ -171,8 +173,8 @@ static struct cpufreq_frequency_table op_1600[] =
{ .frequency = CPUFREQ_TABLE_END } { .frequency = CPUFREQ_TABLE_END }
}; };
/* Intel Pentium M processor 1.70GHz */ /* Intel Pentium M processor 1.70GHz (Banias) */
static struct cpufreq_frequency_table op_1700[] = static struct cpufreq_frequency_table banias_1700[] =
{ {
OP( 600, 956), OP( 600, 956),
OP( 800, 1004), OP( 800, 1004),
...@@ -184,26 +186,31 @@ static struct cpufreq_frequency_table op_1700[] = ...@@ -184,26 +186,31 @@ static struct cpufreq_frequency_table op_1700[] =
}; };
#undef OP #undef OP
#define _CPU(max, name) \ #define _BANIAS(cpuid, max, name) \
{ "Intel(R) Pentium(R) M processor " name "MHz", (max)*1000, op_##max } { .cpu_id = cpuid, \
#define CPU(max) _CPU(max, #max) .model_name = "Intel(R) Pentium(R) M processor " name "MHz", \
.max_freq = (max)*1000, \
.op_points = banias_##max, \
}
#define BANIAS(max) _BANIAS(&cpu_id_banias, max, #max)
/* CPU models, their operating frequency range, and freq/voltage /* CPU models, their operating frequency range, and freq/voltage
operating points */ operating points */
static struct cpu_model models[] = static struct cpu_model models[] =
{ {
_CPU( 900, " 900"), _BANIAS(&cpu_id_banias, 900, " 900"),
CPU(1000), BANIAS(1000),
CPU(1100), BANIAS(1100),
CPU(1200), BANIAS(1200),
CPU(1300), BANIAS(1300),
CPU(1400), BANIAS(1400),
CPU(1500), BANIAS(1500),
CPU(1600), BANIAS(1600),
CPU(1700), BANIAS(1700),
{ 0, } { 0, }
}; };
#undef CPU #undef _BANIAS
#undef BANIAS
static int centrino_cpu_init_table(struct cpufreq_policy *policy) static int centrino_cpu_init_table(struct cpufreq_policy *policy)
{ {
...@@ -211,7 +218,8 @@ static int centrino_cpu_init_table(struct cpufreq_policy *policy) ...@@ -211,7 +218,8 @@ static int centrino_cpu_init_table(struct cpufreq_policy *policy)
struct cpu_model *model; struct cpu_model *model;
for(model = models; model->model_name != NULL; model++) for(model = models; model->model_name != NULL; model++)
if (strcmp(cpu->x86_model_id, model->model_name) == 0) if ((strcmp(cpu->x86_model_id, model->model_name) == 0) &&
(!centrino_verify_cpu_id(cpu, model->cpu_id)))
break; break;
if (model->model_name == NULL) { if (model->model_name == NULL) {
printk(KERN_INFO PFX "no support for CPU model \"%s\": " printk(KERN_INFO PFX "no support for CPU model \"%s\": "
......
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