mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
dm: core: add ofnode_count_phandle_with_args()
This function is usefull to get phandle number contained in a property list. For example, this allows to allocate the right amount of memory to keep clock's reference contained into the "clocks" property. To implement it, either of_count_phandle_with_args() or fdtdec_parse_phandle_with_args() are used respectively for live tree and flat tree. By passing index = -1, these 2 functions returns the number of phandle contained into the property list. Add also the dev_count_phandle_with_args() based on ofnode_count_phandle_with_args() Signed-off-by: Patrice Chotard <patrice.chotard@st.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
82a8a669b4
commit
642346ae26
5 changed files with 79 additions and 0 deletions
|
@ -665,6 +665,13 @@ int of_parse_phandle_with_args(const struct device_node *np,
|
||||||
index, out_args);
|
index, out_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int of_count_phandle_with_args(const struct device_node *np,
|
||||||
|
const char *list_name, const char *cells_name)
|
||||||
|
{
|
||||||
|
return __of_parse_phandle_with_args(np, list_name, cells_name, 0,
|
||||||
|
-1, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void of_alias_add(struct alias_prop *ap, struct device_node *np,
|
static void of_alias_add(struct alias_prop *ap, struct device_node *np,
|
||||||
int id, const char *stem, int stem_len)
|
int id, const char *stem, int stem_len)
|
||||||
{
|
{
|
||||||
|
|
|
@ -313,6 +313,18 @@ int ofnode_parse_phandle_with_args(ofnode node, const char *list_name,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ofnode_count_phandle_with_args(ofnode node, const char *list_name,
|
||||||
|
const char *cells_name)
|
||||||
|
{
|
||||||
|
if (ofnode_is_np(node))
|
||||||
|
return of_count_phandle_with_args(ofnode_to_np(node),
|
||||||
|
list_name, cells_name);
|
||||||
|
else
|
||||||
|
return fdtdec_parse_phandle_with_args(gd->fdt_blob,
|
||||||
|
ofnode_to_offset(node), list_name, cells_name,
|
||||||
|
0, -1, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
ofnode ofnode_path(const char *path)
|
ofnode ofnode_path(const char *path)
|
||||||
{
|
{
|
||||||
if (of_live_active())
|
if (of_live_active())
|
||||||
|
|
|
@ -352,6 +352,24 @@ int of_parse_phandle_with_args(const struct device_node *np,
|
||||||
const char *list_name, const char *cells_name,
|
const char *list_name, const char *cells_name,
|
||||||
int index, struct of_phandle_args *out_args);
|
int index, struct of_phandle_args *out_args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* of_count_phandle_with_args() - Count the number of phandle in a list
|
||||||
|
*
|
||||||
|
* @np: pointer to a device tree node containing a list
|
||||||
|
* @list_name: property name that contains a list
|
||||||
|
* @cells_name: property name that specifies phandles' arguments count
|
||||||
|
* @return number of phandle found, -ENOENT if
|
||||||
|
* @list_name does not exist, -EINVAL if a phandle was not found,
|
||||||
|
* @cells_name could not be found, the arguments were truncated or there
|
||||||
|
* were too many arguments.
|
||||||
|
*
|
||||||
|
* Returns number of phandle found on success, on error returns appropriate
|
||||||
|
* errno value.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int of_count_phandle_with_args(const struct device_node *np,
|
||||||
|
const char *list_name, const char *cells_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_alias_scan() - Scan all properties of the 'aliases' node
|
* of_alias_scan() - Scan all properties of the 'aliases' node
|
||||||
*
|
*
|
||||||
|
|
|
@ -432,6 +432,23 @@ int ofnode_parse_phandle_with_args(ofnode node, const char *list_name,
|
||||||
int index,
|
int index,
|
||||||
struct ofnode_phandle_args *out_args);
|
struct ofnode_phandle_args *out_args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ofnode_count_phandle_with_args() - Count number of phandle in a list
|
||||||
|
*
|
||||||
|
* This function is useful to count phandles into a list.
|
||||||
|
* Returns number of phandle on success, on error returns appropriate
|
||||||
|
* errno value.
|
||||||
|
*
|
||||||
|
* @node: device tree node containing a list
|
||||||
|
* @list_name: property name that contains a list
|
||||||
|
* @cells_name: property name that specifies phandles' arguments count
|
||||||
|
* @return number of phandle on success, -ENOENT if @list_name does not
|
||||||
|
* exist, -EINVAL if a phandle was not found, @cells_name could not
|
||||||
|
* be found.
|
||||||
|
*/
|
||||||
|
int ofnode_count_phandle_with_args(ofnode node, const char *list_name,
|
||||||
|
const char *cells_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ofnode_path() - find a node by full path
|
* ofnode_path() - find a node by full path
|
||||||
*
|
*
|
||||||
|
|
|
@ -208,6 +208,24 @@ int dev_read_phandle_with_args(struct udevice *dev, const char *list_name,
|
||||||
int index,
|
int index,
|
||||||
struct ofnode_phandle_args *out_args);
|
struct ofnode_phandle_args *out_args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dev_count_phandle_with_args() - Return phandle number in a list
|
||||||
|
*
|
||||||
|
* This function is usefull to get phandle number contained in a property list.
|
||||||
|
* For example, this allows to allocate the right amount of memory to keep
|
||||||
|
* clock's reference contained into the "clocks" property.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @dev: device whose node containing a list
|
||||||
|
* @list_name: property name that contains a list
|
||||||
|
* @cells_name: property name that specifies phandles' arguments count
|
||||||
|
* @Returns number of phandle found on success, on error returns appropriate
|
||||||
|
* errno value.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int dev_count_phandle_with_args(struct udevice *dev, const char *list_name,
|
||||||
|
const char *cells_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dev_read_addr_cells() - Get the number of address cells for a device's node
|
* dev_read_addr_cells() - Get the number of address cells for a device's node
|
||||||
*
|
*
|
||||||
|
@ -416,6 +434,13 @@ static inline int dev_read_phandle_with_args(struct udevice *dev,
|
||||||
out_args);
|
out_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int dev_count_phandle_with_args(struct udevice *dev,
|
||||||
|
const char *list_name, const char *cells_name)
|
||||||
|
{
|
||||||
|
return ofnode_count_phandle_with_args(dev_ofnode(dev), list_name,
|
||||||
|
cells_name);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int dev_read_addr_cells(struct udevice *dev)
|
static inline int dev_read_addr_cells(struct udevice *dev)
|
||||||
{
|
{
|
||||||
/* NOTE: this call should walk up the parent stack */
|
/* NOTE: this call should walk up the parent stack */
|
||||||
|
|
Loading…
Reference in a new issue