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