Patchwork Query cpu instead of using CONFIG_CPU_ADDR_BITS on AMD cpus

login
register
about
Submitter Tobias Diedrich
Date 2010-10-26 17:05:51
Message ID <20101026170550.GD17791@yumi.tdiedrich.de>
Download mbox | patch
Permalink /patch/2172/
State Superseded
Headers show

Comments

Tobias Diedrich - 2010-10-26 17:05:51
This fixes a FIXME in src/cpu/amd/mtrr/amd_mtrr.c and shuts up the
Linux kernel, which was previously complaining that the MTRR setup
is wrong, if the cpu supports more than CONFIG_CPU_ADDR_BITS bits of
address space.

Shamelessly copied from Linux arch/x86/kernel/cpu/mtrr/main.c

Signed-off-by: Tobias Diedrich <ranma+coreboot@tdiedrich.de>

---

Patch

Index: src/cpu/amd/mtrr/amd_mtrr.c
===================================================================
--- src/cpu/amd/mtrr/amd_mtrr.c	(revision 5985)
+++ src/cpu/amd/mtrr/amd_mtrr.c	(working copy)
@@ -1,5 +1,6 @@ 
 #include <console/console.h>
 #include <device/device.h>
+#include <arch/cpu.h>
 #include <cpu/x86/mtrr.h>
 #include <cpu/amd/mtrr.h>
 #include <cpu/x86/cache.h>
@@ -175,11 +176,13 @@ 
 
 	enable_cache();
 
-	/* FIXME we should probably query the cpu for this
-	 * but so far this is all any recent AMD cpu has supported.
-	 */
 	address_bits = CONFIG_CPU_ADDR_BITS; //K8 could be 40, and GH could be 48
 
+	/* AMD specific MSR to query number of address bits */
+	if (cpuid_eax(0x80000000) >= 0x80000008) {
+		address_bits = cpuid_eax(0x80000008) & 0xff;
+	}
+
 	/* Now that I have mapped what is memory and what is not
 	 * Setup the mtrrs so we can cache the memory.
 	 */