Re: [PATCH v2] ACPI: Enable wakeup GPE in freeze mode

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

 



On Friday, March 27, 2015 06:08:48 PM Chen Yu wrote:
> Currently, in freeze state, wakeup GPE for PCI devices are
> handled properly because acpi_pci_sleep_wake() invokes acpi_enable_gpe()
> to enable the wakeup GPE directly. But for the other wakeup-capable
> devices in ACPI bus, acpi_enable_wakeup_devices() should be invoked
> to update enable_for_wake mask in gpe_register_info structure, thus
> acpi_enable_all_wakeup_gpes() can enable the wakeup GPE referred in
> _PRW methods. And acpi_disable_wakeup_devices() will be called
> before disable_irq_wake() in acpi_freeze_restore() to restore the mask.
> 
> This patch fixes a power button wakeup problem on Surface Pro 3,
> on which platform power button uses EC to deliver event
> (EC GPE is referred in _PRW).
> 
> Note: enabling EC GPE during freeze state may bring some risks
> because EC events are expected to fire more frequently than others.
> Thus it may bring the system out of freeze state unnecessarily.
> (We already have comments about this in bugzilla)
> 
> Fixes https://bugzilla.kernel.org/show_bug.cgi?id=84651
> 
> Reported-and-tested-by: Ethan Schoonover <es@xxxxxxxxxxxxxxxxxxx>
> Tested-by: Peter Amidon <psa.pub.0@xxxxxxxxxxxxxx>
> Tested-by: Yani Ioadnnou <yani.ioannou@xxxxxxxxx>
> Tested-by: Mister Wardrop <mister.wardrop@xxxxxxxxx>
> Tested-by: Anton Anikin <anton@xxxxxxxxxxx>
> Tested-by: Keith McClelland <zismylaptop@xxxxxxxxx>
> Reviewed-by: Zhang Rui <rui.zhang@xxxxxxxxx>
> Signed-off-by: Chen Yu <yu.c.chen@xxxxxxxxx>

Queued up for 4.1 with minor changes in the changelog/subject, thanks!

> ---
>  drivers/acpi/sleep.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
> index 7f251dd..81e5bd4 100644
> --- a/drivers/acpi/sleep.c
> +++ b/drivers/acpi/sleep.c
> @@ -629,6 +629,7 @@ static int acpi_freeze_begin(void)
>  
>  static int acpi_freeze_prepare(void)
>  {
> +	acpi_enable_wakeup_devices(ACPI_STATE_S0);
>  	acpi_enable_all_wakeup_gpes();
>  	acpi_os_wait_events_complete();
>  	enable_irq_wake(acpi_gbl_FADT.sci_interrupt);
> @@ -637,6 +638,7 @@ static int acpi_freeze_prepare(void)
>  
>  static void acpi_freeze_restore(void)
>  {
> +	acpi_disable_wakeup_devices(ACPI_STATE_S0);
>  	disable_irq_wake(acpi_gbl_FADT.sci_interrupt);
>  	acpi_enable_all_runtime_gpes();
>  }
> 

-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux