summaryrefslogtreecommitdiff
path: root/scripts/dtc/libfdt/fdt_addresses.c
diff options
context:
space:
mode:
authorMatthias Brugger <mbrugger@suse.com>2019-09-05 10:48:47 +0200
committerSimon Glass <sjg@chromium.org>2019-10-15 08:40:02 -0600
commit0ba41ce1b7816c229cc19e0621148b98f990cb68 (patch)
tree449a98e679026e6eaa471331af17a1c0f12d0494 /scripts/dtc/libfdt/fdt_addresses.c
parentce2dae3a44ccc2fe87a9589e3a70ba51885930ab (diff)
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>
Diffstat (limited to 'scripts/dtc/libfdt/fdt_addresses.c')
-rw-r--r--scripts/dtc/libfdt/fdt_addresses.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/scripts/dtc/libfdt/fdt_addresses.c b/scripts/dtc/libfdt/fdt_addresses.c
index 49537b578d0..f13a87dfa06 100644
--- a/scripts/dtc/libfdt/fdt_addresses.c
+++ b/scripts/dtc/libfdt/fdt_addresses.c
@@ -64,7 +64,7 @@ static int fdt_cells(const void *fdt, int nodeoffset, const char *name)
c = fdt_getprop(fdt, nodeoffset, name, &len);
if (!c)
- return 2;
+ return len;
if (len != sizeof(*c))
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)
{
- 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)
{
- 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;
}