[U-Boot] [PATCH v2 11/11] fdt: Try to use fdt_address_cells()/fdt_size_cells()

Simon Glass sjg at chromium.org
Fri Oct 24 02:58:57 CEST 2014


Use these new functions where possible. They default to a value of 2 so we
cannot use them in some places where we need a default value of 1.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

Changes in v2: None

 board/freescale/mpc8641hpcn/mpc8641hpcn.c |  7 +++---
 common/fdt_support.c                      | 41 ++++++-------------------------
 2 files changed, 12 insertions(+), 36 deletions(-)

diff --git a/board/freescale/mpc8641hpcn/mpc8641hpcn.c b/board/freescale/mpc8641hpcn/mpc8641hpcn.c
index 1ab72f9..94633b5 100644
--- a/board/freescale/mpc8641hpcn/mpc8641hpcn.c
+++ b/board/freescale/mpc8641hpcn/mpc8641hpcn.c
@@ -123,7 +123,7 @@ int ft_board_setup(void *blob, bd_t *bd)
 {
 	int off;
 	u64 *tmp;
-	u32 *addrcells;
+	int addrcells;
 
 	ft_cpu_setup(blob, bd);
 
@@ -135,12 +135,13 @@ int ft_board_setup(void *blob, bd_t *bd)
 	 * which is defined by the "reg" property in the soc node.
 	 */
 	off = fdt_path_offset(blob, "/soc8641");
-	addrcells = (u32 *)fdt_getprop(blob, 0, "#address-cells", NULL);
+	addrcells = fdt_address_cells(blob, 0);
 	tmp = (u64 *)fdt_getprop(blob, off, "reg", NULL);
 
 	if (tmp) {
 		u64 addr;
-		if (addrcells && (*addrcells == 1))
+
+		if (addrcells == 1)
 			addr = *(u32 *)tmp;
 		else
 			addr = *tmp;
diff --git a/common/fdt_support.c b/common/fdt_support.c
index f9b81c6..a405cb8 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -16,22 +16,6 @@
 #include <fdt_support.h>
 #include <exports.h>
 
-/*
- * Get cells len in bytes
- *     if #NNNN-cells property is 2 then len is 8
- *     otherwise len is 4
- */
-static int get_cells_len(const void *fdt, const char *nr_cells_name)
-{
-	const fdt32_t *cell;
-
-	cell = fdt_getprop(fdt, 0, nr_cells_name, NULL);
-	if (cell && fdt32_to_cpu(*cell) == 2)
-		return 8;
-
-	return 4;
-}
-
 /**
  * fdt_getprop_u32_default_node - Return a node's property or a default
  *
@@ -246,7 +230,7 @@ int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
 		return err;
 	}
 
-	is_u64 = (get_cells_len(fdt, "#address-cells") == 8);
+	is_u64 = (fdt_address_cells(fdt, 0) == 2);
 
 	err = fdt_setprop_uxx(fdt, nodeoffset, "linux,initrd-start",
 			      (uint64_t)initrd_start, is_u64);
@@ -386,18 +370,18 @@ static int fdt_pack_reg(const void *fdt, void *buf, u64 *address, u64 *size,
 			int n)
 {
 	int i;
-	int address_len = get_cells_len(fdt, "#address-cells");
-	int size_len = get_cells_len(fdt, "#size-cells");
+	int address_len = fdt_address_cells(fdt, 0);
+	int size_len = fdt_size_cells(fdt, 0);
 	char *p = buf;
 
 	for (i = 0; i < n; i++) {
-		if (address_len == 8)
+		if (address_len == 2)
 			*(fdt64_t *)p = cpu_to_fdt64(address[i]);
 		else
 			*(fdt32_t *)p = cpu_to_fdt32(address[i]);
 		p += address_len;
 
-		if (size_len == 8)
+		if (size_len == 2)
 			*(fdt64_t *)p = cpu_to_fdt64(size[i]);
 		else
 			*(fdt32_t *)p = cpu_to_fdt32(size[i]);
@@ -968,13 +952,8 @@ void of_bus_default_count_cells(void *blob, int parentoffset,
 {
 	const fdt32_t *prop;
 
-	if (addrc) {
-		prop = fdt_getprop(blob, parentoffset, "#address-cells", NULL);
-		if (prop)
-			*addrc = be32_to_cpup(prop);
-		else
-			*addrc = 2;
-	}
+	if (addrc)
+		*addrc = fdt_address_cells(blob, parentoffset);
 
 	if (sizec) {
 		prop = fdt_getprop(blob, parentoffset, "#size-cells", NULL);
@@ -1419,11 +1398,7 @@ u64 fdt_get_base_address(void *fdt, int node)
 	u32 naddr;
 	const fdt32_t *prop;
 
-	prop = fdt_getprop(fdt, node, "#address-cells", &size);
-	if (prop && size == 4)
-		naddr = be32_to_cpup(prop);
-	else
-		naddr = 2;
+	naddr = fdt_address_cells(fdt, node);
 
 	prop = fdt_getprop(fdt, node, "ranges", &size);
 
-- 
2.1.0.rc2.206.gedb03e5



More information about the U-Boot mailing list