Hi Andy, On Mon, 7 Apr 2025 18:30:13 +0300 Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > On Mon, Apr 07, 2025 at 04:55:35PM +0200, Herve Codina wrote: > > Device-tree node can be created when CONFIG_PCI_DYNAMIC_OF_NODES. Those > > node are created and filled based on PCI core information but the > > fwnode.dev field is not set. > > > > When later an overlay is applied, this consuses fw_devlink. Indeed, > > without any device attached to the node, fw_devlink considers that this > > node will never become a device. When this node is pointed as a > > supplier, devlink looks at its ancestors in order to find a node with a > > device that could be used as the supplier. > > > > In the PCI use case, this leads to links that wrongly use the PCI root > > bridge device as the supplier instead of the expected PCI device. > > > > Setting fwnode.dev to the dev of the PCI device allows devlink to use > > this device as a supplier and so, correct links are created. > > ... > > > + /* > > + * Set the fwnode.dev in order to have fw_devlink creating links > > + * pointing to this PCI device instead of walking up to the PCI host > > + * bridge. > > + */ > > + np->fwnode.dev = &pdev->dev; > > This is too invasive. I suppose here should be a helper for this kind of > operation. If not, create one. > > fw_devlink_set_device(...); > > > or alike. Yes, I will add void fw_devlink_set_device(struct fwnode_handle *fwnode, struct device *dev); Also, I will probably add a new patch in this series in order to use the new fw_devlink_set_device() when relevant in the already existing code. Best regards, Hervé