[U-Boot] [PATCH v2 11/71] dm: core: Add address operations on device tree references

Simon Glass sjg at chromium.org
Wed May 10 14:20:50 UTC 2017


Add functions to add addresses in the device tree using ofnode references.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

Changes in v2: None

 drivers/core/ofnode.c | 27 +++++++++++++++++++++++++++
 include/dm/ofnode.h   | 21 +++++++++++++++++++++
 2 files changed, 48 insertions(+)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index e6c9a28bae..ac312d6546 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -11,6 +11,7 @@
 #include <fdt_support.h>
 #include <libfdt.h>
 #include <dm/of_access.h>
+#include <dm/of_addr.h>
 #include <dm/ofnode.h>
 #include <linux/err.h>
 
@@ -195,6 +196,32 @@ int ofnode_read_size(ofnode node, const char *propname)
 	return -EINVAL;
 }
 
+fdt_addr_t ofnode_get_addr_index(ofnode node, int index)
+{
+	if (ofnode_is_np(node)) {
+		const __be32 *prop_val;
+		uint flags;
+		u64 size;
+
+		prop_val = of_get_address(
+			(struct device_node *)ofnode_to_np(node), index,
+			&size, &flags);
+		if (!prop_val)
+			return FDT_ADDR_T_NONE;
+		return  be32_to_cpup(prop_val);
+	} else {
+		return fdt_get_base_address(gd->fdt_blob,
+					    ofnode_to_offset(node));
+	}
+
+	return FDT_ADDR_T_NONE;
+}
+
+fdt_addr_t ofnode_get_addr(ofnode node)
+{
+	return ofnode_get_addr_index(node, 0);
+}
+
 int ofnode_stringlist_search(ofnode node, const char *property,
 			     const char *string)
 {
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index b4090128d4..96cfc11db4 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -319,6 +319,27 @@ const char *ofnode_get_name(ofnode node);
  */
 int ofnode_read_size(ofnode node, const char *propname);
 
+/**
+ * ofnode_get_addr_index() - get an address from a node
+ *
+ * This reads the register address from a node
+ *
+ * @node: node to read from
+ * @index: Index of address to read (0 for first)
+ * @return address, or FDT_ADDR_T_NONE if not present or invalid
+ */
+phys_addr_t ofnode_get_addr_index(ofnode node, int index);
+
+/**
+ * ofnode_get_addr() - get an address from a node
+ *
+ * This reads the register address from a node
+ *
+ * @node: node to read from
+ * @return address, or FDT_ADDR_T_NONE if not present or invalid
+ */
+phys_addr_t ofnode_get_addr(ofnode node);
+
 /**
  * ofnode_stringlist_search() - find a string in a string list and return index
  *
-- 
2.13.0.rc2.291.g57267f2277-goog



More information about the U-Boot mailing list