[U-Boot] [PATCH] efi_loader: Align runtime section to 64kb

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Sep 17 05:42:48 UTC 2018


On 09/17/2018 04:45 AM, Alexander Graf wrote:
> The UEFI spec mandates that runtime sections are 64kb aligned to enable
%s/kb/ kiB/g
The spec requires a multiple of 64,000 not of 65,536.

> support for 64kb page size OSs.
> 
> This patch ensures that we extend the runtime section to 64kb to be spec
> compliant.
> 
> Signed-off-by: Alexander Graf <agraf at suse.de>
> ---
>  lib/efi_loader/efi_memory.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
> index 4f8cb545ad..66ad54a152 100644
> --- a/lib/efi_loader/efi_memory.c
> +++ b/lib/efi_loader/efi_memory.c
> @@ -11,6 +11,7 @@
>  #include <mapmem.h>
>  #include <watchdog.h>
>  #include <linux/list_sort.h>
> +#include <linux/sizes.h>
>  
>  DECLARE_GLOBAL_DATA_PTR;
>  
> @@ -526,10 +527,10 @@ static void add_u_boot_and_runtime(void)
>  	uboot_pages = (gd->ram_top - uboot_start) >> EFI_PAGE_SHIFT;
>  	efi_add_memory_map(uboot_start, uboot_pages, EFI_LOADER_DATA, false);
>  
> -	/* Add Runtime Services */
> -	runtime_start = (ulong)&__efi_runtime_start & ~EFI_PAGE_MASK;
> +	/* Add Runtime Services,must be 64kb aligned */
> +	runtime_start = (ulong)&__efi_runtime_start & ~(SZ_64K - 1);

Please, add a comment in the code referring to the requirement in the
UEFI spec.

Best regards

Heinrich

>  	runtime_end = (ulong)&__efi_runtime_stop;
> -	runtime_end = (runtime_end + EFI_PAGE_MASK) & ~EFI_PAGE_MASK;
> +	runtime_end = (runtime_end + SZ_64K - 1) & ~(SZ_64K - 1);
>  	runtime_pages = (runtime_end - runtime_start) >> EFI_PAGE_SHIFT;
>  	efi_add_memory_map(runtime_start, runtime_pages,
>  			   EFI_RUNTIME_SERVICES_CODE, false);
> 



More information about the U-Boot mailing list