Index: trunk/i386/libsaio/acpi_patcher.c =================================================================== --- trunk/i386/libsaio/acpi_patcher.c (revision 629) +++ trunk/i386/libsaio/acpi_patcher.c (revision 630) @@ -495,13 +495,29 @@ case CPU_MODEL_WESTMERE: case CPU_MODEL_WESTMERE_EX: { - uint8_t i; + maximum.Control = rdmsr64(MSR_IA32_PERF_STATUS) & 0xff; // Seems it always contains maximum multiplier value (with turbo, that's we need)... - maximum.Control = rdmsr64(MSR_IA32_PERF_STATUS) & 0xff; // Is it allways the maximum multiplier? + /*uint8_t i; + // Probe for lowest fid + for (i = maximum.Control; i >= 0x7; i--) + { + wrmsr64(MSR_IA32_PERF_CONTROL, i); + delay(1); + minimum.Control = rdmsr64(MSR_IA32_PERF_STATUS); + delay(1); + }*/ - // fix me: dirty method to get lowest multiplier... Hardcoded value! - minimum.Control = 0x09; + if (!minimum.Control) + { + // fix me: dirty method to get lowest multiplier... Hardcoded value! + if (strstr(Platform.CPU.BrandString, "Core(TM) i7")) + minimum.Control = 0x07; + else + minimum.Control = 0x09; + } + verbose("P-States: min 0x%x, max 0x%x\n", minimum.Control, maximum.Control); + // Sanity check if (maximum.Control < minimum.Control) {