Add support for getting a node/property from aliases.
The similar functionality is provided for chosen node and this
implemenatation is copy of it.

Signed-off-by: Michal Simek <michal.si...@xilinx.com>
---

 drivers/core/ofnode.c | 22 ++++++++++++++++++++++
 include/dm/ofnode.h   | 22 ++++++++++++++++++++++
 test/dm/ofnode.c      | 22 ++++++++++++++++++++++
 3 files changed, 66 insertions(+)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index 7d1b89514c7d..a68076bf3517 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -476,6 +476,28 @@ ofnode ofnode_get_chosen_node(const char *name)
        return ofnode_path(prop);
 }
 
+const void *ofnode_read_aliases_prop(const char *propname, int *sizep)
+{
+       ofnode node;
+
+       node = ofnode_path("/aliases");
+
+       return ofnode_read_prop(node, propname, sizep);
+}
+
+ofnode ofnode_get_aliases_node(const char *name)
+{
+       const char *prop;
+
+       prop = ofnode_read_aliases_prop(name, NULL);
+       if (!prop)
+               return ofnode_null();
+
+       debug("%s: node_path: %s\n", __func__, prop);
+
+       return ofnode_path(prop);
+}
+
 int ofnode_get_child_count(ofnode parent)
 {
        ofnode child;
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index 4b7af3705601..ced7f6ffb250 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -605,6 +605,28 @@ const char *ofnode_read_chosen_string(const char 
*propname);
  */
 ofnode ofnode_get_chosen_node(const char *propname);
 
+/**
+ * ofnode_read_aliases_prop() - get the value of a aliases property
+ *
+ * This looks for a property within the /aliases node and returns its value
+ *
+ * @propname: Property name to look for
+ * @sizep: Returns size of property, or FDT_ERR_... error code if function
+ *     returns NULL
+ * @return property value if found, else NULL
+ */
+const void *ofnode_read_aliases_prop(const char *propname, int *sizep);
+
+/**
+ * ofnode_get_aliases_node() - get a referenced node from the aliases node
+ *
+ * This looks up a named property in the aliases node and uses that as a path 
to
+ * look up a code.
+ *
+ * @return the referenced node if present, else ofnode_null()
+ */
+ofnode ofnode_get_aliases_node(const char *propname);
+
 struct display_timing;
 /**
  * ofnode_decode_display_timing() - decode display timings
diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c
index 01ac3c2094c8..fb1ceb131805 100644
--- a/test/dm/ofnode.c
+++ b/test/dm/ofnode.c
@@ -207,6 +207,28 @@ static int dm_test_ofnode_read_chosen(struct 
unit_test_state *uts)
 }
 DM_TEST(dm_test_ofnode_read_chosen, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
 
+static int dm_test_ofnode_read_aliases(struct unit_test_state *uts)
+{
+       const void *val;
+       ofnode node;
+       int size;
+
+       node = ofnode_get_aliases_node("eth3");
+       ut_assert(ofnode_valid(node));
+       ut_asserteq_str("sbe5", ofnode_get_name(node));
+
+       node = ofnode_get_aliases_node("unknown");
+       ut_assert(!ofnode_valid(node));
+
+       val = ofnode_read_aliases_prop("spi0", &size);
+       ut_assertnonnull(val);
+       ut_asserteq(7, size);
+       ut_asserteq_str("/spi@0", (const char *)val);
+
+       return 0;
+}
+DM_TEST(dm_test_ofnode_read_aliases, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+
 static int dm_test_ofnode_get_child_count(struct unit_test_state *uts)
 {
        ofnode node, child_node;
-- 
2.28.0

Reply via email to