ACPI: allow C3 > 1000usec
Do for C3 what the previous patch did for C2. The C2 patch was in response to a highly visible and multiply reported C-state/turbo failure, while this change has no bug report in-hand. This will enable C3 in Linux on systems where BIOS overstates C3 latency in _CST. It will also enable future systems which may actually have C3 > 1000usec. Linux has always ignored ACPI BIOS C3 with exit latency > 1000 usec, and the ACPI spec is clear that is correct FADT-supplied C3. However, the ACPI spec explicitly states that _CST-supplied C-states have no latency limits. So move the 1000usec C3 test out of the code shared by FADT and _CST code-paths, and into the FADT-specific path. Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
5d76b6f6c1
commit
a6d72c189f
|
@ -316,6 +316,17 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
|
|||
pr->power.states[ACPI_STATE_C2].address = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* FADT supplied C3 latency must be less than or equal to
|
||||
* 1000 microseconds.
|
||||
*/
|
||||
if (acpi_gbl_FADT.C3latency > ACPI_PROCESSOR_MAX_C3_LATENCY) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"C3 latency too large [%d]\n", acpi_gbl_FADT.C3latency));
|
||||
/* invalidate C3 */
|
||||
pr->power.states[ACPI_STATE_C3].address = 0;
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"lvl2[0x%08x] lvl3[0x%08x]\n",
|
||||
pr->power.states[ACPI_STATE_C2].address,
|
||||
|
@ -532,16 +543,6 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
|
|||
if (!cx->address)
|
||||
return;
|
||||
|
||||
/*
|
||||
* C3 latency must be less than or equal to 1000
|
||||
* microseconds.
|
||||
*/
|
||||
else if (cx->latency > ACPI_PROCESSOR_MAX_C3_LATENCY) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"latency too large [%d]\n", cx->latency));
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* PIIX4 Erratum #18: We don't support C3 when Type-F (fast)
|
||||
* DMA transfers are used by any ISA device to avoid livelock.
|
||||
|
|
Loading…
Reference in New Issue