libfdt: return correct value if #size-cells property is not present
According to the device tree specification, the default value for
was not present.
This patch also makes fdt_address_cells() and fdt_size_cells() conform
to the behaviour documented in libfdt.h. The defaults are only returned
if fdt_getprop() returns -FDT_ERR_NOTFOUND, otherwise the actual error
is returned.
This is based on upstream commit:
aa7254d ("libfdt: return correct value if #size-cells property is not present")
but misses the test case part, as we don't implement them in U-Boot.
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
			
			
This commit is contained in:
		
							parent
							
								
									ce2dae3a44
								
							
						
					
					
						commit
						0ba41ce1b7
					
				|  | @ -64,7 +64,7 @@ static int fdt_cells(const void *fdt, int nodeoffset, const char *name) | ||||||
| 
 | 
 | ||||||
| 	c = fdt_getprop(fdt, nodeoffset, name, &len); | 	c = fdt_getprop(fdt, nodeoffset, name, &len); | ||||||
| 	if (!c) | 	if (!c) | ||||||
| 		return 2; | 		return len; | ||||||
| 
 | 
 | ||||||
| 	if (len != sizeof(*c)) | 	if (len != sizeof(*c)) | ||||||
| 		return -FDT_ERR_BADNCELLS; | 		return -FDT_ERR_BADNCELLS; | ||||||
|  | @ -78,10 +78,20 @@ static int fdt_cells(const void *fdt, int nodeoffset, const char *name) | ||||||
| 
 | 
 | ||||||
| int fdt_address_cells(const void *fdt, int nodeoffset) | int fdt_address_cells(const void *fdt, int nodeoffset) | ||||||
| { | { | ||||||
| 	return fdt_cells(fdt, nodeoffset, "#address-cells"); | 	int val; | ||||||
|  | 
 | ||||||
|  | 	val = fdt_cells(fdt, nodeoffset, "#address-cells"); | ||||||
|  | 	if (val == -FDT_ERR_NOTFOUND) | ||||||
|  | 		return 2; | ||||||
|  | 	return val; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int fdt_size_cells(const void *fdt, int nodeoffset) | int fdt_size_cells(const void *fdt, int nodeoffset) | ||||||
| { | { | ||||||
| 	return fdt_cells(fdt, nodeoffset, "#size-cells"); | 	int val; | ||||||
|  | 
 | ||||||
|  | 	val = fdt_cells(fdt, nodeoffset, "#size-cells"); | ||||||
|  | 	if (val == -FDT_ERR_NOTFOUND) | ||||||
|  | 		return 1; | ||||||
|  | 	return val; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1109,7 +1109,7 @@ int fdt_address_cells(const void *fdt, int nodeoffset); | ||||||
|  * |  * | ||||||
|  * returns: |  * returns: | ||||||
|  *	0 <= n < FDT_MAX_NCELLS, on success |  *	0 <= n < FDT_MAX_NCELLS, on success | ||||||
|  *      2, if the node has no #size-cells property |  *      1, if the node has no #size-cells property | ||||||
|  *      -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid |  *      -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid | ||||||
|  *		#size-cells property |  *		#size-cells property | ||||||
|  *	-FDT_ERR_BADMAGIC, |  *	-FDT_ERR_BADMAGIC, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue