diff options
author | Simon Glass <sjg@chromium.org> | 2022-09-07 05:27:22 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-09-30 05:43:43 +0300 |
commit | 928d267aeea9406497c8060c03d3a0a78a8cbaa9 (patch) | |
tree | 443df55e9b11f345966d076f6877e4f7ddcbc7dd | |
parent | 085d59411ca7cde4ca5c70beeab4fdcea209aed6 (diff) | |
download | u-boot-928d267aeea9406497c8060c03d3a0a78a8cbaa9.tar.xz |
dm: core: Add a way to look up a phandle in an oftree
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@chromium.org>
-rw-r--r-- | drivers/core/ofnode.c | 14 | ||||
-rw-r--r-- | include/dm/ofnode.h | 25 | ||||
-rw-r--r-- | test/dm/ofnode.c | 2 |
3 files changed, 41 insertions, 0 deletions
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index 48d4dec1cc..012cb8cdda 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -410,6 +410,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 328e1edad4..fa72bb9eff 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -103,6 +103,22 @@ static inline bool ofnode_valid(ofnode node) } /** + * oftree_lookup_fdt() - obtain 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 * * @of_offset: DT offset (either valid, or -1) @@ -595,6 +611,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 * * @node: node to check diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c index f146b52d62..f6bb04642e 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); |