
Hi Stefan,
On Sat, 19 Jan 2019 at 00:46, Stefan Roese sr@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 sr@denx.de Cc: Simon Glass sjg@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