aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2010-01-19 23:10:04 -0500
committerLen Brown <len.brown@intel.com>2010-01-20 00:54:15 -0500
commita6d72c189f6c4292ba1a323e8af24083790529f8 (patch)
tree4ae87d681a844997f94ff987d060b2c44dac30ed /drivers/acpi
parent5d76b6f6c17572e662f5c99c2023adae92100855 (diff)
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>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/processor_idle.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 8f6da9acc8e4..2c543b42eb1c 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -316,6 +316,17 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
316 pr->power.states[ACPI_STATE_C2].address = 0; 316 pr->power.states[ACPI_STATE_C2].address = 0;
317 } 317 }
318 318
319 /*
320 * FADT supplied C3 latency must be less than or equal to
321 * 1000 microseconds.
322 */
323 if (acpi_gbl_FADT.C3latency > ACPI_PROCESSOR_MAX_C3_LATENCY) {
324 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
325 "C3 latency too large [%d]\n", acpi_gbl_FADT.C3latency));
326 /* invalidate C3 */
327 pr->power.states[ACPI_STATE_C3].address = 0;
328 }
329
319 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 330 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
320 "lvl2[0x%08x] lvl3[0x%08x]\n", 331 "lvl2[0x%08x] lvl3[0x%08x]\n",
321 pr->power.states[ACPI_STATE_C2].address, 332 pr->power.states[ACPI_STATE_C2].address,
@@ -533,16 +544,6 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
533 return; 544 return;
534 545
535 /* 546 /*
536 * C3 latency must be less than or equal to 1000
537 * microseconds.
538 */
539 else if (cx->latency > ACPI_PROCESSOR_MAX_C3_LATENCY) {
540 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
541 "latency too large [%d]\n", cx->latency));
542 return;
543 }
544
545 /*
546 * PIIX4 Erratum #18: We don't support C3 when Type-F (fast) 547 * PIIX4 Erratum #18: We don't support C3 when Type-F (fast)
547 * DMA transfers are used by any ISA device to avoid livelock. 548 * DMA transfers are used by any ISA device to avoid livelock.
548 * Note that we could disable Type-F DMA (as recommended by 549 * Note that we could disable Type-F DMA (as recommended by