diff options
Diffstat (limited to 'drivers/acpi/processor_idle.c')
| -rw-r--r-- | drivers/acpi/processor_idle.c | 64 |
1 files changed, 26 insertions, 38 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index d1676b1754d9..7c0441f63b39 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
| @@ -305,6 +305,28 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) | |||
| 305 | pr->power.states[ACPI_STATE_C2].latency = acpi_gbl_FADT.C2latency; | 305 | pr->power.states[ACPI_STATE_C2].latency = acpi_gbl_FADT.C2latency; |
| 306 | pr->power.states[ACPI_STATE_C3].latency = acpi_gbl_FADT.C3latency; | 306 | pr->power.states[ACPI_STATE_C3].latency = acpi_gbl_FADT.C3latency; |
| 307 | 307 | ||
| 308 | /* | ||
| 309 | * FADT specified C2 latency must be less than or equal to | ||
| 310 | * 100 microseconds. | ||
| 311 | */ | ||
| 312 | if (acpi_gbl_FADT.C2latency > ACPI_PROCESSOR_MAX_C2_LATENCY) { | ||
| 313 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | ||
| 314 | "C2 latency too large [%d]\n", acpi_gbl_FADT.C2latency)); | ||
| 315 | /* invalidate C2 */ | ||
| 316 | pr->power.states[ACPI_STATE_C2].address = 0; | ||
| 317 | } | ||
| 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 | |||
| 308 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 330 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
| 309 | "lvl2[0x%08x] lvl3[0x%08x]\n", | 331 | "lvl2[0x%08x] lvl3[0x%08x]\n", |
| 310 | pr->power.states[ACPI_STATE_C2].address, | 332 | pr->power.states[ACPI_STATE_C2].address, |
| @@ -494,33 +516,6 @@ static int acpi_processor_get_power_info_cst(struct acpi_processor *pr) | |||
| 494 | return status; | 516 | return status; |
| 495 | } | 517 | } |
| 496 | 518 | ||
| 497 | static void acpi_processor_power_verify_c2(struct acpi_processor_cx *cx) | ||
| 498 | { | ||
| 499 | |||
| 500 | if (!cx->address) | ||
| 501 | return; | ||
| 502 | |||
| 503 | /* | ||
| 504 | * C2 latency must be less than or equal to 100 | ||
| 505 | * microseconds. | ||
| 506 | */ | ||
| 507 | else if (cx->latency > ACPI_PROCESSOR_MAX_C2_LATENCY) { | ||
| 508 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | ||
| 509 | "latency too large [%d]\n", cx->latency)); | ||
| 510 | return; | ||
| 511 | } | ||
| 512 | |||
| 513 | /* | ||
| 514 | * Otherwise we've met all of our C2 requirements. | ||
| 515 | * Normalize the C2 latency to expidite policy | ||
| 516 | */ | ||
| 517 | cx->valid = 1; | ||
| 518 | |||
| 519 | cx->latency_ticks = cx->latency; | ||
| 520 | |||
| 521 | return; | ||
| 522 | } | ||
| 523 | |||
| 524 | static void acpi_processor_power_verify_c3(struct acpi_processor *pr, | 519 | static void acpi_processor_power_verify_c3(struct acpi_processor *pr, |
| 525 | struct acpi_processor_cx *cx) | 520 | struct acpi_processor_cx *cx) |
| 526 | { | 521 | { |
| @@ -532,16 +527,6 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr, | |||
| 532 | return; | 527 | return; |
| 533 | 528 | ||
| 534 | /* | 529 | /* |
| 535 | * C3 latency must be less than or equal to 1000 | ||
| 536 | * microseconds. | ||
| 537 | */ | ||
| 538 | else if (cx->latency > ACPI_PROCESSOR_MAX_C3_LATENCY) { | ||
| 539 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | ||
| 540 | "latency too large [%d]\n", cx->latency)); | ||
| 541 | return; | ||
| 542 | } | ||
| 543 | |||
| 544 | /* | ||
| 545 | * PIIX4 Erratum #18: We don't support C3 when Type-F (fast) | 530 | * PIIX4 Erratum #18: We don't support C3 when Type-F (fast) |
| 546 | * DMA transfers are used by any ISA device to avoid livelock. | 531 | * DMA transfers are used by any ISA device to avoid livelock. |
| 547 | * Note that we could disable Type-F DMA (as recommended by | 532 | * Note that we could disable Type-F DMA (as recommended by |
| @@ -629,7 +614,10 @@ static int acpi_processor_power_verify(struct acpi_processor *pr) | |||
| 629 | break; | 614 | break; |
| 630 | 615 | ||
| 631 | case ACPI_STATE_C2: | 616 | case ACPI_STATE_C2: |
| 632 | acpi_processor_power_verify_c2(cx); | 617 | if (!cx->address) |
| 618 | break; | ||
| 619 | cx->valid = 1; | ||
| 620 | cx->latency_ticks = cx->latency; /* Normalize latency */ | ||
| 633 | break; | 621 | break; |
| 634 | 622 | ||
| 635 | case ACPI_STATE_C3: | 623 | case ACPI_STATE_C3: |
