diff options
| author | Len Brown <len.brown@intel.com> | 2010-01-19 23:10:04 -0500 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2010-01-20 00:54:15 -0500 |
| commit | a6d72c189f6c4292ba1a323e8af24083790529f8 (patch) | |
| tree | 4ae87d681a844997f94ff987d060b2c44dac30ed | |
| parent | 5d76b6f6c17572e662f5c99c2023adae92100855 (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>
| -rw-r--r-- | drivers/acpi/processor_idle.c | 21 |
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 |
