dm: core: Add address operations on device tree references
authorSimon Glass <sjg@chromium.org>
Fri, 19 May 2017 02:09:01 +0000 (20:09 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 1 Jun 2017 13:03:07 +0000 (07:03 -0600)
Add functions to add addresses in the device tree using ofnode references.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/ofnode.c
include/dm/ofnode.h

index e6c9a28baeff5b220edb3e4b72d27beb84d38ab2..ac312d65465425f839599958618bc6838ae8ebd5 100644 (file)
@@ -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)
 {
index e8b33c158d93e7b4d5191d98c9a11bfcc99139a1..149622a0b2c975b14af3debbe8793b1beccfbfe5 100644 (file)
@@ -245,7 +245,7 @@ int ofnode_read_s32_default(ofnode node, const char *propname, s32 def);
 const char *ofnode_read_string(ofnode node, const char *propname);
 
 /**
- * ofnode_read_u32_array - Find and read an array of 32 bit integers
+ * ofnode_read_u32_array() - Find and read an array of 32 bit integers
  *
  * @node:      valid node reference to read property from
  * @propname:  name of the property to read
@@ -316,6 +316,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
  *