arch: x86: lib: Add support of legacy 64-bit entry point at 0x200
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@softathome.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
diff --git a/arch/x86/lib/bootm.c b/arch/x86/lib/bootm.c
index 0f79a5d..0cf3824 100644
--- a/arch/x86/lib/bootm.c
+++ b/arch/x86/lib/bootm.c
@@ -189,6 +189,12 @@
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 73a21bc..2eece34 100644
--- a/arch/x86/lib/zimage.c
+++ b/arch/x86/lib/zimage.c
@@ -426,7 +426,6 @@
image_64bit = false;
if (IS_ENABLED(CONFIG_X86_RUN_64BIT) &&
(hdr->xloadflags & XLF_KERNEL_64)) {
- entry += 0x200;
image_64bit = true;
}