ACPICA: Make it possible to enable runtime GPEs earlier
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 9 Aug 2017 22:31:58 +0000 (00:31 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 17 Aug 2017 18:54:33 +0000 (20:54 +0200)
commit1312b7e0caca44e7ff312bc2eaa888943384e3e1
tree096a21dc5ca3b555a799f2ea7fdebfbfc63d6e58
parentecc1165b8b743fd1503b9c799ae3a9933b89877b
ACPICA: Make it possible to enable runtime GPEs earlier

Runtime GPEs have corresponding _Lxx/_Exx methods and are enabled
automatically during the initialization of the ACPI subsystem through
acpi_update_all_gpes() with the assumption that acpi_setup_gpe_for_wake()
will be called in advance for all of the GPEs pointed to by _PRW
objects in the namespace that may be affected by acpi_update_all_gpes().
That is, acpi_ev_initialize_gpe_block() can only be called for a GPE
block after acpi_setup_gpe_for_wake() has been called for all of the
_PRW (wakeup) GPEs in it.

The platform firmware on some systems, however, expects GPEs to be
enabled before the enumeration of devices which is when
acpi_setup_gpe_for_wake() is called and that goes against the above
assumption.

For this reason, introduce a new flag to be set by
acpi_ev_initialize_gpe_block() when automatically enabling a GPE
to indicate to acpi_setup_gpe_for_wake() that it needs to drop the
reference to the GPE coming from acpi_ev_initialize_gpe_block()
and modify acpi_setup_gpe_for_wake() accordingly.  These changes
allow acpi_setup_gpe_for_wake() and acpi_ev_initialize_gpe_block()
to be invoked in any order.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/acpi/acpica/evgpeblk.c
drivers/acpi/acpica/evxfgpe.c
include/acpi/actypes.h