diff options
| -rw-r--r-- | common/fdt_support.c | 18 | ||||
| -rw-r--r-- | include/fdt_support.h | 1 | 
2 files changed, 19 insertions, 0 deletions
| diff --git a/common/fdt_support.c b/common/fdt_support.c index 718b635d9..166f5e145 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -1151,4 +1151,22 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,  	return -FDT_ERR_NOTFOUND;  } +/** + * fdt_alloc_phandle: Return next free phandle value + * + * @blob: ptr to device tree + */ +int fdt_alloc_phandle(void *blob) +{ +	int offset, len, phandle = 0; +	const u32 *val; + +	for (offset = fdt_next_node(blob, -1, NULL); offset >= 0; +	     offset = fdt_next_node(blob, offset, NULL)) { +		val = fdt_getprop(blob, offset, "linux,phandle", &len); +		if (val) +			phandle = max(*val, phandle); +	} +	return phandle + 1; +} diff --git a/include/fdt_support.h b/include/fdt_support.h index 54af9fe71..871ef4524 100644 --- a/include/fdt_support.h +++ b/include/fdt_support.h @@ -86,6 +86,7 @@ void fdt_del_node_and_alias(void *blob, const char *alias);  u64 fdt_translate_address(void *blob, int node_offset, const u32 *in_addr);  int fdt_node_offset_by_compat_reg(void *blob, const char *compat,  					phys_addr_t compat_off); +int fdt_alloc_phandle(void *blob);  #endif /* ifdef CONFIG_OF_LIBFDT */  #endif /* ifndef __FDT_SUPPORT_H */ |