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-Tag: v2023.07~312^2^2~11 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=928d267aeea9406497c8060c03d3a0a78a8cbaa9;p=platform%2Fkernel%2Fu-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 48d4dec..012cb8c 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 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);