mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-13 20:36:02 +01:00
boot: Correct handling of addresses in boot_relocate_fdt()
This code uses casts between addresses and pointers, so does not work with sandbox. Update it so we can allow sandbox to do device tree fixups. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
2c0b61d562
commit
19511935df
@ -186,24 +186,25 @@ int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size)
|
|||||||
/* If fdt_high is set use it to select the relocation address */
|
/* If fdt_high is set use it to select the relocation address */
|
||||||
fdt_high = env_get("fdt_high");
|
fdt_high = env_get("fdt_high");
|
||||||
if (fdt_high) {
|
if (fdt_high) {
|
||||||
void *desired_addr = (void *)hextoul(fdt_high, NULL);
|
ulong desired_addr = hextoul(fdt_high, NULL);
|
||||||
|
ulong addr;
|
||||||
|
|
||||||
if (((ulong) desired_addr) == ~0UL) {
|
if (desired_addr == ~0UL) {
|
||||||
/* All ones means use fdt in place */
|
/* All ones means use fdt in place */
|
||||||
of_start = fdt_blob;
|
of_start = fdt_blob;
|
||||||
lmb_reserve(lmb, (ulong)of_start, of_len);
|
lmb_reserve(lmb, map_to_sysmem(of_start), of_len);
|
||||||
disable_relocation = 1;
|
disable_relocation = 1;
|
||||||
} else if (desired_addr) {
|
} else if (desired_addr) {
|
||||||
of_start =
|
addr = lmb_alloc_base(lmb, of_len, 0x1000,
|
||||||
(void *)(ulong) lmb_alloc_base(lmb, of_len, 0x1000,
|
desired_addr);
|
||||||
(ulong)desired_addr);
|
of_start = map_sysmem(addr, of_len);
|
||||||
if (of_start == NULL) {
|
if (of_start == NULL) {
|
||||||
puts("Failed using fdt_high value for Device Tree");
|
puts("Failed using fdt_high value for Device Tree");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
of_start =
|
addr = lmb_alloc(lmb, of_len, 0x1000);
|
||||||
(void *)(ulong) lmb_alloc(lmb, of_len, 0x1000);
|
of_start = map_sysmem(addr, of_len);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mapsize = env_get_bootm_mapsize();
|
mapsize = env_get_bootm_mapsize();
|
||||||
@ -224,9 +225,8 @@ int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size)
|
|||||||
* At least part of this DRAM bank is usable, try
|
* At least part of this DRAM bank is usable, try
|
||||||
* using it for LMB allocation.
|
* using it for LMB allocation.
|
||||||
*/
|
*/
|
||||||
of_start =
|
of_start = map_sysmem((ulong)lmb_alloc_base(lmb,
|
||||||
(void *)(ulong) lmb_alloc_base(lmb, of_len, 0x1000,
|
of_len, 0x1000, start + usable), of_len);
|
||||||
start + usable);
|
|
||||||
/* Allocation succeeded, use this block. */
|
/* Allocation succeeded, use this block. */
|
||||||
if (of_start != NULL)
|
if (of_start != NULL)
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user