[coreboot] [PATCH] v3: fix bugs in Geode LX RAMinit

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Fri Mar 7 15:20:56 CET 2008


Marc? It would be nice if you could read through the code and verify the 
things I did.

northbridge/amd/geodelx/raminit.c:auto_size_dimm() checks for the 
mathematically impossible condition of a value being above and below the 
specified range at the same time. Change it to check for out-of-range.
arch/x86/geodelx/geodelx.c:set_delay_control() is missing a break, it 
will keep going and mess up DRAM timings.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>

Index: LinuxBIOSv3-geodelx_dram_fixes/northbridge/amd/geodelx/raminit.c
===================================================================
--- LinuxBIOSv3-geodelx_dram_fixes/northbridge/amd/geodelx/raminit.c	(Revision 638)
+++ LinuxBIOSv3-geodelx_dram_fixes/northbridge/amd/geodelx/raminit.c	(Arbeitskopie)
@@ -79,7 +79,7 @@
 	/* EEPROM byte usage: (5) Number of DIMM Banks */
 	banner(BIOS_DEBUG, "MODBANKS");
 	spd_byte = spd_read_byte(dimm, SPD_NUM_DIMM_BANKS);
-	if ((MIN_MOD_BANKS > spd_byte) && (spd_byte > MAX_MOD_BANKS)) {
+	if ((MIN_MOD_BANKS > spd_byte) || (spd_byte > MAX_MOD_BANKS)) {
 		printk(BIOS_EMERG, "Number of module banks not compatible\n");
 		post_code(ERROR_BANK_SET);
 		hlt();
@@ -90,7 +90,7 @@
 	/* EEPROM byte usage: (17) Number of Banks on SDRAM Device */
 	banner(BIOS_DEBUG, "FIELDBANKS");
 	spd_byte = spd_read_byte(dimm, SPD_NUM_BANKS_PER_SDRAM);
-	if ((MIN_DEV_BANKS > spd_byte) && (spd_byte > MAX_DEV_BANKS)) {
+	if ((MIN_DEV_BANKS > spd_byte) || (spd_byte > MAX_DEV_BANKS)) {
 		printk(BIOS_EMERG, "Number of device banks not compatible\n");
 		post_code(ERROR_BANK_SET);
 		hlt();
Index: LinuxBIOSv3-geodelx_dram_fixes/arch/x86/geodelx/geodelx.c
===================================================================
--- LinuxBIOSv3-geodelx_dram_fixes/arch/x86/geodelx/geodelx.c	(Revision 638)
+++ LinuxBIOSv3-geodelx_dram_fixes/arch/x86/geodelx/geodelx.c	(Arbeitskopie)
@@ -386,6 +386,7 @@
 				msr.hi |= delay_control_table[i].fast_hi;
 				msr.lo |= delay_control_table[i].fast_low;
 			}
+			break;
 		}
 	}
 	wrmsr(GLCP_DELAY_CONTROLS, msr);


-- 
http://www.hailfinger.org/





More information about the coreboot mailing list