I've been diagnosing a failure to boot on a Samsung Galaxy Book2 (W737)
but have not been able to get the kernel to boot, and would welcome some
assistance:
EFI stub: ERROR: Exit boot services failed
The problem occurs in
drivers/firmware/efi/libstub/efi-stub-helper.c::efi_exit_boot_services().
EFI_INVALID_PARAMETER is returned by efi_bs_call(exit_boot_services...).
Based on reading the EDK source I suspected either the key was changing
or memory alignment is wrong based on a reading of EDK's
CoreExitBootServices() and CoreTerminateMemoryMap() - making a large
assumption that Lenovo/Aptio (American Megatrends) firmware is based
around EDK.
Since the addition of commit d4b341269efb3 "arm64: dts: qcom: Add
support for Samsung Galaxy Book2" I had inferred it is now possible to
boot this device into Linux, but so far it seems not.
I added extensive efi_debug() logging to try to identify the problem and
have reported the patches I'm using and results extensively (too
extensively for including in this email) at "Issue #11: Samsung Galaxy
Book2 (SM-W737Y) snapdragon 850" of the aarch64-laptops project:
https://github.com/aarch64-laptops/debian-cdimage/issues/11
The latest results show:
EFI stub: Booting Linux Kernel...
EFI stub: Using DTB from configuration table
EFI stub: DEBUG: Entering allocate_new_fdt_and_exit_boot()
EFI stub: Exiting boot services...
EFI stub: DEBUG: Calling efi_exit_boot_services() with map:
EFI stub: DEBUG: efi_boot_memmap = {map=0x000000009ffce870
map_size=0xa20 desc_size=0x30 desc_ver=0x1
key_ptr=0x000000009ffce868 *key_ptr=0x2b2c buff_size=0xc90 }
EFI stub: DEBUG: Entered efi_exit_boot_services()
EFI stub: DEBUG: Memory map before calling priv_func():
EFI stub: DEBUG: efi_boot_memmap = {map=0x000000009ffce870
map_size=0xa20 desc_size=0x30 desc_ver=0x1
key_ptr=0x000000009ffce868 *key_ptr=0x2b2c buff_size=0xc90 }
EFI stub: DEBUG: Memory map after calling priv_func():
EFI stub: DEBUG: efi_boot_memmap = {map=0x000000009ffce870
map_size=0xa20 desc_size=0x30 desc_ver=0x1
key_ptr=0x000000009ffce868 *key_ptr=0x2b2c buff_size=0xc90 }
EFI stub: DEBUG: Calling efi_bs_call(exit_boot_services,
0x00000000fcb87c98, 0x2b2c)
EFI stub: DEBUG: efi_bs_call() returned -9223372036854775806
(EFI_INVALID_PARAMETER)
EFI stub: DEBUG: Calling efi_bs_call() with get_memory_map
EFI stub: DEBUG: Memory map after calling get_memory_map() again:
EFI stub: DEBUG: efi_boot_memmap = {map=0x000000009ffce870
map_size=0xa20 desc_size=0x30 desc_ver=0x1
key_ptr=0x000000009ffce868 *key_ptr=0x2b6e buff_size=0xc90 }
EFI stub: DEBUG: Calling priv_func() again
EFI stub: DEBUG: Memory map after calling priv_func() again:
EFI stub: DEBUG: efi_boot_memmap = {map=0x000000009ffce870
map_size=0xa20 desc_size=0x30 desc_ver=0x1
key_ptr=0x000000009ffce868 *key_ptr=0x2b6e buff_size=0xc90 }
EFI stub: DEBUG: Calling (again!) efi_bs_call(exit_boot_services,
0x00000000fcb87c98, 0x2b6e)
EFI stub: DEBUG: fail: efi_exit_boot_services() returns -9223372036854775806
EFI stub: DEBUG: Returned from efi_Exit_boot_services()
EFI stub: ERROR: Exit boot services failed.
EFI stub: DEBUG: fail_free_new_fdt: status= -9223372036854775806
EFI stub: DEBUG: fail: status= -9223372036854775806
EFI stub: DEBUG: Busy Wait so you can read the debug messages!