> 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

Reply via email to