|
|
|
@ -162,38 +162,14 @@ do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], |
|
|
|
|
|
|
|
|
|
/* Fixup the fdt memreserve now that we know how big it is */ |
|
|
|
|
if (of_flat_tree) { |
|
|
|
|
int j; |
|
|
|
|
uint64_t addr, size; |
|
|
|
|
int total = fdt_num_mem_rsv(of_flat_tree); |
|
|
|
|
uint actualsize; |
|
|
|
|
|
|
|
|
|
for (j = 0; j < total; j++) { |
|
|
|
|
fdt_get_mem_rsv(of_flat_tree, j, &addr, &size); |
|
|
|
|
if (addr == (uint64_t)(u32)of_flat_tree) { |
|
|
|
|
fdt_del_mem_rsv(of_flat_tree, j); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Delete the old LMB reservation */ |
|
|
|
|
lmb_free(lmb, (phys_addr_t)(u32)of_flat_tree, |
|
|
|
|
(phys_size_t)fdt_totalsize(of_flat_tree)); |
|
|
|
|
|
|
|
|
|
/* Calculate the actual size of the fdt */ |
|
|
|
|
actualsize = fdt_off_dt_strings(of_flat_tree) + |
|
|
|
|
fdt_size_dt_strings(of_flat_tree); |
|
|
|
|
|
|
|
|
|
/* Make it so the fdt ends on a page boundary */ |
|
|
|
|
actualsize = ALIGN(actualsize, 0x1000); |
|
|
|
|
actualsize = actualsize - ((uint)of_flat_tree & 0xfff); |
|
|
|
|
|
|
|
|
|
/* Change the fdt header to reflect the correct size */ |
|
|
|
|
fdt_set_totalsize(of_flat_tree, actualsize); |
|
|
|
|
of_size = actualsize; |
|
|
|
|
|
|
|
|
|
/* Add the new reservation */ |
|
|
|
|
ret = fdt_add_mem_rsv(of_flat_tree, (uint)of_flat_tree, |
|
|
|
|
of_size); |
|
|
|
|
ret = fdt_resize(of_flat_tree); |
|
|
|
|
if (ret < 0) |
|
|
|
|
goto error; |
|
|
|
|
of_size = ret; |
|
|
|
|
|
|
|
|
|
/* Create a new LMB reservation */ |
|
|
|
|
lmb_reserve(lmb, (ulong)of_flat_tree, of_size); |
|
|
|
|