[PATCH 1/1] arch: x86: lib: Add support of legacy 64-bit entry point at 0x200

Paul HENRYS paul.henrys_ext at softathome.com
Wed Nov 20 11:39:43 CET 2024


Support of legacy 64-bit entry point was already present when booting a bzimage
with 'zboot' but not supported with 'bootm' when the x86_64 Linux kernel is
embedded in a FIT image.

Signed-off-by: Paul HENRYS <paul.henrys_ext at softathome.com>
---
 arch/x86/lib/bootm.c  | 6 ++++++
 arch/x86/lib/zimage.c | 1 -
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/x86/lib/bootm.c b/arch/x86/lib/bootm.c
index 55f581836d..38b4ebf759 100644
--- a/arch/x86/lib/bootm.c
+++ b/arch/x86/lib/bootm.c
@@ -189,6 +189,12 @@ int boot_linux_kernel(ulong setup_base, ulong entry, bool image_64bit)
 		if (CONFIG_IS_ENABLED(X86_64)) {
 			typedef void (*h_func)(ulong zero, ulong setup);
 			h_func func;
+			struct setup_header *hdr = &(((struct boot_params *)(setup_base))->hdr);
+
+			/* Handle kernel with legacy 64-bit entry point at 0x200 */
+			if (hdr->xloadflags & XLF_KERNEL_64) {
+				entry += 0x200;
+			}
 
 			/* jump to Linux with rdi=0, rsi=setup_base */
 			func = (h_func)entry;
diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
index 73a21bc8f0..2eece34a07 100644
--- a/arch/x86/lib/zimage.c
+++ b/arch/x86/lib/zimage.c
@@ -426,7 +426,6 @@ int zboot_go(void)
 	image_64bit = false;
 	if (IS_ENABLED(CONFIG_X86_RUN_64BIT) &&
 	    (hdr->xloadflags & XLF_KERNEL_64)) {
-		entry += 0x200;
 		image_64bit = true;
 	}
 
-- 
2.43.0



More information about the U-Boot mailing list