Commit:     8b9c6671f8dbedbd071a9a6c787d4086a8990db4
Parent:     55e337345df892d592bbd9050cbd1fc0c6feb069
Author:     Gary Hade <[EMAIL PROTECTED]>
AuthorDate: Fri Nov 10 11:20:47 2006 -0800
Committer:  Dave Jones <[EMAIL PROTECTED]>
CommitDate: Tue Dec 12 17:20:49 2006 -0500

    [CPUFREQ] speedstep-centrino should ignore upper performance control bits
    On some systems there could be bits set in the upper half of
    the control value 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 failed on the IBM x3650 even though the ACPI
    spec allows inequality.
    Signed-off-by: Gary Hade <[EMAIL PROTECTED]>
    Signed-off-by: Dave Jones <[EMAIL PROTECTED]>
 arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c 
index d2d9caf..5113e92 100644
--- a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
+++ b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
@@ -36,6 +36,7 @@
 #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, 
"speedstep-centrino", msg)
+#define INTEL_MSR_RANGE        (0xffff)
 struct cpu_id
@@ -463,8 +464,9 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy 
        for (i=0; i<p->state_count; i++) {
-               if (p->states[i].control != p->states[i].status) {
-                       dprintk("Different control (%llu) and status values 
+               if ((p->states[i].control & INTEL_MSR_RANGE) !=
+                   (p->states[i].status & INTEL_MSR_RANGE)) {
+                       dprintk("Different MSR bits in control (%llu) and 
status (%llu)\n",
                                p->states[i].control, p->states[i].status);
                        result = -EINVAL;
                        goto err_unreg;
@@ -500,7 +502,7 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy 
         for (i=0; i<p->state_count; i++) {
-               centrino_model[cpu]->op_points[i].index = p->states[i].control;
+               centrino_model[cpu]->op_points[i].index = p->states[i].control 
                centrino_model[cpu]->op_points[i].frequency = 
p->states[i].core_frequency * 1000;
                dprintk("adding state %i with frequency %u and control value 
                        i, centrino_model[cpu]->op_points[i].frequency, 
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to