[U-Boot] [PATCH 3/3] x86: Use the existing GDT in the ROM for 64-bit U-Boot proper

Bin Meng bmeng.cn at gmail.com
Thu Jan 31 16:22:14 UTC 2019


It is unnecessary to use a RAM version GDT for 64-bit U-Boot proper.
In fact we can just use the ROM version directly, which not only
eliminates the risk of being overwritten by application, but also
removes the complexity of patching the cpu_call64().

Signed-off-by: Bin Meng <bmeng.cn at gmail.com>

---

 arch/x86/cpu/i386/cpu.c | 14 --------------
 1 file changed, 14 deletions(-)

diff --git a/arch/x86/cpu/i386/cpu.c b/arch/x86/cpu/i386/cpu.c
index e4b5514..3bde44e 100644
--- a/arch/x86/cpu/i386/cpu.c
+++ b/arch/x86/cpu/i386/cpu.c
@@ -535,23 +535,9 @@ int cpu_jump_to_64bit_uboot(ulong target)
 		printf("Failed to allocate the cpu_call64 stub\n");
 		return -ENOMEM;
 	}
-	char *gdt = (char *)0x3100000;
-
-	extern char gdt64[];
-
 	memcpy(ptr, cpu_call64, call64_stub_size);
-	memcpy(gdt, gdt64, 0x100);
 
-	/*
-	 * TODO(sjg at chromium.org): This manually inserts the pointers into
-	 * the code. Tidy this up to avoid this.
-	 */
 	func = (func_t)ptr;
-	ulong ofs = (ulong)cpu_call64 - (ulong)ptr;
-	*(ulong *)(ptr + 7) = (ulong)gdt;
-	*(ulong *)(ptr + 0xc) = (ulong)gdt + 2;
-	*(ulong *)(ptr + 0x13) = (ulong)gdt;
-	*(ulong *)(ptr + 0x117 - 0xd4) -= ofs;
 
 	/*
 	 * Copy U-Boot from ROM
-- 
2.7.4



More information about the U-Boot mailing list