diff options
Diffstat (limited to 'scripts/dtc/libfdt/fdt_ro.c')
| -rw-r--r-- | scripts/dtc/libfdt/fdt_ro.c | 30 | 
1 files changed, 28 insertions, 2 deletions
diff --git a/scripts/dtc/libfdt/fdt_ro.c b/scripts/dtc/libfdt/fdt_ro.c index 50cce864283c..3d00d2eee0e3 100644 --- a/scripts/dtc/libfdt/fdt_ro.c +++ b/scripts/dtc/libfdt/fdt_ro.c @@ -88,6 +88,32 @@ static int _fdt_string_eq(const void *fdt, int stroffset,  	return (strlen(p) == len) && (memcmp(p, s, len) == 0);  } +uint32_t fdt_get_max_phandle(const void *fdt) +{ +	uint32_t max_phandle = 0; +	int offset; + +	for (offset = fdt_next_node(fdt, -1, NULL);; +	     offset = fdt_next_node(fdt, offset, NULL)) { +		uint32_t phandle; + +		if (offset == -FDT_ERR_NOTFOUND) +			return max_phandle; + +		if (offset < 0) +			return (uint32_t)-1; + +		phandle = fdt_get_phandle(fdt, offset); +		if (phandle == (uint32_t)-1) +			continue; + +		if (phandle > max_phandle) +			max_phandle = phandle; +	} + +	return 0; +} +  int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)  {  	FDT_CHECK_HEADER(fdt); @@ -545,7 +571,7 @@ int fdt_stringlist_count(const void *fdt, int nodeoffset, const char *property)  	list = fdt_getprop(fdt, nodeoffset, property, &length);  	if (!list) -		return -length; +		return length;  	end = list + length; @@ -571,7 +597,7 @@ int fdt_stringlist_search(const void *fdt, int nodeoffset, const char *property,  	list = fdt_getprop(fdt, nodeoffset, property, &length);  	if (!list) -		return -length; +		return length;  	len = strlen(string) + 1;  	end = list + length;  | 
