dm: core: Add support for getting node from aliases

Add support for getting a node/property from aliases.
The similar functionality is provided for chosen node and this
implemenatation is copy of it.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Michal Simek 2020-07-28 12:51:08 +02:00
parent c94b44c64b
commit 305d31885f
3 changed files with 66 additions and 0 deletions

View File

@ -476,6 +476,28 @@ ofnode ofnode_get_chosen_node(const char *name)
return ofnode_path(prop);
}
const void *ofnode_read_aliases_prop(const char *propname, int *sizep)
{
ofnode node;
node = ofnode_path("/aliases");
return ofnode_read_prop(node, propname, sizep);
}
ofnode ofnode_get_aliases_node(const char *name)
{
const char *prop;
prop = ofnode_read_aliases_prop(name, NULL);
if (!prop)
return ofnode_null();
debug("%s: node_path: %s\n", __func__, prop);
return ofnode_path(prop);
}
int ofnode_get_child_count(ofnode parent)
{
ofnode child;

View File

@ -605,6 +605,28 @@ const char *ofnode_read_chosen_string(const char *propname);
*/
ofnode ofnode_get_chosen_node(const char *propname);
/**
* ofnode_read_aliases_prop() - get the value of a aliases property
*
* This looks for a property within the /aliases node and returns its value
*
* @propname: Property name to look for
* @sizep: Returns size of property, or FDT_ERR_... error code if function
* returns NULL
* @return property value if found, else NULL
*/
const void *ofnode_read_aliases_prop(const char *propname, int *sizep);
/**
* ofnode_get_aliases_node() - get a referenced node from the aliases node
*
* This looks up a named property in the aliases node and uses that as a path to
* look up a code.
*
* @return the referenced node if present, else ofnode_null()
*/
ofnode ofnode_get_aliases_node(const char *propname);
struct display_timing;
/**
* ofnode_decode_display_timing() - decode display timings

View File

@ -207,6 +207,28 @@ static int dm_test_ofnode_read_chosen(struct unit_test_state *uts)
}
DM_TEST(dm_test_ofnode_read_chosen, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
static int dm_test_ofnode_read_aliases(struct unit_test_state *uts)
{
const void *val;
ofnode node;
int size;
node = ofnode_get_aliases_node("eth3");
ut_assert(ofnode_valid(node));
ut_asserteq_str("sbe5", ofnode_get_name(node));
node = ofnode_get_aliases_node("unknown");
ut_assert(!ofnode_valid(node));
val = ofnode_read_aliases_prop("spi0", &size);
ut_assertnonnull(val);
ut_asserteq(7, size);
ut_asserteq_str("/spi@0", (const char *)val);
return 0;
}
DM_TEST(dm_test_ofnode_read_aliases, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
static int dm_test_ofnode_get_child_count(struct unit_test_state *uts)
{
ofnode node, child_node;