|
@@ -253,9 +253,6 @@ void intel_init_thermal(struct cpuinfo_x86 *c)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (cpu_has(c, X86_FEATURE_TM2) && (l & MSR_IA32_MISC_ENABLE_TM2))
|
|
|
- tm2 = 1;
|
|
|
-
|
|
|
/* Check whether a vector already exists */
|
|
|
if (h & APIC_VECTOR_MASK) {
|
|
|
printk(KERN_DEBUG
|
|
@@ -264,6 +261,16 @@ void intel_init_thermal(struct cpuinfo_x86 *c)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ /* early Pentium M models use different method for enabling TM2 */
|
|
|
+ if (cpu_has(c, X86_FEATURE_TM2)) {
|
|
|
+ if (c->x86 == 6 && (c->x86_model == 9 || c->x86_model == 13)) {
|
|
|
+ rdmsr(MSR_THERM2_CTL, l, h);
|
|
|
+ if (l & MSR_THERM2_CTL_TM_SELECT)
|
|
|
+ tm2 = 1;
|
|
|
+ } else if (l & MSR_IA32_MISC_ENABLE_TM2)
|
|
|
+ tm2 = 1;
|
|
|
+ }
|
|
|
+
|
|
|
/* We'll mask the thermal vector in the lapic till we're ready: */
|
|
|
h = THERMAL_APIC_VECTOR | APIC_DM_FIXED | APIC_LVT_MASKED;
|
|
|
apic_write(APIC_LVTTHMR, h);
|