> From: Heinrich Schuchardt <xypron.g...@gmx.de> > Date: Sat, 4 Aug 2018 23:16:06 +0200 > > When applying a virtual memory map we have to update the pointer to the > list of configuration tables. > > Fixes: 4182a129ef73 ("efi_loader: allocate configuration table array") > Reported-by: Mark Kettenis <mark.kette...@xs4all.nl> > Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de> > --- > Hello Mark, > > could you, please, test if this solves the problem.
Works on my Orange Pi PC2. So FWIW, Tested-by: Mark Kettenis <kette...@openbsd.org> Thanks, Mark > Best regards > > Heinrich > --- > lib/efi_loader/efi_runtime.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/lib/efi_loader/efi_runtime.c b/lib/efi_loader/efi_runtime.c > index 06958f23fa..45b7809dec 100644 > --- a/lib/efi_loader/efi_runtime.c > +++ b/lib/efi_loader/efi_runtime.c > @@ -360,6 +360,7 @@ static efi_status_t EFIAPI efi_set_virtual_address_map( > efi_physical_addr_t map_start = map->physical_start; > efi_physical_addr_t map_len = map->num_pages << EFI_PAGE_SHIFT; > efi_physical_addr_t map_end = map_start + map_len; > + u64 off = map->virtual_start - map_start; > > /* Adjust all mmio pointers in this region */ > list_for_each(lhandle, &efi_runtime_mmio) { > @@ -370,11 +371,17 @@ static efi_status_t EFIAPI efi_set_virtual_address_map( > link); > if ((map_start <= lmmio->paddr) && > (map_end >= lmmio->paddr)) { > - u64 off = map->virtual_start - map_start; > uintptr_t new_addr = lmmio->paddr + off; > *lmmio->ptr = (void *)new_addr; > } > } > + if ((map_start <= (uintptr_t)systab.tables) && > + (map_end >= (uintptr_t)systab.tables)) { > + char *ptr = (char *)systab.tables; > + > + ptr += off; > + systab.tables = (struct efi_configuration_table *)ptr; > + } > } > > /* Move the actual runtime code over */ > -- > 2.18.0 > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot