On Fri, Aug 13, 2021 at 12:19 PM Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> wrote: > > Em Fri, 13 Aug 2021 11:02:57 -0500 > Rob Herring <robh@xxxxxxxxxx> escreveu: > > > When a DT contains PCI child bus nodes, lookup of the MSI domain on PCI > > buses fails resulting in the following warnings: > > > > WARNING: CPU: 4 PID: 7 at include/linux/msi.h:256 __pci_enable_msi_range+0x398/0x59c > > > > The issue is that pci_host_bridge_of_msi_domain() will check the DT node of > > the passed in bus even if it's not the host bridge's bus. Based on the > > name of the function, that's clearly not what we want. Fix this by > > walking the bus parents to the root bus. > > > > Reported-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > > Cc: Marc Zyngier <maz@xxxxxxxxxx> > > Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > > Cc: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> > > Signed-off-by: Rob Herring <robh@xxxxxxxxxx> > > --- > > Compile tested only. Mauro, Can you see if this fixes your issue. > > > > drivers/pci/of.c | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/drivers/pci/of.c b/drivers/pci/of.c > > index a143b02b2dcd..ea70aede054c 100644 > > --- a/drivers/pci/of.c > > +++ b/drivers/pci/of.c > > @@ -84,6 +84,10 @@ struct irq_domain *pci_host_bridge_of_msi_domain(struct pci_bus *bus) > > if (!bus->dev.of_node) > > return NULL; > > > > + /* Find the host bridge bus */ > > + while (!pci_is_root_bus(bus)) > > + bus = bus->parent; > > + > > /* Start looking for a phandle to an MSI controller. */ > > d = of_msi_get_domain(&bus->dev, bus->dev.of_node, DOMAIN_BUS_PCI_MSI); > > if (d) > > Nope, it didn't solve the issue. Can you try adding some prints of the domain, pci dev, and DT node to pci_set_bus_msi_domain(). Comparing those when having child nodes or not would be helpful. Rob