Within /chosen we may have a node which points to another node, similar
to how /aliases works. Add a helper function to do this lookup.

Signed-off-by: Simon Glass <s...@chromium.org>
---

Changes in v5:
- Add new patch to add a function to look up a chosen node

Changes in v4: None
Changes in v3: None
Changes in v2: None

 include/fdtdec.h | 12 ++++++++++++
 lib/fdtdec.c     | 15 +++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/include/fdtdec.h b/include/fdtdec.h
index 5f88938..2590d30 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -376,6 +376,18 @@ int fdtdec_get_alias_seq(const void *blob, const char 
*base, int node,
  */
 int fdtdec_get_alias_node(const void *blob, const char *name);
 
+/**
+ * Get the offset of the given chosen node
+ *
+ * This looks up a property in /chosen containing the path to another node,
+ * then finds the offset of that node.
+ *
+ * @param blob         Device tree blob (if NULL, then error is returned)
+ * @param name         Property name, e.g. "stdout-path"
+ * @return Node offset referred to by that chosen node, or -ve FDT_ERR_...
+ */
+int fdtdec_get_chosen_node(const void *blob, const char *name);
+
 /*
  * Get the name for a compatible ID
  *
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index c2f3645..06d4542 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -382,6 +382,21 @@ int fdtdec_get_alias_node(const void *blob, const char 
*name)
        return fdt_path_offset(blob, prop);
 }
 
+int fdtdec_get_chosen_node(const void *blob, const char *name)
+{
+       const char *prop;
+       int chosen_node;
+       int len;
+
+       if (!blob)
+               return -FDT_ERR_NOTFOUND;
+       chosen_node = fdt_path_offset(blob, "/chosen");
+       prop = fdt_getprop(blob, chosen_node, name, &len);
+       if (!prop)
+               return -FDT_ERR_NOTFOUND;
+       return fdt_path_offset(blob, prop);
+}
+
 int fdtdec_check_fdt(void)
 {
        /*
-- 
2.1.0.rc2.206.gedb03e5

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

Reply via email to