mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
ACPICA: Events: Introduce acpi_mask_gpe() to implement GPE masking mechanism
ACPICA commit 23a417ca406a527e7ae1710893e59a8b6db30e14
There is a facility in Linux, developers can control the enabling/disabling
of a GPE via /sys/firmware/acpi/interrupts/gpexx. This is mainly for
debugging purposes.
But many users expect to use this facility to implement quirks to mask a
specific GPE when there is a gap in Linux causing this GPE to flood. This
is not working correctly because currently this facility invokes
enabling/disabling counting based GPE driver APIs:
acpi_enable_gpe()/acpi_disable_gpe()
and the GPE drivers can still affect the count to mess up the GPE
masking purposes.
However, most of the IRQ chip designs allow masking/unmasking IRQs via a
masking bit which is different from the enabled bit to achieve the same
purpose. But the GPE hardware doesn't contain such a feature, this brings
the trouble.
In this patch, we introduce a software mechanism to implement the GPE
masking feature, and acpi_mask_gpe() are provided to the OSPMs to
mask/unmask GPEs in the above mentioned situation instead of
acpi_enable_gpe()/acpi_disable_gpe(). ACPICA BZ 1102. Lv Zheng.
Link: 23a417ca
Link: https://bugs.acpica.org/show_bug.cgi?id=1102
Signed-off-by: Lv Zheng <[email protected]>
Signed-off-by: Bob Moore <[email protected]>
Signed-off-by: Rafael J. Wysocki <[email protected]>
This commit is contained in:
parent
9556ec4ec1
commit
2af52c2bd2
7 changed files with 148 additions and 23 deletions
|
|
@ -735,6 +735,10 @@ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
|
|||
acpi_finish_gpe(acpi_handle gpe_device,
|
||||
u32 gpe_number))
|
||||
|
||||
ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
|
||||
acpi_mask_gpe(acpi_handle gpe_device,
|
||||
u32 gpe_number, u8 is_masked))
|
||||
|
||||
ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
|
||||
acpi_mark_gpe_for_wake(acpi_handle gpe_device,
|
||||
u32 gpe_number))
|
||||
|
|
|
|||
|
|
@ -732,16 +732,17 @@ typedef u32 acpi_event_type;
|
|||
* The encoding of acpi_event_status is illustrated below.
|
||||
* Note that a set bit (1) indicates the property is TRUE
|
||||
* (e.g. if bit 0 is set then the event is enabled).
|
||||
* +-------------+-+-+-+-+-+
|
||||
* | Bits 31:5 |4|3|2|1|0|
|
||||
* +-------------+-+-+-+-+-+
|
||||
* | | | | | |
|
||||
* | | | | | +- Enabled?
|
||||
* | | | | +--- Enabled for wake?
|
||||
* | | | +----- Status bit set?
|
||||
* | | +------- Enable bit set?
|
||||
* | +--------- Has a handler?
|
||||
* +--------------- <Reserved>
|
||||
* +-------------+-+-+-+-+-+-+
|
||||
* | Bits 31:6 |5|4|3|2|1|0|
|
||||
* +-------------+-+-+-+-+-+-+
|
||||
* | | | | | | |
|
||||
* | | | | | | +- Enabled?
|
||||
* | | | | | +--- Enabled for wake?
|
||||
* | | | | +----- Status bit set?
|
||||
* | | | +------- Enable bit set?
|
||||
* | | +--------- Has a handler?
|
||||
* | +----------- Masked?
|
||||
* +----------------- <Reserved>
|
||||
*/
|
||||
typedef u32 acpi_event_status;
|
||||
|
||||
|
|
@ -751,6 +752,7 @@ typedef u32 acpi_event_status;
|
|||
#define ACPI_EVENT_FLAG_STATUS_SET (acpi_event_status) 0x04
|
||||
#define ACPI_EVENT_FLAG_ENABLE_SET (acpi_event_status) 0x08
|
||||
#define ACPI_EVENT_FLAG_HAS_HANDLER (acpi_event_status) 0x10
|
||||
#define ACPI_EVENT_FLAG_MASKED (acpi_event_status) 0x20
|
||||
#define ACPI_EVENT_FLAG_SET ACPI_EVENT_FLAG_STATUS_SET
|
||||
|
||||
/* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */
|
||||
|
|
@ -761,14 +763,15 @@ typedef u32 acpi_event_status;
|
|||
|
||||
/*
|
||||
* GPE info flags - Per GPE
|
||||
* +-------+-+-+---+
|
||||
* | 7:5 |4|3|2:0|
|
||||
* +-------+-+-+---+
|
||||
* | | | |
|
||||
* | | | +-- Type of dispatch:to method, handler, notify, or none
|
||||
* | | +----- Interrupt type: edge or level triggered
|
||||
* | +------- Is a Wake GPE
|
||||
* +------------ <Reserved>
|
||||
* +---+-+-+-+---+
|
||||
* |7:6|5|4|3|2:0|
|
||||
* +---+-+-+-+---+
|
||||
* | | | | |
|
||||
* | | | | +-- Type of dispatch:to method, handler, notify, or none
|
||||
* | | | +----- Interrupt type: edge or level triggered
|
||||
* | | +------- Is a Wake GPE
|
||||
* | +--------- Is GPE masked by the software GPE masking machanism
|
||||
* +------------ <Reserved>
|
||||
*/
|
||||
#define ACPI_GPE_DISPATCH_NONE (u8) 0x00
|
||||
#define ACPI_GPE_DISPATCH_METHOD (u8) 0x01
|
||||
|
|
|
|||
Loading…
Reference in a new issue