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. -- With Best Regards, Andy Shevchenko