Signed-off-by: Tim Harvey <thar...@gateworks.com>
---
 include/fdtdec.h | 11 +++++++++++
 lib/fdtdec.c     | 13 +++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/include/fdtdec.h b/include/fdtdec.h
index c26df50543..b56be097eb 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -460,6 +460,17 @@ int fdtdec_get_pci_vendev(const void *blob, int node,
 int fdtdec_get_pci_bar32(struct udevice *dev, struct fdt_pci_addr *addr,
                         u32 *bar);
 
+/**
+ * Look at the bus range property of a device node and return the pci bus
+ * range for this node.
+ * The property must hold one fdt_pci_addr with a lengh.
+ * @param blob         FDT blob
+ * @param node         node to examine
+ * @param res          the resource structure to return the bus range
+ */
+int fdtdec_get_pci_bus_range(const void *blob, int node,
+                            struct fdt_resource *res);
+
 /**
  * Look up a 32-bit integer property in a node and return it. The property
  * must have at least 4 bytes of data. The value of the first cell is
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index a420ba1885..7f63b1a312 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -305,6 +305,19 @@ int fdtdec_get_pci_bar32(struct udevice *dev, struct 
fdt_pci_addr *addr,
 
        return 0;
 }
+
+int fdtdec_get_pci_bus_range(const void *blob, int node,
+                            struct fdt_resource *res)
+{
+       const u32 *values;
+       int len;
+       values = fdt_getprop(blob, node, "bus-range", &len);
+       if (!values || len < sizeof(*values) * 2)
+               return -EINVAL;
+       res->start = be32_to_cpup(values++);
+       res->end = be32_to_cpup(values);
+       return 0;
+}
 #endif
 
 uint64_t fdtdec_get_uint64(const void *blob, int node, const char *prop_name,
-- 
2.17.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to