
On 2014-11-27 11:16, 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
common/fdt_support.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/fdt_support.c b/common/fdt_support.c index ea42c63..9e84937 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -379,13 +379,13 @@ static int fdt_pack_reg(const void *fdt, void *buf, u64 *address, u64 *size, *(fdt64_t *)p = cpu_to_fdt64(address[i]); else *(fdt32_t *)p = cpu_to_fdt32(address[i]);
p += address_len;
p += 4 * address_len;
if (size_len == 2) *(fdt64_t *)p = cpu_to_fdt64(size[i]); else *(fdt32_t *)p = cpu_to_fdt32(size[i]);
p += size_len;
p += 4 * size_len;
}
return p - (char *)buf;
Just debugged this as well...
I would suggest to fix the variable names, too: address_cells and size_cells.
Jan