Author: mjones
Date: 2008-10-23 00:26:09 +0200 (Thu, 23 Oct 2008)
New Revision: 3689

Modified:
   trunk/coreboot-v2/src/northbridge/amd/lx/raminit.c
Log:
Changed RAM speed calculation to fix RAM modules getting rejected only
due to integer rounding errors. Previously, the formula was:
        speed = 2 * (10000/spd_value)
For spd_value=60 this means speed = 2 * 166 = 332, which is less than
333 and coreboot died saying RAM was incompatible. The new formula is:
        speed = 20000 / spd_value
For spd_value=60, speed=333, which is fine.

Signed-off-by: Jens Rottmann <[EMAIL PROTECTED]>
Acked-by: Marc Jones <[EMAIL PROTECTED]>


Modified: trunk/coreboot-v2/src/northbridge/amd/lx/raminit.c
===================================================================
--- trunk/coreboot-v2/src/northbridge/amd/lx/raminit.c  2008-10-22 22:24:47 UTC 
(rev 3688)
+++ trunk/coreboot-v2/src/northbridge/amd/lx/raminit.c  2008-10-22 22:26:09 UTC 
(rev 3689)
@@ -194,7 +194,7 @@
        }
 
        /* Turn SPD ns time into MHZ. Check what the asm does to this math. */
-       speed = 2 * ((10000 / (((spd_byte0 >> 4) * 10) + (spd_byte0 & 0x0F))));
+       speed = 20000 / (((spd_byte0 >> 4) * 10) + (spd_byte0 & 0x0F));
 
        /* current speed > max speed? */
        if (GeodeLinkSpeed() > speed) {
@@ -274,15 +274,14 @@
                spd_byte = spd_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_2ND);
                if (spd_byte != 0) {
                        /* Turn SPD ns time into MHZ. Check what the asm does 
to this math. */
-                       dimm_speed = 2 * (10000 / (((spd_byte >> 4) * 10) +
-                                               (spd_byte & 0x0F)));
+                       dimm_speed = 20000 / (((spd_byte >> 4) * 10) + 
(spd_byte & 0x0F));
                        if (dimm_speed >= glspeed) {
                                casmap_shift = 1; /* -.5 is a shift of 1 */
                                /* IF -1 timing is supported, check -1 timing > 
GeodeLink */
                                spd_byte = spd_read_byte(DIMM0, 
SPD_SDRAM_CYCLE_TIME_3RD);
                                if (spd_byte != 0) {
                                        /* Turn SPD ns time into MHZ. Check 
what the asm does to this math. */
-                                       dimm_speed = 2 * (10000 / (((spd_byte 
>> 4) * 10) + (spd_byte & 0x0F)));
+                                       dimm_speed = 20000 / (((spd_byte >> 4) 
* 10) + (spd_byte & 0x0F));
                                        if (dimm_speed >= glspeed) {
                                                casmap_shift = 2; /* -1 is a 
shift of 2 */
                                        }
@@ -306,14 +305,14 @@
                spd_byte = spd_read_byte(DIMM1, SPD_SDRAM_CYCLE_TIME_2ND);
                if (spd_byte != 0) {
                        /* Turn SPD ns time into MHZ. Check what the asm does 
to this math. */
-                       dimm_speed = 2 * (10000 / (((spd_byte >> 4) * 10) + 
(spd_byte & 0x0F)));
+                       dimm_speed = 20000 / (((spd_byte >> 4) * 10) + 
(spd_byte & 0x0F));
                        if (dimm_speed >= glspeed) {
                                casmap_shift = 1; /* -.5 is a shift of 1 */
                                /* IF -1 timing is supported, check -1 timing > 
GeodeLink */
                                spd_byte = spd_read_byte(DIMM1, 
SPD_SDRAM_CYCLE_TIME_3RD);
                                if (spd_byte != 0) {
                                        /* Turn SPD ns time into MHZ. Check 
what the asm does to this math. */
-                                       dimm_speed = 2 * (10000 / (((spd_byte 
>> 4) * 10) + (spd_byte & 0x0F)));
+                                       dimm_speed = 20000 / (((spd_byte >> 4) 
* 10) + (spd_byte & 0x0F));
                                        if (dimm_speed >= glspeed) {
                                                casmap_shift = 2; /* -1 is a 
shift of 2 */
                                        }


--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to