[PATCH v2 05/12] x86: Exit EFI boot services before starting kernel

Heinrich Schuchardt xypron.glpk at gmx.de
Sun Mar 19 17:31:11 CET 2023


On 3/10/23 21:48, Simon Glass wrote:
> When running the EFI app, we need to exit boot services before jumping
> to Linux.
>
> At some point it may be possible to jump to Linux and pass on the boot
> services, so that the Linux efistub can be used. For now, this is not
> implemented.

The EFI entry point expects the handle and system table. The system
table contains more then a pointer to boot services. If you respin the
series, consider updating the comment.

If you are running with CONFIG_EFI_API=y, you would have to

* install the device-tree as configuration table
* use LoadImage() to load the kernel image (e.g. from memory)
* start the image with StartImage().

Best regards

Heinrich

>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> (no changes since v1)
>
>   arch/x86/lib/bootm.c | 18 ++++++++++++++++++
>   1 file changed, 18 insertions(+)
>
> diff --git a/arch/x86/lib/bootm.c b/arch/x86/lib/bootm.c
> index 9beb376bb9c..61cb7bc6116 100644
> --- a/arch/x86/lib/bootm.c
> +++ b/arch/x86/lib/bootm.c
> @@ -10,6 +10,7 @@
>   #include <common.h>
>   #include <bootstage.h>
>   #include <command.h>
> +#include <efi.h>
>   #include <hang.h>
>   #include <log.h>
>   #include <asm/global_data.h>
> @@ -156,6 +157,23 @@ int boot_linux_kernel(ulong setup_base, ulong entry, bool image_64bit)
>   #ifdef CONFIG_SYS_COREBOOT
>   	timestamp_add_now(TS_U_BOOT_START_KERNEL);
>   #endif
> +
> +	/*
> +	 * Exit EFI boot services just before jumping, after all console
> +	 * output, since the console won't be available afterwards.
> +	 */
> +	if (IS_ENABLED(CONFIG_EFI_APP)) {
> +		int ret;
> +
> +		ret = efi_store_memory_map(efi_get_priv());
> +		if (ret)
> +			return ret;
> +		printf("Exiting EFI boot services\n");
> +		ret = efi_call_exit_boot_services();
> +		if (ret)
> +			return ret;
> +	}
> +
>   	if (image_64bit) {
>   		if (!cpu_has_64bit()) {
>   			puts("Cannot boot 64-bit kernel on 32-bit machine\n");



More information about the U-Boot mailing list