From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Sun, 29 Dec 2019 21:19:14 -0700 Subject: [PATCH 05/19] pci: Print a warning if the bus is accessed before probing In-Reply-To: <20191230041928.74874-1-sjg@chromium.org> References: <20191230041928.74874-1-sjg@chromium.org> Message-ID: <20191229211913.5.I2b9131d311961ec0efab090ef9b2e70d64427585@changeid> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de It is not possible to access a device on a PCI bus that has not yet been probed, since the bus number is not known. Add a warning to catch this error. Signed-off-by: Simon Glass --- drivers/pci/pci-uclass.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c index 7308f612b6..5be2dfd0bf 100644 --- a/drivers/pci/pci-uclass.c +++ b/drivers/pci/pci-uclass.c @@ -48,6 +48,19 @@ pci_dev_t dm_pci_get_bdf(struct udevice *dev) struct pci_child_platdata *pplat = dev_get_parent_platdata(dev); struct udevice *bus = dev->parent; + /* + * This error indicates that @dev is a device on an unprobed PCI bus. + * The bus likely has bus=seq == -1, so the PCI_ADD_BUS() macro below + * will produce a bad BDF> + * + * A common cause of this problem is that this function is called in the + * ofdata_to_platdata() method of @dev. Accessing the PCI bus in that + * method is not allowed, since it has not yet been probed. To fix this, + * move that access to the probe() method of @dev instead. + */ + if (!device_active(bus)) + log_err("PCI: Device '%s' on unprobed bus '%s'\n", dev->name, + bus->name); return PCI_ADD_BUS(bus->seq, pplat->devfn); } -- 2.24.1.735.g03f4e72817-goog