diff options
-rw-r--r-- | libfdt/fdt_addresses.c | 16 | ||||
-rw-r--r-- | libfdt/libfdt.h | 2 | ||||
-rw-r--r-- | tests/addr_size_cells.c | 2 | ||||
-rw-r--r-- | tests/addr_size_cells2.c | 2 |
4 files changed, 16 insertions, 6 deletions
diff --git a/libfdt/fdt_addresses.c b/libfdt/fdt_addresses.c index 49537b5..f13a87d 100644 --- a/libfdt/fdt_addresses.c +++ b/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; } diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h index 830b77e..face02c 100644 --- a/libfdt/libfdt.h +++ b/libfdt/libfdt.h @@ -1145,7 +1145,7 @@ int fdt_address_cells(const void *fdt, int nodeoffset); * * returns: * 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 * #size-cells property * -FDT_ERR_BADMAGIC, diff --git a/tests/addr_size_cells.c b/tests/addr_size_cells.c index fcd9ff0..1b196ef 100644 --- a/tests/addr_size_cells.c +++ b/tests/addr_size_cells.c @@ -58,7 +58,7 @@ int main(int argc, char *argv[]) fdt = load_blob(argv[1]); check_node(fdt, "/", 2, 2); - check_node(fdt, "/identity-bus@0", 2, 2); + check_node(fdt, "/identity-bus@0", 2, 1); check_node(fdt, "/simple-bus@1000000", 2, 1); check_node(fdt, "/c0", -FDT_ERR_BADNCELLS, -FDT_ERR_BADNCELLS); check_node(fdt, "/c1", -FDT_ERR_BADNCELLS, -FDT_ERR_BADNCELLS); diff --git a/tests/addr_size_cells2.c b/tests/addr_size_cells2.c index 38b2c04..52c4eba 100644 --- a/tests/addr_size_cells2.c +++ b/tests/addr_size_cells2.c @@ -57,6 +57,6 @@ int main(int argc, char *argv[]) test_init(argc, argv); fdt = load_blob(argv[1]); - check_node(fdt, "/", 2, 2); + check_node(fdt, "/", 2, 1); PASS(); } |