From: Simon Glass Date: Wed, 7 Sep 2022 02:27:22 +0000 (-0600) Subject: dm: core: Add a way to look up a phandle in an oftree X-Git-Url: http://git.dujemihanovic.xyz/img/sics.gif?a=commitdiff_plain;h=928d267aeea9406497c8060c03d3a0a78a8cbaa9;p=u-boot.git 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 --- 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 @@ -102,6 +102,22 @@ static inline bool ofnode_valid(ofnode node) return node.of_offset >= 0; } +/** + * 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 * @@ -594,6 +610,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 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);