[U-Boot] [RFC 1/1] efi_loader: relocate pointer to tables

Mark Kettenis mark.kettenis at xs4all.nl
Sun Aug 5 10:23:22 UTC 2018


> From: Heinrich Schuchardt <xypron.glpk at 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.kettenis at xs4all.nl>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at 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 <kettenis at 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
> 
> 


More information about the U-Boot mailing list