[PATCH 17/21] dm: core: Add a way to look up a phandle in an oftree
Simon Glass
sjg at chromium.org
Wed Aug 31 05:08:13 CEST 2022
When we have multiple trees, the ofnode logic needs to be told which one
to use. Create a new function which takes an oftree argument, along with
a helper to obtain the FDT pointer from an oftree.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
drivers/core/ofnode.c | 14 ++++++++++++++
include/dm/ofnode.h | 25 +++++++++++++++++++++++++
test/dm/ofnode.c | 2 ++
3 files changed, 41 insertions(+)
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index 6ee114bd5a8..aceb809c1f2 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -337,6 +337,20 @@ ofnode ofnode_get_by_phandle(uint phandle)
return node;
}
+ofnode oftree_get_by_phandle(oftree tree, uint phandle)
+{
+ ofnode node;
+
+ if (of_live_active())
+ node = np_to_ofnode(of_find_node_by_phandle(tree.np, phandle));
+ else
+ node.of_offset =
+ fdt_node_offset_by_phandle(oftree_lookup_fdt(tree),
+ phandle);
+
+ return node;
+}
+
static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, int index,
fdt_size_t *size, bool translate)
{
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index d8d5082806e..ad196af2d45 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -120,6 +120,22 @@ static inline bool ofnode_valid(ofnode node)
return node.of_offset >= 0;
}
+/**
+ * oftree_lookup_fdt() - object the FDT pointer from an oftree
+ *
+ * This can only be called when flat tree is enabled
+ *
+ * @tree: Tree to look at
+ * @return FDT pointer from the tree
+ */
+static inline void *oftree_lookup_fdt(oftree tree)
+{
+ if (of_live_active())
+ return NULL;
+ else
+ return tree.fdt;
+}
+
/**
* offset_to_ofnode() - convert a DT offset to an ofnode
*
@@ -526,6 +542,15 @@ int ofnode_get_path(ofnode node, char *buf, int buflen);
*/
ofnode ofnode_get_by_phandle(uint phandle);
+/**
+ * oftree_get_by_phandle() - get ofnode from phandle
+ *
+ * @tree: tree to use
+ * @phandle: phandle to look up
+ * Return: ofnode reference to the phandle
+ */
+ofnode oftree_get_by_phandle(oftree tree, uint phandle);
+
/**
* ofnode_read_size() - read the size of a property
*
diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c
index 7f195a725a0..6a5beadbadc 100644
--- a/test/dm/ofnode.c
+++ b/test/dm/ofnode.c
@@ -36,6 +36,8 @@ static int dm_test_ofnode_get_by_phandle(struct unit_test_state *uts)
/* test unknown phandle */
ut_assert(!ofnode_valid(ofnode_get_by_phandle(0x1000000)));
+ ut_assert(ofnode_valid(oftree_get_by_phandle(oftree_default(), 1)));
+
return 0;
}
DM_TEST(dm_test_ofnode_get_by_phandle, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
--
2.37.2.672.g94769d06f0-goog
More information about the U-Boot
mailing list