From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Lukas Wunner <lukas@wunner.de>
Cc: Bjorn Helgaas <helgaas@kernel.org>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Qipeng Zha <qipeng.zha@intel.com>, Qi Zheng <qi.zheng@intel.com>,
Dave Airlie <airlied@gmail.com>,
Mathias Nyman <mathias.nyman@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Andreas Noever <andreas.noever@gmail.com>,
linux-pci@vger.kernel.org, linux-pm@vger.kernel.org
Subject: Re: [PATCH v5 4/4] PCI: Add runtime PM support for PCIe ports
Date: Mon, 20 Jun 2016 11:10:57 +0300 [thread overview]
Message-ID: <20160620081057.GV1739@lahna.fi.intel.com> (raw)
In-Reply-To: <20160617213209.GA1927@wunner.de>
On Fri, Jun 17, 2016 at 11:32:09PM +0200, Lukas Wunner wrote:
> On Fri, Jun 17, 2016 at 03:48:24PM -0500, Bjorn Helgaas wrote:
> > On Fri, Apr 29, 2016 at 11:51:59AM +0300, Mika Westerberg wrote:
> [snip]
> > > +
> > > + /*
> > > + * Prevent runtime PM if the port is advertising support for PCIe
> > > + * hotplug. Otherwise the BIOS hotplug SMI code might not be able
> > > + * to enumerate devices behind this port properly (the port is
> > > + * powered down preventing all config space accesses to the
> > > + * subordinate devices). We can't be sure for native PCIe hotplug
> > > + * either so prevent that as well.
> >
> > Can we wordsmith this comment a bit? I'm not sure what "BIOS hotplug
> > SMI code" even is or why it is relevant. And it seems x86-centric so
> > may not apply to other arches.
>
> The comment pertains to:
> https://bugzilla.kernel.org/show_bug.cgi?id=53811
>
> It was discussed on April 12/13:
> https://patchwork.kernel.org/patch/8782801/
>
> Executive summary:
> On non-Macs, Thunderbolt is driven by the firmware in System Management
> Mode, on hotplug the CPU receives a Sytem Management Interrupt (SMI) and
> jumps to SMM code. This doesn't work reliably if the hotplug port has
> been transitioned to D3hot, the SMM code tries to access config space
> of hotplugged devices (not possible if port is in D3hot) and is apparently
> too dumb to check if the port is in D3hot and wake it up.
That's the best guess what happens on non-Macs.
Bjorn, do you want me to update the comment to open up what SMI means
and maybe add better explanation?
> On Macs, Thunderbolt is not driven by the firmware except immediately on
> boot: It is initially set up by an EFI driver, but once ExitBootServices
> has been called, the OS is responsible. Therefore on Macs the hotplug
> ports may be suspended to D3hot just fine. This is done by patch
> [08/13] of my series "Runtime PM for Thunderbolt on Macs".
>
> >
> > > + */
> > > + if (!dev->is_hotplug_bridge) {
> >
> > Your changelog mentions ACPI hotplug (I assume this means acpiphp).
> > Would it be sufficient to prevent runtime PM when we're using acpiphp?
> > That would be more selective and would avoid penalizing non-ACPI
> > platforms and newer systems that use native pciehp.
> >
> > PCIe r3.0, sec 6.7.3.4 says a port should generate a wakeup event
> > using PME on hotplug events that occur when the port is in D1, D2, or
> > D3hot (it doesn't mention D3cold). Is that relevant here? Is there a
> > way to control which D-states we use based on which ones can assert
> > PME?
>
> This was discussed between April 18 and April 21, please refer to
> the above-linked patchwork entry.
>
> I had done some tests and the result was:
> "A hotplug port may go to D3hot and will still generate interrupts on
> hotplug, but all its parent ports are *not* allowed to go to D3hot
> because otherwise the hotplug interrupts will no longer come through.
> The algorithm in pci_bridge_d3_update() and pci_dev_check_d3cold()
> needs to be amended to take that into account. Hm, it's nontrivial
> I guess, allowing bridge_d3 = true for the lowest hotplug bridge in a
> hierarchy but not for anything above?"
>
> Mika's reply was:
> "If we need to do things like that, it will get pretty complex and we
> still cannot be sure whether hotplug works. I think it is safer to go
> back to what I already had and disable runtime PM from such ports."
Indeed that seems to be the most reliable way.
In addition it may be possible to relax this a bit more like:
- For ACPI hotplug bridges we disable runtime PM like we are doing
currently.
- For native PCIe ports supporting hotplug, enable runtime PM and call
pci_d3cold_disable() in pcie_portdrv_probe() which allows the port to
go into D3hot.
But I think it may be better to do that separately after v4.8-rc1 is
released :)
next prev parent reply other threads:[~2016-06-20 8:10 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-29 8:51 [PATCH v5 0/4] PCI: Add support for suspending (including runtime) of PCIe ports Mika Westerberg
2016-04-29 8:51 ` [PATCH v5 1/4] PCI: No need to set d3cold_allowed to " Mika Westerberg
2016-05-11 19:36 ` Bjorn Helgaas
2016-05-11 20:12 ` Rafael J. Wysocki
2016-04-29 8:51 ` [PATCH v5 2/4] PCI: Put PCIe ports into D3 during suspend Mika Westerberg
2016-05-04 21:01 ` Rafael J. Wysocki
2016-04-29 8:51 ` [PATCH v5 3/4] ACPI / hotplug / PCI: Runtime resume bridge before rescan Mika Westerberg
2016-04-29 8:51 ` [PATCH v5 4/4] PCI: Add runtime PM support for PCIe ports Mika Westerberg
2016-06-17 20:48 ` Bjorn Helgaas
2016-06-17 21:32 ` Lukas Wunner
2016-06-20 8:10 ` Mika Westerberg [this message]
2016-06-20 20:43 ` Bjorn Helgaas
2016-04-29 11:46 ` [PATCH v5 0/4] PCI: Add support for suspending (including runtime) of " Mathias Nyman
2016-04-29 12:10 ` Rafael J. Wysocki
2016-05-02 10:16 ` Mika Westerberg
2016-05-02 11:03 ` Lukas Wunner
2016-05-04 21:03 ` Rafael J. Wysocki
2016-05-11 20:18 ` Bjorn Helgaas
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=20160620081057.GV1739@lahna.fi.intel.com \
--to=mika.westerberg@linux.intel.com \
--cc=airlied@gmail.com \
--cc=andreas.noever@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=helgaas@kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=mathias.nyman@intel.com \
--cc=qi.zheng@intel.com \
--cc=qipeng.zha@intel.com \
--cc=rjw@rjwysocki.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.