From: Bin Meng <bmeng.cn@gmail.com>
Date: Thu, 31 Jan 2019 16:22:12 +0000 (-0800)
Subject: x86: Change 4-level page table base address to low memory
X-Git-Tag: v2025.01-rc5-pxa1908~3127^2~3
X-Git-Url: http://git.dujemihanovic.xyz/img/%7B%7B?a=commitdiff_plain;h=dbb0696ba05b6e201341805e0df0f5095bc43a78;p=u-boot.git

x86: Change 4-level page table base address to low memory

At present the 4-level page table base address for 64-bit U-Boot
proper is assigned an address that conflicts with CONFIG_LOADADDR.
Change it to an address within the low memory range instead.

Fixes crashes seen when 'dhcp' on QEMU x86_64 with
"-net nic -net user,tftp=.,bootfile=u-boot".

Reported-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
---

diff --git a/arch/x86/cpu/i386/cpu.c b/arch/x86/cpu/i386/cpu.c
index 208ef08562..af42431f45 100644
--- a/arch/x86/cpu/i386/cpu.c
+++ b/arch/x86/cpu/i386/cpu.c
@@ -462,6 +462,7 @@ int cpu_has_64bit(void)
 		has_long_mode();
 }
 
+#define PAGETABLE_BASE		0x80000
 #define PAGETABLE_SIZE		(6 * 4096)
 
 /**
@@ -523,10 +524,7 @@ int cpu_jump_to_64bit_uboot(ulong target)
 	uint32_t *pgtable;
 	func_t func;
 
-	/* TODO(sjg@chromium.org): Find a better place for this */
-	pgtable = (uint32_t *)0x1000000;
-	if (!pgtable)
-		return -ENOMEM;
+	pgtable = (uint32_t *)PAGETABLE_BASE;
 
 	build_pagetable(pgtable);