| From 7cec7048fe22e3e92389da2cd67098f6c4284e7f Mon Sep 17 00:00:00 2001 |
| From: Lv Zheng <lv.zheng@intel.com> |
| Date: Sat, 8 Jun 2013 00:59:18 +0000 |
| Subject: ACPICA: Do not use extended sleep registers unless HW-reduced bit is set |
| |
| From: Lv Zheng <lv.zheng@intel.com> |
| |
| commit 7cec7048fe22e3e92389da2cd67098f6c4284e7f upstream. |
| |
| Previous implementation incorrectly used the ACPI 5.0 extended |
| sleep registers if they were simply populated. This caused |
| problems on some non-HW-reduced machines. As per the ACPI spec, |
| they should only be used if the HW-reduced bit is set. Lv Zheng, |
| ACPICA BZ 1020. |
| |
| Reported-by: Daniel Rowe <bart@fathom13.com> |
| References: https://bugzilla.kernel.org/show_bug.cgi?id=54181 |
| References: https://bugs.acpica.org/show_bug.cgi?id=1020 |
| Bisected-by: Brint E. Kriebel <kernel@bekit.net> |
| Signed-off-by: Lv Zheng <lv.zheng@intel.com> |
| Signed-off-by: Bob Moore <robert.moore@intel.com> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/acpi/acpica/hwxfsleep.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/acpi/acpica/hwxfsleep.c |
| +++ b/drivers/acpi/acpica/hwxfsleep.c |
| @@ -240,12 +240,14 @@ static acpi_status acpi_hw_sleep_dispatc |
| &acpi_sleep_dispatch[function_id]; |
| |
| #if (!ACPI_REDUCED_HARDWARE) |
| - |
| /* |
| * If the Hardware Reduced flag is set (from the FADT), we must |
| - * use the extended sleep registers |
| + * use the extended sleep registers (FADT). Note: As per the ACPI |
| + * specification, these extended registers are to be used for HW-reduced |
| + * platforms only. They are not general-purpose replacements for the |
| + * legacy PM register sleep support. |
| */ |
| - if (acpi_gbl_reduced_hardware || acpi_gbl_FADT.sleep_control.address) { |
| + if (acpi_gbl_reduced_hardware) { |
| status = sleep_functions->extended_function(sleep_state); |
| } else { |
| /* Legacy sleep */ |