ACPICA: Hardcode access width for the reset register.
authorBob Moore <robert.moore@intel.com>
Tue, 29 Oct 2013 01:29:45 +0000 (09:29 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 30 Oct 2013 11:24:22 +0000 (12:24 +0100)
The ACPI spec requires the reset register width to be 8, so we
now hardcode it and ignore the FADT value. This provides/maintains
compatibility with other ACPI implementations that have allowed
BIOS code with bad register width values to go unnoticed.
Matthew Garett, Bob Moore, Lv Zheng.

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/hwxface.c
include/acpi/actypes.h

index f81fb068d20ed34613615d76217841e2c7297ad4..d3682c2ae0d183b69929b08b3736a339bfe61da0 100644 (file)
@@ -83,11 +83,17 @@ acpi_status acpi_reset(void)
                 * For I/O space, write directly to the OSL. This bypasses the port
                 * validation mechanism, which may block a valid write to the reset
                 * register.
-                * Spec section 4.7.3.6 requires register width to be 8.
+                *
+                * NOTE:
+                * The ACPI spec requires the reset register width to be 8, so we
+                * hardcode it here and ignore the FADT value. This maintains
+                * compatibility with other ACPI implementations that have allowed
+                * BIOS code with bad register width values to go unnoticed.
                 */
                status =
                    acpi_os_write_port((acpi_io_address) reset_reg->address,
-                                      acpi_gbl_FADT.reset_value, 8);
+                                      acpi_gbl_FADT.reset_value,
+                                      ACPI_RESET_REGISTER_WIDTH);
        } else {
                /* Write the reset value to the reset register */
 
index fed5af2bcb9341f4998f2a4e68de774c631a3765..63909d9c2f7a0a406e32b2538dc354ce10c50240 100644 (file)
@@ -349,6 +349,7 @@ typedef u32 acpi_physical_address;
 #define ACPI_PM1_REGISTER_WIDTH         16
 #define ACPI_PM2_REGISTER_WIDTH         8
 #define ACPI_PM_TIMER_WIDTH             32
+#define ACPI_RESET_REGISTER_WIDTH       8
 
 /* Names within the namespace are 4 bytes long */