Hi Stefan, On Sat, 19 Jan 2019 at 00:46, Stefan Roese <s...@denx.de> wrote: > > This function will be used by the Marvell Armada XP/38x PCIe driver, > which is moved to DM right now. It's mostly copied from the Linux > version. > > Signed-off-by: Stefan Roese <s...@denx.de> > Cc: Simon Glass <s...@chromium.org> > --- > drivers/core/ofnode.c | 12 ++++++++++++ > include/dm/ofnode.h | 11 +++++++++++ > 2 files changed, 23 insertions(+)
The code to do this right now is in pci_uclass_child_post_bind(). Do you think you could break that out into a pci_... function that you can call from your new function? Also I had a look at the code you wrote that calls this. Ideally we would have the PCIe nodes have their own driver so that driver model will automatically bind them, but I am not sure that is feasible. Regards, Simon > > diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c > index 0e584c12dc..b74b95ff61 100644 > --- a/drivers/core/ofnode.c > +++ b/drivers/core/ofnode.c > @@ -666,6 +666,18 @@ int ofnode_read_pci_vendev(ofnode node, u16 *vendor, u16 > *device) > return -ENOENT; > } > > +int ofnode_pci_get_devfn(ofnode node) > +{ > + u32 reg[5]; > + int error; > + > + error = ofnode_read_u32_array(node, "reg", reg, ARRAY_SIZE(reg)); > + if (error) > + return error; > + > + return (reg[0] >> 8) & 0xff; > +} > + > int ofnode_read_addr_cells(ofnode node) > { > if (ofnode_is_np(node)) > diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h > index d206ee2caa..66d7f8d055 100644 > --- a/include/dm/ofnode.h > +++ b/include/dm/ofnode.h > @@ -608,6 +608,17 @@ int ofnode_read_pci_addr(ofnode node, enum fdt_pci_space > type, > */ > int ofnode_read_pci_vendev(ofnode node, u16 *vendor, u16 *device); > > +/** > + * ofnode_pci_get_devfn() - Get device and function numbers for a device node > + * @ofnode: node to examine > + * > + * Parses a standard 5-cell PCI resource and returns an 8-bit value that can > + * be passed to the PCI_SLOT() and PCI_FUNC() macros to extract the device > + * and function numbers respectively. On error a negative error code is > + * returned. > + */ > +int ofnode_pci_get_devfn(ofnode node); > + > /** > * ofnode_read_addr_cells() - Get the number of address cells for a node > * > -- > 2.20.1 > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot