mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-28 01:51:33 +00:00
fdt: Add a function to decode a variable-sized u32 array
Sometimes an array can be of variable size up to a maximum. Add a helper function to decode this. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
768e0f52f2
commit
a9f04d49e5
2 changed files with 36 additions and 0 deletions
|
@ -444,6 +444,22 @@ 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 its contents in an integer
|
||||||
|
* array of given length. The property must exist but may have less data that
|
||||||
|
* expected (4*count bytes). It may have more, but this will be ignored.
|
||||||
|
*
|
||||||
|
* @param blob FDT blob
|
||||||
|
* @param node node to examine
|
||||||
|
* @param prop_name name of property to find
|
||||||
|
* @param array array to fill with data
|
||||||
|
* @param count number of array elements
|
||||||
|
* @return number of array elements if ok, or -FDT_ERR_NOTFOUND if the
|
||||||
|
* property is not found
|
||||||
|
*/
|
||||||
|
int fdtdec_get_int_array_count(const void *blob, int node,
|
||||||
|
const char *prop_name, u32 *array, int count);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Look up a property in a node and return a pointer to its contents as a
|
* 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
|
* unsigned int array of given length. The property must have at least enough
|
||||||
|
|
20
lib/fdtdec.c
20
lib/fdtdec.c
|
@ -485,6 +485,26 @@ int fdtdec_get_int_array(const void *blob, int node, const char *prop_name,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fdtdec_get_int_array_count(const void *blob, int node,
|
||||||
|
const char *prop_name, u32 *array, int count)
|
||||||
|
{
|
||||||
|
const u32 *cell;
|
||||||
|
int len, elems;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
debug("%s: %s\n", __func__, prop_name);
|
||||||
|
cell = fdt_getprop(blob, node, prop_name, &len);
|
||||||
|
if (!cell)
|
||||||
|
return -FDT_ERR_NOTFOUND;
|
||||||
|
elems = len / sizeof(u32);
|
||||||
|
if (count > elems)
|
||||||
|
count = elems;
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
array[i] = fdt32_to_cpu(cell[i]);
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
const u32 *fdtdec_locate_array(const void *blob, int node,
|
const u32 *fdtdec_locate_array(const void *blob, int node,
|
||||||
const char *prop_name, int count)
|
const char *prop_name, int count)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue