Hi Peter, please don't apply this one yet.
On Wed, 5 Nov 2025 17:44:32 +0100 (CET) Torsten Duwe <[email protected]> wrote: > The vendor:device read in pci_uclass_child_post_bind() might fail, > which is currently ignored. In that case e.g. the RP1 on the RasPi5 > is erroneously being treated as a host bridge. > > Mark the device's PCI info as invalid in case of failure. > > Signed-off-by: Volodymyr Babchuk <[email protected]> > Reviewed-by: Volodymyr Babchuk <[email protected]> > Signed-off-by: Oleksii Moisieiev <[email protected]> > Signed-off-by: Torsten Duwe <[email protected]> > Reviewed-by: Oleksii Moisieiev <[email protected]> > --- > drivers/pci/pci-uclass.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c > index c370f8c6400..4092e8ff5a9 100644 > --- a/drivers/pci/pci-uclass.c > +++ b/drivers/pci/pci-uclass.c > @@ -1200,6 +1200,7 @@ static int pci_uclass_post_probe(struct udevice *bus) > static int pci_uclass_child_post_bind(struct udevice *dev) > { > struct pci_child_plat *pplat; > + int err; > > if (!dev_has_ofnode(dev)) > return 0; > @@ -1207,7 +1208,13 @@ static int pci_uclass_child_post_bind(struct udevice > *dev) > pplat = dev_get_parent_plat(dev); > > /* Extract vendor id and device id if available */ > - ofnode_read_pci_vendev(dev_ofnode(dev), &pplat->vendor, &pplat->device); > + err = ofnode_read_pci_vendev(dev_ofnode(dev), &pplat->vendor, > + &pplat->device); > + if (err) { > + /* Mark PCI device structure as invalid */ > + pplat->devfn = -1; While I guess we all agree that an error return should not be ignored, there might still be a better solution in this case. pplat->devfn = -1 might prevent the worst, but I assume the PCI dev | 02.1f.07 0xffff 0xffff Does not fit any class 0xff is a result of that. > + return 0; > + } > > /* Extract the devfn from fdt_pci_addr */ > pplat->devfn = pci_get_devfn(dev); thanks, Torsten

