Skip to contentSkip to conversation

speedstep-centrino: ignore 0xffff'ed P-States

PATCH New Dominik Brodowski 1 participant 1 message Jul 30, 2004

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 speedstep-centrino: ignore 0xffff'ed P-States

Some ACPI tables contain 0xffff'ed entries for "P-States". This is obviously incorrect according to the ACPI specifications, nonetheless it should "just work". So, simply ignore such invalid P-States instead of aborting. Thanks to Frederik Reiss for testing (and fixing) this patch.

arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c +8 -0
diff -ruN linux-original/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c linux/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
@@ -347,6 +347,12 @@
 			goto err_unreg;
 		}
 
+		if (p.states[i].core_frequency > p.states[0].core_frequency) {
+			printk(KERN_DEBUG "P%u has larger frequency than P0, skipping\n", i);
+			p.states[i].core_frequency = 0;
+			continue;
+		}
+
 		if (extract_clock(p.states[i].control) != 
 		    (p.states[i].core_frequency * 1000)) {
 			printk(KERN_DEBUG "Invalid encoded frequency\n");
@@ -378,6 +384,8 @@
 		centrino_model->op_points[i].frequency = p.states[i].core_frequency * 1000;
 		if (cur_freq == centrino_model->op_points[i].frequency)
 			p.state = i;
+		if (!p.states[i].core_frequency)
+			centrino_model->op_points[i].frequency = CPUFREQ_ENTRY_INVALID;
 	}
 	centrino_model->op_points[p.state_count].frequency = CPUFREQ_TABLE_END;