Patch "HID: intel-ish-hid: ipc: Disable and reenable ACPI GPE bit" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    HID: intel-ish-hid: ipc: Disable and reenable ACPI GPE bit

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     hid-intel-ish-hid-ipc-disable-and-reenable-acpi-gpe-.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit d416776961722288846eabda3a0f7dccacd41ee7
Author: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>
Date:   Tue Oct 3 08:53:32 2023 -0700

    HID: intel-ish-hid: ipc: Disable and reenable ACPI GPE bit
    
    [ Upstream commit 8f02139ad9a7e6e5c05712f8c1501eebed8eacfd ]
    
    The EHL (Elkhart Lake) based platforms provide a OOB (Out of band)
    service, which allows to wakup device when the system is in S5 (Soft-Off
    state). This OOB service can be enabled/disabled from BIOS settings. When
    enabled, the ISH device gets PME wake capability. To enable PME wakeup,
    driver also needs to enable ACPI GPE bit.
    
    On resume, BIOS will clear the wakeup bit. So driver need to re-enable it
    in resume function to keep the next wakeup capability. But this BIOS
    clearing of wakeup bit doesn't decrement internal OS GPE reference count,
    so this reenabling on every resume will cause reference count to overflow.
    
    So first disable and reenable ACPI GPE bit using acpi_disable_gpe().
    
    Fixes: 2e23a70edabe ("HID: intel-ish-hid: ipc: finish power flow for EHL OOB")
    Reported-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
    Closes: https://lore.kernel.org/lkml/CAAd53p4=oLYiH2YbVSmrPNj1zpMcfp=Wxbasb5vhMXOWCArLCg@xxxxxxxxxxxxxx/T/
    Tested-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
    Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>
    Signed-off-by: Jiri Kosina <jkosina@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
index 55cb25038e632..710fda5f19e1c 100644
--- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
+++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
@@ -133,6 +133,14 @@ static int enable_gpe(struct device *dev)
 	}
 	wakeup = &adev->wakeup;
 
+	/*
+	 * Call acpi_disable_gpe(), so that reference count
+	 * gpe_event_info->runtime_count doesn't overflow.
+	 * When gpe_event_info->runtime_count = 0, the call
+	 * to acpi_disable_gpe() simply return.
+	 */
+	acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
+
 	acpi_sts = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number);
 	if (ACPI_FAILURE(acpi_sts)) {
 		dev_err(dev, "enable ose_gpe failed\n");



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux