Make use the existing GDT which now includes entries for 64-bit code. Leave the interrupt descriptors alone. They can be tidied up once U-Boot starts up.
With this, kvm mode works with QEMU. Signed-off-by: Simon Glass <s...@chromium.org> Fixes: https://source.denx.de/u-boot/custodians/u-boot-dm/-/issues/31 --- (no changes since v1) arch/x86/cpu/i386/call64.S | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/arch/x86/cpu/i386/call64.S b/arch/x86/cpu/i386/call64.S index e5a0420d1ba..3137ec17d31 100644 --- a/arch/x86/cpu/i386/call64.S +++ b/arch/x86/cpu/i386/call64.S @@ -7,6 +7,7 @@ */ #include <asm/msr-index.h> +#include <asm/processor.h> #include <asm/processor-flags.h> .code32 @@ -30,11 +31,6 @@ cpu_call64: andl $~X86_CR0_PG, %eax movl %eax, %cr0 - /* Load new GDT with the 64bit segments using 32bit descriptor */ - leal gdt, %eax - movl %eax, gdt+2 - lgdt gdt - /* Enable PAE mode */ movl $(X86_CR4_PAE), %eax movl %eax, %cr4 @@ -49,12 +45,6 @@ cpu_call64: btsl $_EFER_LME, %eax wrmsr - /* After gdt is loaded */ - xorl %eax, %eax - lldt %ax - movl $0x20, %eax - ltr %ax - /* * Setup for the jump to 64bit mode * @@ -67,7 +57,7 @@ cpu_call64: */ pop %esi /* setup_base */ - pushl $0x10 + pushl $(X86_GDT_ENTRY_64BIT_CS * X86_GDT_ENTRY_SIZE) leal lret_target, %eax pushl %eax -- 2.43.0