Browse Source

dm: fdt: Add a function to look up a chosen node

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 <sjg@chromium.org>
Simon Glass 10 years ago
parent
commit
aac07d49d0
2 changed files with 27 additions and 0 deletions
  1. 12 0
      include/fdtdec.h
  2. 15 0
      lib/fdtdec.c

+ 12 - 0
include/fdtdec.h

@@ -374,6 +374,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
  *

+ 15 - 0
lib/fdtdec.c

@@ -380,6 +380,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)
 {
 	/*