aboutsummaryrefslogtreecommitdiff
path: root/arch/i386/kernel/cpu
diff options
context:
space:
mode:
authorGary Hade <garyhade@us.ibm.com>2006-11-06 15:39:23 -0800
committerDave Jones <davej@redhat.com>2006-11-08 17:14:30 -0500
commitd7a1944e8da5e91859b98259189aaaa4d8b7fa07 (patch)
tree78741c84c14e8f53ed624811911766d29ab76013 /arch/i386/kernel/cpu
parent4e74663c5d7eefc1f953b9b0bdacab09917b4eac (diff)
[CPUFREQ] speedstep-centrino should ignore upper performance control bits
On some systems such as the IBM x3650 there are bits set in the upper half of the control values provided by the _PSS object. These bits are only relevant for cpufreq drivers that use IO ports which are not currently supported by the speedstep-centrino driver. The current MSR oriented code assumes that upper bits are not set and thus fails to work correctly when they are. e.g. the control and status value equality check fails even though the ACPI spec allows the inequality. Signed-off-by: Gary Hade <garyh@us.ibm.com> Signed-off-by: Dave Jones <davej@redhat.com>
Diffstat (limited to 'arch/i386/kernel/cpu')
-rw-r--r--arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
index d2d9caf00a2..e3fa03ab19a 100644
--- a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
+++ b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
@@ -463,6 +463,10 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy *policy)
}
for (i=0; i<p->state_count; i++) {
+ /* clear high bits (set by some BIOSes) that are non-relevant and
+ problematic for this driver's MSR only frequency transition code */
+ p->states[i].control &= 0xffff;
+
if (p->states[i].control != p->states[i].status) {
dprintk("Different control (%llu) and status values (%llu)\n",
p->states[i].control, p->states[i].status);