Skip to content
Snippets Groups Projects
Commit 96875e7d authored by Simon Glass's avatar Simon Glass Committed by Albert ARIBAUD
Browse files

fdt: Add function to locate an array in the device tree


fdtdec_locate_array() locates an integer array but does not copy it. This
saves the caller having to allocated wasted space.

Access to array elements should be through the fdt32_to_cpu() macro.

Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
Signed-off-by: default avatarTom Warren <twarren@nvidia.com>
parent 39007ec8
Branches
Tags
No related merge requests found
...@@ -271,6 +271,25 @@ int fdtdec_lookup_phandle(const void *blob, int node, const char *prop_name); ...@@ -271,6 +271,25 @@ int fdtdec_lookup_phandle(const void *blob, int node, const char *prop_name);
int fdtdec_get_int_array(const void *blob, int node, const char *prop_name, int fdtdec_get_int_array(const void *blob, int node, const char *prop_name,
u32 *array, int count); u32 *array, int count);
/**
* Look up a property in a node and return a pointer to its contents as a
* unsigned int array of given length. The property must have at least enough
* data for the array ('count' cells). It may have more, but this will be
* ignored. The data is not copied.
*
* Note that you must access elements of the array with fdt32_to_cpu(),
* since the elements will be big endian even on a little endian machine.
*
* @param blob FDT blob
* @param node node to examine
* @param prop_name name of property to find
* @param count number of array elements
* @return pointer to array if found, or NULL if the property is not
* found or there is not enough data
*/
const u32 *fdtdec_locate_array(const void *blob, int node,
const char *prop_name, int count);
/** /**
* Look up a boolean property in a node and return it. * Look up a boolean property in a node and return it.
* *
......
...@@ -363,6 +363,17 @@ int fdtdec_get_int_array(const void *blob, int node, const char *prop_name, ...@@ -363,6 +363,17 @@ int fdtdec_get_int_array(const void *blob, int node, const char *prop_name,
return err; return err;
} }
const u32 *fdtdec_locate_array(const void *blob, int node,
const char *prop_name, int count)
{
const u32 *cell;
int err;
cell = get_prop_check_min_len(blob, node, prop_name,
sizeof(u32) * count, &err);
return err ? NULL : cell;
}
int fdtdec_get_bool(const void *blob, int node, const char *prop_name) int fdtdec_get_bool(const void *blob, int node, const char *prop_name)
{ {
const s32 *cell; const s32 *cell;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment