|
@@ -305,6 +305,17 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
|
|
|
pr->power.states[ACPI_STATE_C2].latency = acpi_gbl_FADT.C2latency;
|
|
|
pr->power.states[ACPI_STATE_C3].latency = acpi_gbl_FADT.C3latency;
|
|
|
|
|
|
+ /*
|
|
|
+ * FADT specified C2 latency must be less than or equal to
|
|
|
+ * 100 microseconds.
|
|
|
+ */
|
|
|
+ if (acpi_gbl_FADT.C2latency > ACPI_PROCESSOR_MAX_C2_LATENCY) {
|
|
|
+ ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
|
|
+ "C2 latency too large [%d]\n", acpi_gbl_FADT.C2latency));
|
|
|
+ /* invalidate C2 */
|
|
|
+ pr->power.states[ACPI_STATE_C2].address = 0;
|
|
|
+ }
|
|
|
+
|
|
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
|
|
"lvl2[0x%08x] lvl3[0x%08x]\n",
|
|
|
pr->power.states[ACPI_STATE_C2].address,
|
|
@@ -500,16 +511,6 @@ static void acpi_processor_power_verify_c2(struct acpi_processor_cx *cx)
|
|
|
if (!cx->address)
|
|
|
return;
|
|
|
|
|
|
- /*
|
|
|
- * C2 latency must be less than or equal to 100
|
|
|
- * microseconds.
|
|
|
- */
|
|
|
- else if (cx->latency > ACPI_PROCESSOR_MAX_C2_LATENCY) {
|
|
|
- ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
|
|
- "latency too large [%d]\n", cx->latency));
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
/*
|
|
|
* Otherwise we've met all of our C2 requirements.
|
|
|
* Normalize the C2 latency to expidite policy
|