mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
efi_loader: Use map_sysmem() in bootefi command
The bootefi command gets a few addresses as values passed in. In sandbox, these values are in U-Boot address space, so we need to make sure we explicitly call map_sysmem() on them to be able to access them. Signed-off-by: Alexander Graf <agraf@suse.de> Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
b59f69712b
commit
354264b31d
1 changed files with 8 additions and 5 deletions
|
@ -14,6 +14,7 @@
|
|||
#include <errno.h>
|
||||
#include <linux/libfdt.h>
|
||||
#include <linux/libfdt_env.h>
|
||||
#include <mapmem.h>
|
||||
#include <memalign.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm-generic/sections.h>
|
||||
|
@ -431,7 +432,8 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
unsigned long addr;
|
||||
char *saddr;
|
||||
efi_status_t r;
|
||||
void *fdt_addr;
|
||||
unsigned long fdt_addr;
|
||||
void *fdt;
|
||||
|
||||
/* Allow unaligned memory access */
|
||||
allow_unaligned();
|
||||
|
@ -448,11 +450,12 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
return CMD_RET_USAGE;
|
||||
|
||||
if (argc > 2) {
|
||||
fdt_addr = (void *)simple_strtoul(argv[2], NULL, 16);
|
||||
fdt_addr = simple_strtoul(argv[2], NULL, 16);
|
||||
if (!fdt_addr && *argv[2] != '0')
|
||||
return CMD_RET_USAGE;
|
||||
/* Install device tree */
|
||||
r = efi_install_fdt(fdt_addr);
|
||||
fdt = map_sysmem(fdt_addr, 0);
|
||||
r = efi_install_fdt(fdt);
|
||||
if (r != EFI_SUCCESS) {
|
||||
printf("ERROR: failed to install device tree\n");
|
||||
return CMD_RET_FAILURE;
|
||||
|
@ -471,7 +474,7 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
addr = simple_strtoul(saddr, NULL, 16);
|
||||
else
|
||||
addr = CONFIG_SYS_LOAD_ADDR;
|
||||
memcpy((char *)addr, __efi_helloworld_begin, size);
|
||||
memcpy(map_sysmem(addr, size), __efi_helloworld_begin, size);
|
||||
} else
|
||||
#endif
|
||||
#ifdef CONFIG_CMD_BOOTEFI_SELFTEST
|
||||
|
@ -517,7 +520,7 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
}
|
||||
|
||||
printf("## Starting EFI application at %08lx ...\n", addr);
|
||||
r = do_bootefi_exec((void *)addr, bootefi_device_path,
|
||||
r = do_bootefi_exec(map_sysmem(addr, 0), bootefi_device_path,
|
||||
bootefi_image_path);
|
||||
printf("## Application terminated, r = %lu\n",
|
||||
r & ~EFI_ERROR_MASK);
|
||||
|
|
Loading…
Reference in a new issue