[PATCH V14 02/12] PCI: host-generic: Add common helpers for parsing Root Port properties

Sherry Sun (OSS) sherry.sun at oss.nxp.com
Mon May 18 23:07:35 PDT 2026


> Subject: Re: [PATCH V14 02/12] PCI: host-generic: Add common helpers for
> parsing Root Port properties
>
> On Mon, May 18, 2026 at 08:42:38AM +0000, Sherry Sun wrote:
> > > Subject: Re: [PATCH V14 02/12] PCI: host-generic: Add common helpers
> > > for parsing Root Port properties
> > >
> > > On Wed, Apr 22, 2026 at 05:35:39PM +0800, Sherry Sun wrote:
> > > > Introduce generic helper functions to parse Root Port device tree
> > > > nodes and extract common properties like reset GPIOs. This allows
> > > > multiple PCI host controller drivers to share the same parsing logic.
> > > >
> > > > Define struct pci_host_port to hold common Root Port properties
> > > > (currently only list of PERST# GPIO descriptors) and add
> > > > pci_host_common_parse_ports() to parse Root Port nodes from device
> > > tree.
> > > >
> > > > Also add the 'ports' list to struct pci_host_bridge for better
> > > > maintain parsed Root Port information.
> > > > ...
> > >
> > > > +static int pci_host_common_parse_port(struct device *dev,
> > > > +                                     struct pci_host_bridge *bridge,
> > > > +                                     struct device_node *node) {
> > > > +       struct pci_host_port *port;
> > > > +       int ret;
> > > > +
> > > > +       port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
> > > > +       if (!port)
> > > > +               return -ENOMEM;
> > > > +
> > > > +       INIT_LIST_HEAD(&port->perst);
> > > > +
> > > > +       ret = pci_host_common_parse_perst(dev, port, node);
> > > > +       if (ret)
> > > > +               return ret;
> > > > +
> > > > +       /*
> > > > +        * 1. PERST# found in RP or its child nodes - list is not empty, continue
> > > > +        * 2. PERST# not found in RP/children, but found in RC node -
> > > > +return -
> > > ENODEV
> > > > +        *    to fallback legacy binding
> > > > +        * 3. PERST# not found anywhere - list is empty, continue
> > > > +(optional
> > > PERST#)
> > > > +        */
> > > > +       if (list_empty(&port->perst)) {
> > > > +               if (of_property_present(dev->of_node, "reset-gpios") ||
> > > > +                   of_property_present(dev->of_node, "reset-gpio"))
> > > > +                       return -ENODEV;
> > >
> > > This doesn't seem right to me.  The parser of per-Root Port
> > > properties should not be responsible for deciding whether legacy
> > > methods are valid, i.e., whether a property is in the Root Complex
> > > node.  I think it's up to the caller to decide whether it needs to look
> elsewhere.
> > >
> > > I don't think this even needs to return a "success/failure" value
> > > because there may be more properties in the future, and not all will
> > > be required.  This function can't tell which properties a specific
> > > driver requires and which are optional.
> > >
> > > The caller can check whether we found what it needs and fall back to
> > > a legacy method as needed.
> >
> > Hi Bjorn,
> > The code here was suggested by Mani,
> https://lore.ke/
> rnel.org%2Fall%2Flnzprzrdwra7pn7d6m3sbj5pvjy64blwpjl6i3lmlnfbyho63b%4
> 0czpyhpgz5vum%2F&data=05%7C02%7Csherry.sun%40nxp.com%7C4fe904a4
> 5dd242113c0008deb56ad494%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0
> %7C0%7C639147667610810003%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0e
> U1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCI
> sIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=jo875iGio19v5xllCJ%2Fxa3xQO
> BRUXA6PLk1llD8%2FP70%3D&reserved=0.
> > I think your suggestion here is reasonable, the per-Root Port parser
> > shouldn't check the RC-level binding. That's a policy decision that belongs to
> the caller.
> >
> > Hi Mani, if you also agree, I'll rework this so that:
> > 1. pci_host_common_parse_port() only parses properties from the Root
> Port
> >     (and its children) without checking the RC node.
> > 2. The function won't return failure for "property not found" - it will only
> return
> >      errors for real failures (e.g., -ENOMEM, GPIO acquisition errors).
> > 3. The legacy fallback logic will be moved to the caller, which can inspect the
> >      parsed result and decide whether to fall back to the legacy binding.
> >
>
> Fine with me. The reason for suggesting fallback within this API itself was to
> avoid duplicating the fallback code as it will be mostly generic. But I do agree
> with Bjorn on the fact that individual host controller drivers might have
> optional properties in the RC node and we can't incorporate all of them here.
>
> But no need to rework this series as it got applied for v7.2. You can send
> rework patches on top of this series.
>
Ok, will do, thanks!

Best Regards
Sherry


More information about the linux-arm-kernel mailing list