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