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 <JRottmann@LiPPERTEmbedded.de> Acked-by: Marc Jones <marc.jones@amd.com> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3689 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
5e5bef5fbd
commit
f6fa12d89e
|
@ -194,7 +194,7 @@ static void checkDDRMax(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Turn SPD ns time into MHZ. Check what the asm does to this math. */
|
/* 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? */
|
/* current speed > max speed? */
|
||||||
if (GeodeLinkSpeed() > speed) {
|
if (GeodeLinkSpeed() > speed) {
|
||||||
|
@ -274,15 +274,14 @@ static void setCAS(void)
|
||||||
spd_byte = spd_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_2ND);
|
spd_byte = spd_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_2ND);
|
||||||
if (spd_byte != 0) {
|
if (spd_byte != 0) {
|
||||||
/* Turn SPD ns time into MHZ. Check what the asm does to this math. */
|
/* Turn SPD ns time into MHZ. Check what the asm does to this math. */
|
||||||
dimm_speed = 2 * (10000 / (((spd_byte >> 4) * 10) +
|
dimm_speed = 20000 / (((spd_byte >> 4) * 10) + (spd_byte & 0x0F));
|
||||||
(spd_byte & 0x0F)));
|
|
||||||
if (dimm_speed >= glspeed) {
|
if (dimm_speed >= glspeed) {
|
||||||
casmap_shift = 1; /* -.5 is a shift of 1 */
|
casmap_shift = 1; /* -.5 is a shift of 1 */
|
||||||
/* IF -1 timing is supported, check -1 timing > GeodeLink */
|
/* IF -1 timing is supported, check -1 timing > GeodeLink */
|
||||||
spd_byte = spd_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_3RD);
|
spd_byte = spd_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_3RD);
|
||||||
if (spd_byte != 0) {
|
if (spd_byte != 0) {
|
||||||
/* Turn SPD ns time into MHZ. Check what the asm does to this math. */
|
/* 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) {
|
if (dimm_speed >= glspeed) {
|
||||||
casmap_shift = 2; /* -1 is a shift of 2 */
|
casmap_shift = 2; /* -1 is a shift of 2 */
|
||||||
}
|
}
|
||||||
|
@ -306,14 +305,14 @@ static void setCAS(void)
|
||||||
spd_byte = spd_read_byte(DIMM1, SPD_SDRAM_CYCLE_TIME_2ND);
|
spd_byte = spd_read_byte(DIMM1, SPD_SDRAM_CYCLE_TIME_2ND);
|
||||||
if (spd_byte != 0) {
|
if (spd_byte != 0) {
|
||||||
/* Turn SPD ns time into MHZ. Check what the asm does to this math. */
|
/* 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) {
|
if (dimm_speed >= glspeed) {
|
||||||
casmap_shift = 1; /* -.5 is a shift of 1 */
|
casmap_shift = 1; /* -.5 is a shift of 1 */
|
||||||
/* IF -1 timing is supported, check -1 timing > GeodeLink */
|
/* IF -1 timing is supported, check -1 timing > GeodeLink */
|
||||||
spd_byte = spd_read_byte(DIMM1, SPD_SDRAM_CYCLE_TIME_3RD);
|
spd_byte = spd_read_byte(DIMM1, SPD_SDRAM_CYCLE_TIME_3RD);
|
||||||
if (spd_byte != 0) {
|
if (spd_byte != 0) {
|
||||||
/* Turn SPD ns time into MHZ. Check what the asm does to this math. */
|
/* 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) {
|
if (dimm_speed >= glspeed) {
|
||||||
casmap_shift = 2; /* -1 is a shift of 2 */
|
casmap_shift = 2; /* -1 is a shift of 2 */
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue