mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
cmd: fdt: move: Use map_sysmem to convert pointers
The "fdt move" subcommand was using the provided DTB addresses directly, without trying to "map" them into U-Boot's address space. This happened to work since on the vast majority of "real" platforms there is a simple 1:1 mapping of VA to PAs, so either value works fine. However this is not true on the sandbox, so the "fdt move" command fails there miserably: => fdt addr $fdtcontroladdr => cp.l $fdtcontroladdr $fdt_addr_r 40 # simple memcpy works => fdt move $fdtcontroladdr $fdt_addr_r Segmentation fault Use the proper "map_sysmem" call to convert PAs to VAs, to make this more robust in general and to enable operation in the sandbox. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
193d3dbd45
commit
6459734619
1 changed files with 3 additions and 3 deletions
|
@ -231,11 +231,11 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
|||
/*
|
||||
* Set the address and length of the fdt.
|
||||
*/
|
||||
working_fdt = (struct fdt_header *)hextoul(argv[2], NULL);
|
||||
working_fdt = map_sysmem(hextoul(argv[2], NULL), 0);
|
||||
if (!fdt_valid(&working_fdt))
|
||||
return 1;
|
||||
|
||||
newaddr = (struct fdt_header *)hextoul(argv[3], NULL);
|
||||
newaddr = map_sysmem(hextoul(argv[3], NULL), 0);
|
||||
|
||||
/*
|
||||
* If the user specifies a length, use that. Otherwise use the
|
||||
|
@ -262,7 +262,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
|||
fdt_strerror(err));
|
||||
return 1;
|
||||
}
|
||||
set_working_fdt_addr((ulong)newaddr);
|
||||
set_working_fdt_addr(map_to_sysmem(newaddr));
|
||||
#ifdef CONFIG_OF_SYSTEM_SETUP
|
||||
/* Call the board-specific fixup routine */
|
||||
} else if (strncmp(argv[1], "sys", 3) == 0) {
|
||||
|
|
Loading…
Reference in a new issue