Author: rminnich
Date: 2008-02-04 17:16:16 +0100 (Mon, 04 Feb 2008)
New Revision: 572
Modified:
coreboot-v3/arch/x86/Makefile
coreboot-v3/arch/x86/geodelx/stage1.c
coreboot-v3/northbridge/amd/geodelx/Makefile
coreboot-v3/northbridge/amd/geodelx/geodelx.c
coreboot-v3/northbridge/amd/geodelx/geodelxinit.c
Log:
This change moves the geodelxinit code from stage2 to stage1, which in
turn gets cache turned on much sooner. The system boots a bit faster.
We're still far too slow, perhaps because we are not caching ROM?
Index: arch/x86/Makefile
Add ../../northbridge/amd/geodelx/geodelxinit.o object
Index: arch/x86/geodelx/geodelxinit.c
add sizeram function.
Index: arch/x86/geodelx/stage1.c
add called to northbridge_init_early()
Index: northbridge/amd/geodelx/Makefile
remove geodelxinit.o object
Index: northbridge/amd/geodelx/geodelx.c
remove call to northbridge_init_early()
remove sizeram function.
Signed-off-by: Ronald G. Minnich <rminnich(a)gmail.com>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006(a)gmx.net>
Modified: coreboot-v3/arch/x86/Makefile
===================================================================
--- coreboot-v3/arch/x86/Makefile 2008-02-01 20:35:53 UTC (rev 571)
+++ coreboot-v3/arch/x86/Makefile 2008-02-04 16:16:16 UTC (rev 572)
@@ -117,6 +117,7 @@
ifeq ($(CONFIG_CPU_AMD_GEODELX),y)
STAGE0_CAR_OBJ = geodelx/stage0.o
STAGE0_ARCH_X86_OBJ += geodelx/stage1.o
+ STAGE0_ARCH_X86_OBJ += ../../northbridge/amd/geodelx/geodelxinit.o
else
STAGE0_CAR_OBJ = stage0_i586.o
endif
Modified: coreboot-v3/arch/x86/geodelx/stage1.c
===================================================================
--- coreboot-v3/arch/x86/geodelx/stage1.c 2008-02-01 20:35:53 UTC (rev 571)
+++ coreboot-v3/arch/x86/geodelx/stage1.c 2008-02-04 16:16:16 UTC (rev 572)
@@ -55,6 +55,7 @@
*/
void disable_car(void)
{
+ extern void northbridge_init_early(void);
int i;
for (i = 0; i < ARRAY_SIZE(msr_table); i++)
@@ -67,5 +68,6 @@
__asm__ __volatile__("cld; rep movsl" ::"D" (DCACHE_RAM_BASE), "S" (DCACHE_RAM_BASE), "c" (DCACHE_RAM_SIZE/4): "memory");
__asm__ __volatile__ ("wbinvd\n");
banner(BIOS_DEBUG, "Disable_car: done wbinvd");
+ northbridge_init_early();
banner(BIOS_DEBUG, "disable_car: done");
}
Modified: coreboot-v3/northbridge/amd/geodelx/Makefile
===================================================================
--- coreboot-v3/northbridge/amd/geodelx/Makefile 2008-02-01 20:35:53 UTC (rev 571)
+++ coreboot-v3/northbridge/amd/geodelx/Makefile 2008-02-04 16:16:16 UTC (rev 572)
@@ -22,7 +22,6 @@
ifeq ($(CONFIG_NORTHBRIDGE_AMD_GEODELX),y)
STAGE2_CHIPSET_OBJ += $(obj)/northbridge/amd/geodelx/geodelx.o \
- $(obj)/northbridge/amd/geodelx/geodelxinit.o \
$(obj)/northbridge/amd/geodelx/vsmsetup.o
endif
Modified: coreboot-v3/northbridge/amd/geodelx/geodelx.c
===================================================================
--- coreboot-v3/northbridge/amd/geodelx/geodelx.c 2008-02-01 20:35:53 UTC (rev 571)
+++ coreboot-v3/northbridge/amd/geodelx/geodelx.c 2008-02-04 16:16:16 UTC (rev 572)
@@ -142,49 +142,6 @@
};
/**
- * Size up ram.
- *
- * All we need to do here is read the MSR for DRAM and grab out the sizing
- * bits. Note that this code depends on initram having run. It uses the MSRs,
- * not the SPDs, and the MSRs of course are set up by initram.
- *
- * @return TODO
- */
-int sizeram(void)
-{
- struct msr msr;
- int sizem = 0;
- u32 dimm;
-
- /* Get the RAM size from the memory controller as calculated
- * and set by auto_size_dimm().
- */
- msr = rdmsr(MC_CF07_DATA);
- printk(BIOS_DEBUG, "sizeram: _MSR MC_CF07_DATA: %08x:%08x\n", msr.hi,
- msr.lo);
-
- /* DIMM 0 */
- dimm = msr.hi;
- /* Installed? */
- if ((dimm & 7) != 7) {
- /* 1:8MB, 2:16MB, 3:32MB, 4:64MB, ... 7:512MB, 8:1GB */
- sizem = 4 << ((dimm >> 12) & 0x0F);
- }
-
- /* DIMM 1 */
- dimm = msr.hi >> 16;
- /* Installed? */
- if ((dimm & 7) != 7) {
- /* 1:8MB, 2:16MB, 3:32MB, 4:64MB, ... 7:512MB, 8:1GB */
- sizem += 4 << ((dimm >> 12) & 0x0F);
- }
-
- printk(BIOS_DEBUG, "sizeram: sizem 0x%xMB\n", sizem);
-
- return sizem;
-}
-
-/**
* Currently not set up.
*
* @param dev The nortbridge device.
@@ -317,7 +274,7 @@
printk(BIOS_SPEW, ">> Entering northbridge.c: %s\n", __FUNCTION__);
- northbridge_init_early();
+// northbridge_init_early();
chipsetinit();
setup_realmode_idt();
Modified: coreboot-v3/northbridge/amd/geodelx/geodelxinit.c
===================================================================
--- coreboot-v3/northbridge/amd/geodelx/geodelxinit.c 2008-02-01 20:35:53 UTC (rev 571)
+++ coreboot-v3/northbridge/amd/geodelx/geodelxinit.c 2008-02-04 16:16:16 UTC (rev 572)
@@ -25,7 +25,6 @@
#include <amd_geodelx.h>
/* Function prototypes */
-extern int sizeram(void);
struct gliutable {
unsigned long desc_name;
@@ -142,6 +141,49 @@
}
/**
+ * Size up ram.
+ *
+ * All we need to do here is read the MSR for DRAM and grab out the sizing
+ * bits. Note that this code depends on initram having run. It uses the MSRs,
+ * not the SPDs, and the MSRs of course are set up by initram.
+ *
+ * @return TODO
+ */
+int sizeram(void)
+{
+ struct msr msr;
+ int sizem = 0;
+ u32 dimm;
+
+ /* Get the RAM size from the memory controller as calculated
+ * and set by auto_size_dimm().
+ */
+ msr = rdmsr(MC_CF07_DATA);
+ printk(BIOS_DEBUG, "sizeram: _MSR MC_CF07_DATA: %08x:%08x\n", msr.hi,
+ msr.lo);
+
+ /* DIMM 0 */
+ dimm = msr.hi;
+ /* Installed? */
+ if ((dimm & 7) != 7) {
+ /* 1:8MB, 2:16MB, 3:32MB, 4:64MB, ... 7:512MB, 8:1GB */
+ sizem = 4 << ((dimm >> 12) & 0x0F);
+ }
+
+ /* DIMM 1 */
+ dimm = msr.hi >> 16;
+ /* Installed? */
+ if ((dimm & 7) != 7) {
+ /* 1:8MB, 2:16MB, 3:32MB, 4:64MB, ... 7:512MB, 8:1GB */
+ sizem += 4 << ((dimm >> 12) & 0x0F);
+ }
+
+ printk(BIOS_DEBUG, "sizeram: sizem 0x%xMB\n", sizem);
+
+ return sizem;
+}
+
+/**
* Set up the system memory registers, i.e. memory that can be used
* for non-VSM (or SMM) purposes.
*