mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-25 21:24:21 +08:00
fdt: Fix regression in fdt_pack_reg()
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>
Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Stefan Roese <sr@denx.de>
Tested-by: Vince Hsu <vinceh@nvidia.com>
This commit is contained in:
parent
0bd4e39d2b
commit
ffccb84c1a
@ -370,22 +370,22 @@ static int fdt_pack_reg(const void *fdt, void *buf, u64 *address, u64 *size,
|
|||||||
int n)
|
int n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int address_len = fdt_address_cells(fdt, 0);
|
int address_cells = fdt_address_cells(fdt, 0);
|
||||||
int size_len = fdt_size_cells(fdt, 0);
|
int size_cells = fdt_size_cells(fdt, 0);
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
if (address_len == 2)
|
if (address_cells == 2)
|
||||||
*(fdt64_t *)p = cpu_to_fdt64(address[i]);
|
*(fdt64_t *)p = cpu_to_fdt64(address[i]);
|
||||||
else
|
else
|
||||||
*(fdt32_t *)p = cpu_to_fdt32(address[i]);
|
*(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]);
|
*(fdt64_t *)p = cpu_to_fdt64(size[i]);
|
||||||
else
|
else
|
||||||
*(fdt32_t *)p = cpu_to_fdt32(size[i]);
|
*(fdt32_t *)p = cpu_to_fdt32(size[i]);
|
||||||
p += size_len;
|
p += 4 * size_cells;
|
||||||
}
|
}
|
||||||
|
|
||||||
return p - (char *)buf;
|
return p - (char *)buf;
|
||||||
|
Loading…
Reference in New Issue
Block a user