From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Andrey Rahmatullin <wrar@wrar.name>
Cc: Steven Rostedt <rostedt@goodmis.org>,
linux-pm@lists.linux-foundation.org,
Alan Stern <stern@rowland.harvard.edu>,
ACPI Devel Mailing List <linux-acpi@vger.kernel.org>
Subject: [RFT][PATCH 2/4] PCI / PM: Make platform choose target low-power states of more devices
Date: Sat, 26 May 2012 23:20:25 +0200 [thread overview]
Message-ID: <201205262320.25191.rjw@sisk.pl> (raw)
In-Reply-To: <201205262316.30096.rjw@sisk.pl>
From: Rafael J. Wysocki <rjw@sisk.pl>
It turns out that there are devices whose power states cannot be set
by ACPI (the _PRn and _PSn methods are not available for them), but
it still is necessary to use ACPI for setting up those devices to
wake up the system from sleep states. Then, according to the ACPI
specification (ACPI 5.0 and earlier), if there are _SxD and/or _SxW
methods defined for those devices, the results returned by them
should be taken into consideration. Moreover, some hardware vendors
seem to use this requirement to work around hardware and/or firmware
bugs, so it's better to follow it (which we don't do at the moment)
to avoid some nasty suspend/resume issues that are quite difficult to
debug.
This change is based on a patch from Oleksij Rempel.
References: https://bugzilla.kernel.org/show_bug.cgi?id=42728
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
drivers/pci/pci.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
Index: linux/drivers/pci/pci.c
===================================================================
--- linux.orig/drivers/pci/pci.c
+++ linux/drivers/pci/pci.c
@@ -1691,10 +1691,16 @@ pci_power_t pci_target_state(struct pci_
{
pci_power_t target_state = PCI_D3hot;
- if (platform_pci_power_manageable(dev)) {
+ /*
+ * It turns out that there are devices whose power states cannot be set
+ * by the platform, although their wakeup capabilities depend on it.
+ * The platform should be called to choose the target low-power states
+ * of those devices too.
+ */
+ if (platform_pci_power_manageable(dev)
+ || (device_may_wakeup(&dev->dev) && platform_pci_can_wakeup(dev))) {
/*
- * Call the platform to choose the target state of the device
- * and enable wake-up from this state if supported.
+ * Call the platform to choose the target state of the device.
*/
pci_power_t state = platform_pci_choose_state(dev);
next prev parent reply other threads:[~2012-05-26 21:17 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <Pine.LNX.4.44L0.1205252157430.24286-100000@saphir.localdomain>
[not found] ` <1338005001.13348.279.camel@gandalf.stny.rr.com>
[not found] ` <201205262227.47442.rjw@sisk.pl>
2012-05-26 21:16 ` [RFT] PCI changes related to wakeup (was: Re: ehci_hcd related S3 lockup on ASUS laptops, again) Rafael J. Wysocki
2012-05-26 21:19 ` [RFT][PATCH 1/4] ACPI / PM: Make acpi_pm_device_sleep_state() follow the specification Rafael J. Wysocki
2012-05-26 21:20 ` Rafael J. Wysocki [this message]
2012-05-26 21:21 ` [RFT][PATCH 3/4] ACPI / PM: Shorten variable name in acpi_pm_device_sleep_state() Rafael J. Wysocki
2012-05-26 21:21 ` [RFT][PATCH 4/4] ACPI / PM: Fix interactions between _SxD and _SxW Rafael J. Wysocki
2012-05-26 21:47 ` [RFT] PCI changes related to wakeup (was: Re: ehci_hcd related S3 lockup on ASUS laptops, again) Andrey Rahmatullin
2012-05-26 22:06 ` [RFT] PCI changes related to wakeup (was: Re: [linux-pm] " Rafael J. Wysocki
2012-05-26 22:36 ` [RFT] PCI changes related to wakeup (was: " Andrey Rahmatullin
2012-05-26 22:40 ` [RFT] PCI changes related to wakeup (was: Re: [linux-pm] " Alan Stern
2012-05-26 22:59 ` [RFT] PCI changes related to wakeup (was: " Rafael J. Wysocki
2012-05-29 14:23 ` [RFT] PCI changes related to wakeup (was: Re: [linux-pm] " Alan Stern
2012-05-29 17:29 ` Rafael J. Wysocki
2012-05-29 18:50 ` Alan Stern
2012-05-29 19:16 ` Rafael J. Wysocki
2012-05-31 21:07 ` Alan Stern
2012-05-31 21:29 ` Rafael J. Wysocki
2012-06-01 15:13 ` Alan Stern
2012-06-01 15:50 ` Steven Rostedt
2012-06-01 15:59 ` [RFT] PCI changes related to wakeup (was: " Alan Stern
2012-06-01 17:01 ` [RFT] PCI changes related to wakeup (was: Re: [linux-pm] " Steven Rostedt
2012-06-01 17:17 ` [RFT] PCI changes related to wakeup (was: " Alan Stern
2012-06-01 17:23 ` [RFT] PCI changes related to wakeup (was: Re: [linux-pm] " Steven Rostedt
2012-06-01 16:01 ` [RFT] PCI changes related to wakeup (was: " Andrey Rahmatullin
2012-06-01 16:33 ` Alan Stern
2012-05-31 22:02 ` [RFT] PCI changes related to wakeup (was: Re: [linux-pm] " Dâniel Fraga
2012-06-01 14:55 ` Alan Stern
2012-05-31 22:25 ` Andrey Rahmatullin
2012-06-13 9:22 ` Rafael J. Wysocki
2012-06-13 14:21 ` [RFT] PCI changes related to wakeup (was: " Alan Stern
2012-05-27 16:41 ` [RFT] PCI changes related to wakeup (was: Re: [linux-pm] " Alan Stern
2012-05-27 21:17 ` Andrey Rahmatullin
2012-05-28 20:13 ` [RFT] PCI changes related to wakeup (was: " Rafael J. Wysocki
2012-05-29 7:48 ` Andrey Rahmatullin
2012-05-29 17:30 ` [RFT] PCI changes related to wakeup (was: Re: [linux-pm] " Rafael J. Wysocki
2012-05-29 22:39 ` [RFT] PCI changes related to wakeup (was: " Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201205262320.25191.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=rostedt@goodmis.org \
--cc=stern@rowland.harvard.edu \
--cc=wrar@wrar.name \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).