Commit d56abc8b authored by Dave Jones's avatar Dave Jones Committed by Dave Jones

[CPUFREQ] Initial Dothan speedstep support.

here's a patch on top of the above patch that adds all of the
dothan frequency/voltages for processors 715, 725, 735, 745, 755

Tested and working as it should so far with a 745. The stepping in the
model table for the others may need to be tweaked.

The Dothan processor datasheet 30218903.pdf defines 4 voltages for
each frequency (VID#A through VID#D) whereas Banias only suggests a
typical voltage and no min or max for each freq so i've used the OP
macro to allow definition of all voltages (A through D) but the macro
currently just uses VID#C at compile time (the second lowest voltage
profile).

The docs define these 4 profiles but don't say anywhere in which cases
they should be used. I guess it may be a case of usage of the differing
profiles based on the tolerance and accuracy of the power supply in use
for the specific application.

From: Michael Clark
Signed-off-by: default avatarDave Jones <davej@redhat.com>
parent 04529916
......@@ -195,6 +195,82 @@ static struct cpufreq_frequency_table banias_1700[] =
OP(1700, 1484),
{ .frequency = CPUFREQ_TABLE_END }
};
#undef OP
/* Dothan processor datasheet 30218903.pdf defines 4 voltages for each
frequency (VID#A through VID#D) - this macro allows us to define all
of these but we only use the VID#C voltages at compile time - this may
need some work if we want to select the voltage profile at runtime. */
#define OP(mhz, mva, mvb, mvc, mvd) \
{ \
.frequency = (mhz) * 1000, \
.index = (((mhz)/100) << 8) | ((mvc - 700) / 16) \
}
/* Intel Pentium M processor 715 / 1.50GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1500[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1068, 1068, 1068, 1052),
OP(1000, 1148, 1148, 1132, 1116),
OP(1200, 1228, 1212, 1212, 1180),
OP(1500, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};
/* Intel Pentium M processor 725 / 1.60GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1600[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1068, 1068, 1052, 1052),
OP(1000, 1132, 1132, 1116, 1116),
OP(1200, 1212, 1196, 1180, 1164),
OP(1400, 1276, 1260, 1244, 1228),
OP(1600, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};
/* Intel Pentium M processor 735 / 1.70GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1700[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1052, 1052, 1052, 1052),
OP(1000, 1116, 1116, 1116, 1100),
OP(1200, 1180, 1180, 1164, 1148),
OP(1400, 1244, 1244, 1228, 1212),
OP(1700, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};
/* Intel Pentium M processor 745 / 1.80GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1800[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1052, 1052, 1052, 1036),
OP(1000, 1116, 1100, 1100, 1084),
OP(1200, 1164, 1164, 1148, 1132),
OP(1400, 1228, 1212, 1212, 1180),
OP(1600, 1292, 1276, 1260, 1228),
OP(1800, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};
/* Intel Pentium M processor 755 / 2.00GHz (Dothan) */
static struct cpufreq_frequency_table dothan_2000[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1052, 1036, 1036, 1036),
OP(1000, 1100, 1084, 1084, 1084),
OP(1200, 1148, 1132, 1132, 1116),
OP(1400, 1196, 1180, 1180, 1164),
OP(1600, 1244, 1228, 1228, 1196),
OP(1800, 1292, 1276, 1276, 1244),
OP(2000, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};
#undef OP
#define _BANIAS(cpuid, max, name) \
......@@ -205,6 +281,13 @@ static struct cpufreq_frequency_table banias_1700[] =
}
#define BANIAS(max) _BANIAS(&cpu_ids[CPU_BANIAS], max, #max)
#define DOTHAN(cpuid, max, name) \
{ .cpu_id = cpuid, \
.model_name = "Intel(R) Pentium(R) M processor " name "GHz", \
.max_freq = (max)*1000, \
.op_points = dothan_##max, \
}
/* CPU models, their operating frequency range, and freq/voltage
operating points */
static struct cpu_model models[] =
......@@ -218,6 +301,11 @@ static struct cpu_model models[] =
BANIAS(1500),
BANIAS(1600),
BANIAS(1700),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1500, "1.50"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1600, "1.60"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1700, "1.70"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1800, "1.80"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 2000, "2.00"),
/* NULL model_name is a wildcard */
{ &cpu_ids[CPU_DOTHAN_A1], NULL, 0, NULL },
......@@ -227,6 +315,7 @@ static struct cpu_model models[] =
};
#undef _BANIAS
#undef BANIAS
#undef DOTHAN
static int centrino_cpu_init_table(struct cpufreq_policy *policy)
{
......
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