diff options
author | Simon Glass <sjg@chromium.org> | 2022-09-06 20:27:22 -0600 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-09-29 16:11:32 -0400 |
commit | 4a0461d9550ffa9507dce8ef2a4ddd8acc686a1d (patch) | |
tree | 3e2a38abfb47b722a3e507efbe914a4c67071155 | |
parent | f3ebc839f55600256822838a67b2f53a027bab5f (diff) | |
download | u-boot-4a0461d9550ffa9507dce8ef2a4ddd8acc686a1d.zip u-boot-4a0461d9550ffa9507dce8ef2a4ddd8acc686a1d.tar.gz u-boot-4a0461d9550ffa9507dce8ef2a4ddd8acc686a1d.tar.bz2 |
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 382948c..05e3512 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -406,6 +406,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 328e1ed..fa72bb9 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 f146b52..f6bb046 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); |