ACPI: OSL: Make ACPICA use logical addresses of GPE blocks
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 11 Sep 2020 12:59:42 +0000 (14:59 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 11 Sep 2020 14:45:00 +0000 (16:45 +0200)
Define ACPI_GPE_USE_LOGICAL_ADDRESSES in aclinux.h and modify
acpi_os_initialize() to store the logical addresses of the FADT GPE
blocks 0 and 1 in acpi_gbl_xgpe0_block_logical_address and
acpi_gbl_xgpe1_block_logical_address, respectively, so as to allow
ACPICA to use them for accessing GPE registers in system memory,
instead of using their physical addresses and looking up the
corresponding logical addresses on every access attempt, which is
inefficient.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/osl.c
include/acpi/platform/aclinux.h

index 3a50d8fa310bfde5a643f103695407a56659437a..0418febc5cf207d6ed888cd834820cdbd35c2cb9 100644 (file)
@@ -1744,8 +1744,12 @@ acpi_status __init acpi_os_initialize(void)
 {
        acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1a_event_block);
        acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1b_event_block);
-       acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe0_block);
-       acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe1_block);
+
+       acpi_gbl_xgpe0_block_logical_address =
+               (unsigned long)acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe0_block);
+       acpi_gbl_xgpe1_block_logical_address =
+               (unsigned long)acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe1_block);
+
        if (acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) {
                /*
                 * Use acpi_os_map_generic_address to pre-map the reset
@@ -1783,8 +1787,12 @@ acpi_status acpi_os_terminate(void)
 
        acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe1_block);
        acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe0_block);
+       acpi_gbl_xgpe0_block_logical_address = 0UL;
+       acpi_gbl_xgpe1_block_logical_address = 0UL;
+
        acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1b_event_block);
        acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1a_event_block);
+
        if (acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER)
                acpi_os_unmap_generic_address(&acpi_gbl_FADT.reset_register);
 
index 987e2af7c3356857298fe68902d923054af478e0..4151c76141fac6b8536fa48a7b062e022e0b8977 100644 (file)
 
 #define USE_NATIVE_ALLOCATE_ZEROED
 
+/* Use logical addresses for accessing GPE registers in system memory */
+
+#define ACPI_GPE_USE_LOGICAL_ADDRESSES
+
 /*
  * Overrides for in-kernel ACPICA
  */