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 <s...@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");

Reply via email to