From: Lukas Wunner <lukas@wunner.de>
To: Timothy Pearson <tpearson@raptorengineering.com>
Cc: Bjorn Helgaas <helgaas@kernel.org>,
linuxppc-dev <linuxppc-dev@lists.ozlabs.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
linux-pci <linux-pci@vger.kernel.org>,
Madhavan Srinivasan <maddy@linux.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
christophe leroy <christophe.leroy@csgroup.eu>,
Naveen N Rao <naveen@kernel.org>,
Bjorn Helgaas <bhelgaas@google.com>,
Shawn Anastasio <sanastasio@raptorengineering.com>
Subject: Re: [PATCH v2 2/6] pci/hotplug/pnv_php: Work around switches with broken
Date: Wed, 25 Jun 2025 10:45:38 +0200 [thread overview]
Message-ID: <aFu3Mg9SqlaDTw9z@wunner.de> (raw)
In-Reply-To: <318974284.1316210.1750437945118.JavaMail.zimbra@raptorengineeringinc.com>
On Fri, Jun 20, 2025 at 11:45:45AM -0500, Timothy Pearson wrote:
> From: "Lukas Wunner" <lukas@wunner.de>
> > I don't know how much PCIe hotplug on PowerNV differs from native,
> > spec-compliant PCIe hotplug. If the differences are vast (and I
> > get the feeling they might be if I read terms like "PHB" and
> > "EEH unfreeze", which sound completely foreign to me), it might
> > be easier to refactor pnv_php.c and copy patterns or code from
> > pciehp, than to integrate the functionality from pnv_php.c into
> > pciehp.
>
> The differences at the root level (PHB) are quite significant -- the
> controller is more advanced in many ways than standard PCIe root
> complexes [1] -- and those differences need very special handling.
> Once we are looking at devices downstream of the root complex,
> standard PCIe hotplug and AER specifications apply, so we're in a
> strange spot of really wanting to use pciehp (to handle all nested
> downstream bridges), but pciehp still needs to understand how to deal
> with our unqiue root complex.
>
> One idea I had was to use the existing modularity of pciehp's source
> and add a new pciehp_powernv.c file with all of our root complex
> handling methods. We could then #ifdef swap the assocated root complex
> calls to that external file when compiled in PowerNV mode.
We've traditionally dealt with such issues by inserting pcibios_*()
hooks in generic code, with a __weak implementation (which is usually
an empty stub) and a custom implementation in arch/powerpc/.
The linker then chooses the custom implementation over the __weak one.
You can find the existing hooks with:
git grep "__weak .*pcibios" -- drivers/pci
git grep pcibios -- arch/powerpc
An alternative method is to add a callback to struct pci_host_bridge.
> > One thing I don't quite understand is, it sounds like you've
> > attached a PCIe switch to a Root Port and the hotplug ports
> > are on the PCIe switch. Aren't those hotplug ports just
> > bog-standard ones that can be driven by pciehp? My expectation
> > would have been that a PowerNV-specific hotplug driver would
> > only be necessary for hotplug-capable Root Ports.
>
> That's the problem -- the pciehp driver assumes x86 root ports,
Nah, there's nothing x86-specific about it. pciehp is used on all
kinds of arches, it's just an implementation of the PCIe Base Spec.
> and the powernv driver ends up duplicating (badly) parts of the pciehp
> functionality for downstream bridges. That's one reason I'd like to
> abstract the root port handling in pciehp and eventually move the
> PowerNV root port handling into that module.
Sounds like you're currently describing the Switch Downstream Ports with
an "ibm,ioda-phb2" compatible string in the devicetree? That would feel
wrong since they're not host bridges.
> [1] Among other interesting differences, it is both capable of and has
> been tested to properly block and report all invalid accesses from a
> PCIe device to system memory. This breaks assumptions in many PCIe
> device drivers, but is also a significant security advantage.
> EEH freeze is effectively this security mechanism kicking in -- on
> detecting an invalid access, the PHB itself will block the access and
> put the PE into a frozen state where no PCIe traffic is permitted.
That sounds somewhat similar to what the PCIe Access Control Services
Capability provides. I think at least some IOMMUs support raising an
exception on illegal accesses, so the EEH functionality is probably not
*that* special.
Thanks,
Lukas
next prev parent reply other threads:[~2025-06-25 8:45 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-18 16:54 [PATCH v2 0/6] PowerNV PCIe Hotplug Driver Fixes Timothy Pearson
2025-06-18 16:56 ` [PATCH v2 1/6] pci/hotplug/pnv_php: Properly clean up allocated IRQs on Timothy Pearson
2025-06-18 16:56 ` [PATCH v2 2/6] pci/hotplug/pnv_php: Work around switches with broken Timothy Pearson
2025-06-18 19:44 ` Bjorn Helgaas
2025-06-18 19:50 ` Timothy Pearson
2025-06-18 20:17 ` Bjorn Helgaas
2025-06-19 19:29 ` Timothy Pearson
2025-06-20 7:52 ` Lukas Wunner
2025-06-20 16:45 ` Timothy Pearson
2025-06-25 8:45 ` Lukas Wunner [this message]
2025-06-18 16:57 ` [PATCH v2 3/6] powerpc/eeh: Export eeh_unfreeze_pe() Timothy Pearson
2025-06-18 16:57 ` [PATCH v2 4/6] powerpc/eeh: Make EEH driver device hotplug safe Timothy Pearson
2025-06-18 16:58 ` [PATCH v2 5/6] pci/hotplug/pnv_php: Fix surprise plug detection and Timothy Pearson
2025-06-18 19:15 ` Bjorn Helgaas
2025-06-19 19:22 ` Timothy Pearson
2025-06-18 16:58 ` [PATCH v2 6/6] pci/hotplug/pnv_php: Enable third attention indicator Timothy Pearson
2025-06-18 19:01 ` Bjorn Helgaas
2025-06-19 0:37 ` Timothy Pearson
2025-06-20 9:26 ` Krishna Kumar
2025-06-21 9:59 ` Lukas Wunner
2025-06-25 4:08 ` Krishna Kumar
2025-06-25 8:08 ` Lukas Wunner
2025-06-25 10:55 ` Krishna Kumar
2025-06-21 15:05 ` Timothy Pearson
2025-06-24 7:07 ` Krishna Kumar
2025-06-24 16:34 ` Timothy Pearson
2025-06-24 22:34 ` Bjorn Helgaas
2025-07-07 8:01 ` Krishna Kumar
2025-07-11 18:18 ` Timothy Pearson
2025-07-11 21:05 ` Bjorn Helgaas
2025-07-15 21:41 ` Timothy Pearson
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=aFu3Mg9SqlaDTw9z@wunner.de \
--to=lukas@wunner.de \
--cc=bhelgaas@google.com \
--cc=christophe.leroy@csgroup.eu \
--cc=helgaas@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=mpe@ellerman.id.au \
--cc=naveen@kernel.org \
--cc=sanastasio@raptorengineering.com \
--cc=tpearson@raptorengineering.com \
/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).