summaryrefslogtreecommitdiff
path: root/include/dm
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-09-06 20:27:23 -0600
committerTom Rini <trini@konsulko.com>2022-09-29 22:43:43 -0400
commit2187cb7e4aaae7a4ed7318a073b26dff462cb7a1 (patch)
tree1f99048a80467776ab8c0d71f3a35f76f8318bda /include/dm
parent928d267aeea9406497c8060c03d3a0a78a8cbaa9 (diff)
downloadu-boot-2187cb7e4aaae7a4ed7318a073b26dff462cb7a1.tar.gz
dm: core: Allow obtaining a node offset in the same tree
In some cases we want to obtain an ofnode in the same tree as a different ofnode, such as when looking up a subnode. At present this is trivial, since there is only one tree. When there are multiple trees, this implementation will change. Also move the ofnode_to_offset() function up higher in the header file, since we will need to provide a different implementation with multiple trees. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include/dm')
-rw-r--r--include/dm/ofnode.h44
1 files changed, 32 insertions, 12 deletions
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index fa72bb9eff..a53cffbed9 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -55,6 +55,23 @@ static inline void *ofnode_to_fdt(ofnode node)
}
/**
+ * ofnode_to_offset() - convert an ofnode to a flat DT offset
+ *
+ * This cannot be called if the reference contains a node pointer.
+ *
+ * @node: Reference containing offset (possibly invalid)
+ * Return: DT offset (can be -1)
+ */
+static inline int ofnode_to_offset(ofnode node)
+{
+#ifdef OF_CHECKS
+ if (of_live_active())
+ return -1;
+#endif
+ return node.of_offset;
+}
+
+/**
* ofnode_to_np() - convert an ofnode to a live DT node pointer
*
* This cannot be called if the reference contains an offset.
@@ -72,20 +89,22 @@ static inline struct device_node *ofnode_to_np(ofnode node)
}
/**
- * ofnode_to_offset() - convert an ofnode to a flat DT offset
+ * noffset_to_ofnode() - convert a DT offset to an ofnode
*
- * This cannot be called if the reference contains a node pointer.
- *
- * @node: Reference containing offset (possibly invalid)
- * Return: DT offset (can be -1)
+ * @other_node: Node in the same tree to use as a reference
+ * @of_offset: DT offset (either valid, or -1)
+ * Return: reference to the associated DT offset
*/
-static inline int ofnode_to_offset(ofnode node)
+static inline ofnode noffset_to_ofnode(ofnode other_node, int of_offset)
{
-#ifdef OF_CHECKS
+ ofnode node;
+
if (of_live_active())
- return -1;
-#endif
- return node.of_offset;
+ node.np = NULL;
+ else
+ node.of_offset = of_offset;
+
+ return node;
}
/**
@@ -1175,8 +1194,9 @@ ofnode ofnode_by_compatible(ofnode from, const char *compat);
* Find the next node after @from that has a @propname with a value
* @propval and a length @proplen.
*
- * @from: ofnode to start from (use ofnode_null() to start at the
- * beginning)
+ * @from: ofnode to start from. Use ofnode_null() to start at the
+ * beginning, or the return value from oftree_root() to start at the first
+ * child of the root
* @propname: property name to check
* @propval: property value to search for
* @proplen: length of the value in propval