diff mbox

[U-Boot,v2] fdt: Fix regression in fdt_pack_reg()

Message ID 1417181031-10004-1-git-send-email-hdegoede@redhat.com
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Hans de Goede Nov. 28, 2014, 1:23 p.m. UTC
After commit 933cdbb479: "fdt: Try to use fdt_address_cells()/fdt_size_cells()"
I noticed that allwinner boards would no longer boot.

Switching to fdt_address_cells / fdt_size_cells changes the result from
bytes to 32 bit words, so when we increment pointers into the blob, we must
do so by 32 bit words now.

This commit makes allwinner boards boot again.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
Changes in v2:
-Improved patch subject
-s/_len/_cells/ to indicated that adress_cells and size_cells are in cells now
---
 common/fdt_support.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

Comments

Masahiro Yamada Nov. 28, 2014, 4:46 p.m. UTC | #1
2014-11-28 22:23 GMT+09:00 Hans de Goede <hdegoede@redhat.com>:
> After commit 933cdbb479: "fdt: Try to use fdt_address_cells()/fdt_size_cells()"
> I noticed that allwinner boards would no longer boot.
>
> Switching to fdt_address_cells / fdt_size_cells changes the result from
> bytes to 32 bit words, so when we increment pointers into the blob, we must
> do so by 32 bit words now.
>
> This commit makes allwinner boards boot again.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>


Tested-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Simon Glass Nov. 30, 2014, 3:05 a.m. UTC | #2
On 28 November 2014 at 06:23, Hans de Goede <hdegoede@redhat.com> wrote:
> After commit 933cdbb479: "fdt: Try to use fdt_address_cells()/fdt_size_cells()"
> I noticed that allwinner boards would no longer boot.
>
> Switching to fdt_address_cells / fdt_size_cells changes the result from
> bytes to 32 bit words, so when we increment pointers into the blob, we must
> do so by 32 bit words now.
>
> This commit makes allwinner boards boot again.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
> Changes in v2:
> -Improved patch subject
> -s/_len/_cells/ to indicated that adress_cells and size_cells are in cells now
> ---

Thanks for fixing this.

Acked-by: Simon Glass <sjg@chromium.org>
Stefan Roese Dec. 1, 2014, 12:31 p.m. UTC | #3
On 28.11.2014 14:23, Hans de Goede wrote:
> After commit 933cdbb479: "fdt: Try to use fdt_address_cells()/fdt_size_cells()"
> I noticed that allwinner boards would no longer boot.
>
> Switching to fdt_address_cells / fdt_size_cells changes the result from
> bytes to 32 bit words, so when we increment pointers into the blob, we must
> do so by 32 bit words now.
>
> This commit makes allwinner boards boot again.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Even if I'm a bit late with this answer, this fixes a regression on 
Linux booting on one of my mx6 boards. So:

Tested-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan
Vince Hsu Dec. 1, 2014, 1:21 p.m. UTC | #4
Hi,

On 11/28/2014 09:23 PM, Hans de Goede wrote:
> After commit 933cdbb479: "fdt: Try to use fdt_address_cells()/fdt_size_cells()"
> I noticed that allwinner boards would no longer boot.
>
> Switching to fdt_address_cells / fdt_size_cells changes the result from
> bytes to 32 bit words, so when we increment pointers into the blob, we must
> do so by 32 bit words now.
>
> This commit makes allwinner boards boot again.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
> Changes in v2:
> -Improved patch subject
> -s/_len/_cells/ to indicated that adress_cells and size_cells are in cells now
> ---

I just hit this problem on jetson tk1 and tried the same fix. So

Tested-by: Vince Hsu <vinceh@nvidia.com>

Thanks,
Vince

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information.  Any unauthorized review, use, disclosure or distribution
is prohibited.  If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------
diff mbox

Patch

diff --git a/common/fdt_support.c b/common/fdt_support.c
index ea42c63..6254e34 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -370,22 +370,22 @@  static int fdt_pack_reg(const void *fdt, void *buf, u64 *address, u64 *size,
 			int n)
 {
 	int i;
-	int address_len = fdt_address_cells(fdt, 0);
-	int size_len = fdt_size_cells(fdt, 0);
+	int address_cells = fdt_address_cells(fdt, 0);
+	int size_cells = fdt_size_cells(fdt, 0);
 	char *p = buf;
 
 	for (i = 0; i < n; i++) {
-		if (address_len == 2)
+		if (address_cells == 2)
 			*(fdt64_t *)p = cpu_to_fdt64(address[i]);
 		else
 			*(fdt32_t *)p = cpu_to_fdt32(address[i]);
-		p += address_len;
+		p += 4 * address_cells;
 
-		if (size_len == 2)
+		if (size_cells == 2)
 			*(fdt64_t *)p = cpu_to_fdt64(size[i]);
 		else
 			*(fdt32_t *)p = cpu_to_fdt32(size[i]);
-		p += size_len;
+		p += 4 * size_cells;
 	}
 
 	return p - (char *)buf;