From: Lukas Wunner <lukas@wunner.de>
To: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: Bjorn Helgaas <helgaas@kernel.org>,
Linux PCI <linux-pci@vger.kernel.org>,
Linux PM <linux-pm@vger.kernel.org>,
Andreas Noever <andreas.noever@gmail.com>
Subject: Re: [PATCH v2 10/13] PCI: Avoid going from D3cold to D3hot for system sleep
Date: Thu, 4 Aug 2016 10:14:46 +0200 [thread overview]
Message-ID: <20160804081446.GA4576@wunner.de> (raw)
In-Reply-To: <CAJZ5v0h55MCiSzJz_weEGX7nUsy_TLumssyoXz=f2_b0h_BkQQ@mail.gmail.com>
On Thu, Aug 04, 2016 at 03:07:56AM +0200, Rafael J. Wysocki wrote:
> On Thu, Aug 4, 2016 at 2:45 AM, Lukas Wunner <lukas@wunner.de> wrote:
> > On Thu, Aug 04, 2016 at 01:50:39AM +0200, Rafael J. Wysocki wrote:
> >> On Wed, Aug 3, 2016 at 2:28 PM, Lukas Wunner <lukas@wunner.de> wrote:
> >> > On Mon, Jul 18, 2016 at 03:39:15PM +0200, Rafael J. Wysocki wrote:
> >> >> On Saturday, June 18, 2016 12:14:07 AM Lukas Wunner wrote:
> >> >> > On Fri, Jun 17, 2016 at 04:09:24PM -0500, Bjorn Helgaas wrote:
> >> >> > > On Fri, May 13, 2016 at 01:15:31PM +0200, Lukas Wunner wrote:
> >> >> > > > There are devices wich are not power-managed by the platform, yet can be
> >> >> > > > runtime suspended to D3cold with some other mechanism. When putting the
> >> >> > > > system to sleep, we currently handle such devices improperly by trying
> >> >> > > > to transition them from D3cold to D3hot (the default power state defined
> >> >> > > > at the beginning of pci_target_state()). Avoid that.
> >> >> > > >
> >> >> > > > An example for devices affected by this are Thunderbolt controllers
> >> >> > > > built into Macs which can be put into D3cold with nonstandard ACPI
> >> >> > > > methods.
> >> >> > > >
> >> >> > > > Signed-off-by: Lukas Wunner <lukas@wunner.de>
> >> >> > > > ---
> >> >> > > > drivers/pci/pci.c | 2 ++
> >> >> > > > 1 file changed, 2 insertions(+)
> >> >> > > >
> >> >> > > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> >> >> > > > index 791dfe7..6af9911 100644
> >> >> > > > --- a/drivers/pci/pci.c
> >> >> > > > +++ b/drivers/pci/pci.c
> >> >> > > > @@ -1943,6 +1943,8 @@ static pci_power_t pci_target_state(struct pci_dev *dev)
> >> >> > > > && !(dev->pme_support & (1 << target_state)))
> >> >> > > > target_state--;
> >> >> > > > }
> >> >> > > > + } else if (dev->current_state == PCI_D3cold) {
> >> >> > > > + target_state = PCI_D3cold;
> >> >> > > > }
> >> >> > >
> >> > I will update this patch with Bjorn's suggestion to also leave the
> >> > device in D3cold if it is wakeup-capable. The idea is to just change
> >> > the default state in the first line of the function like this:
> >> >
> >> > - pci_power_t target_state = PCI_D3hot;
> >> > + pci_power_t target_state =
> >> > + dev->current_state == PCI_D3cold ? PCI_D3cold : PCI_D3hot;
> >>
> >> That should work (even though it is a little clumsy IMO).
> >
> > Not sure why that is clumsy but happy to use something else if you
> > have a suggestion?
>
> The clumsy thing is that we'd take the target_state as D3cold only if
> the device already was in that state.
>
> Otherwise, we'd take D3hot as the target state for the same device,
> which doesn't seem particularly consistent to me.
>
> Not that I have better ideas ATM, but then the current code works for
> my use cases. :-)
The goal is to afford direct-complete to devices which are not power-
manageable by the platform but can still be runtime suspended to D3cold.
Right now we wake those devices up from D3cold to D3hot before going to
sleep, which is a waste of energy and prolongs the suspend sequence
(waking up the Thunderbolt controller takes 2 seconds).
The de facto standard to power manage such devices seems to be with
dev_pm_domain_set(). That's what vga_switcheroo does and I'll move
to that as well for v3 of this series.
I could add a "bool can_power_off" to struct dev_pm_domain.
Then I could change pci_target_state() like this:
pci_power_t target_state = PCI_D3hot;
if (platform_pci_power_manageable(dev)) {
[...]
+ } else if (dev->dev.pm_domain && dev->dev.pm_domain.can_power_off) {
+ target_state = PCI_D3cold;
} else if [...]
Another idea would be to add a ->choose_state hook to dev_pm_domain,
but that would have to return a PCI-specific power state, so we'd be
in clumsy territory again.
Thoughts?
Lukas
next prev parent reply other threads:[~2016-08-04 8:14 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-13 11:15 [PATCH v2 00/13] Runtime PM for Thunderbolt on Macs Lukas Wunner
2016-05-13 11:15 ` [PATCH v2 10/13] PCI: Avoid going from D3cold to D3hot for system sleep Lukas Wunner
2016-06-17 21:09 ` Bjorn Helgaas
2016-06-17 22:14 ` Lukas Wunner
2016-07-18 13:39 ` Rafael J. Wysocki
2016-08-03 12:28 ` Lukas Wunner
2016-08-03 23:50 ` Rafael J. Wysocki
2016-08-04 0:45 ` Lukas Wunner
2016-08-04 1:07 ` Rafael J. Wysocki
2016-08-04 8:14 ` Lukas Wunner [this message]
2016-08-04 15:30 ` Rafael J. Wysocki
2016-08-07 9:03 ` Lukas Wunner
2016-08-07 23:32 ` Rafael J. Wysocki
2016-08-11 13:20 ` Lukas Wunner
2016-08-12 0:50 ` Rafael J. Wysocki
2016-08-12 16:16 ` Lukas Wunner
2016-08-12 22:18 ` Rafael J. Wysocki
2016-08-12 22:37 ` Rafael J. Wysocki
2016-08-14 10:27 ` Lukas Wunner
2016-08-15 23:05 ` Rafael J. Wysocki
2016-05-13 11:15 ` [PATCH v2 12/13] thunderbolt: Support runtime pm on upstream bridge Lukas Wunner
2016-05-13 11:15 ` [PATCH v2 03/13] PCI: Add Thunderbolt portdrv service type Lukas Wunner
2016-06-17 22:51 ` Bjorn Helgaas
2016-07-20 0:30 ` Rafael J. Wysocki
2016-07-20 6:59 ` Lukas Wunner
2016-05-13 11:15 ` [PATCH v2 07/13] PCI: pciehp: Ignore interrupts during D3cold Lukas Wunner
2016-06-17 22:52 ` Bjorn Helgaas
2016-08-02 16:27 ` Lukas Wunner
2016-08-05 0:29 ` Rafael J. Wysocki
2016-05-13 11:15 ` [PATCH v2 11/13] PM / sleep: Allow opt-out from runtime resume after direct-complete Lukas Wunner
2016-07-18 13:18 ` Rafael J. Wysocki
2016-08-07 9:56 ` Lukas Wunner
2016-08-07 15:33 ` Alan Stern
2016-08-12 16:39 ` Lukas Wunner
2016-08-12 17:30 ` Alan Stern
2016-08-12 22:40 ` Rafael J. Wysocki
2016-05-13 11:15 ` [PATCH v2 02/13] PCI: Allow D3 for Thunderbolt ports Lukas Wunner
2016-05-13 11:15 ` [PATCH v2 09/13] PCI: Do not write to PM control register while in D3cold Lukas Wunner
2016-06-17 21:18 ` Bjorn Helgaas
2016-07-18 13:55 ` Rafael J. Wysocki
2016-05-13 11:15 ` [PATCH v2 05/13] PCI: Use portdrv pm iterator on further callbacks Lukas Wunner
2016-05-13 11:15 ` [PATCH v2 13/13] thunderbolt: Support runtime pm on NHI Lukas Wunner
2016-05-13 11:15 ` [PATCH v2 08/13] PCI: Allow runtime PM for Thunderbolt hotplug ports on Macs Lukas Wunner
2016-06-14 9:08 ` [PATCH v2 08/13 REBASED] " Lukas Wunner
2016-06-17 21:53 ` [PATCH v2 08/13] " Bjorn Helgaas
2016-05-13 11:15 ` [PATCH v2 04/13] PCI: Generalize portdrv pm iterator Lukas Wunner
2016-05-13 11:15 ` [PATCH v2 01/13] PCI: Recognize Thunderbolt devices Lukas Wunner
2016-05-13 11:15 ` [PATCH v2 06/13] PCI: pciehp: Support runtime pm Lukas Wunner
2016-05-21 9:48 ` [PATCH v2 00/13] Runtime PM for Thunderbolt on Macs Andreas Noever
2016-06-14 16:37 ` Bjorn Helgaas
2016-06-14 19:14 ` Andreas Noever
2016-06-14 20:22 ` Bjorn Helgaas
2016-06-15 18:40 ` Lukas Wunner
2016-06-16 1:55 ` Linus Torvalds
2016-07-07 17:39 ` Andreas Noever
2016-07-09 5:23 ` Greg KH
2016-07-12 21:46 ` Andreas Noever
2016-06-13 20:58 ` Bjorn Helgaas
2016-06-14 9:27 ` Lukas Wunner
2016-07-07 15:02 ` Lukas Wunner
2016-07-08 1:28 ` Rafael J. Wysocki
2016-07-20 7:23 ` Lukas Wunner
2016-07-20 12:48 ` Rafael J. Wysocki
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=20160804081446.GA4576@wunner.de \
--to=lukas@wunner.de \
--cc=andreas.noever@gmail.com \
--cc=helgaas@kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rafael@kernel.org \
/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).