[coreboot-gerrit] New patch to review for coreboot: intel raminit: support two DIMMs per channel

Patrick Rudolph (siro@das-labor.org) gerrit at coreboot.org
Thu Jul 16 20:59:52 CEST 2015


Patrick Rudolph (siro at das-labor.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10960

-gerrit

commit 6df08d5d3efa0f47ad125f973514f02e0e68fedb
Author: Patrick Rudolph <siro at das-labor.org>
Date:   Thu Jul 16 20:48:16 2015 +0200

    intel raminit: support two DIMMs per channel
    
    Issue observed:
    Two memory DIMMs are placed in the same channel, but only one shows up.
    The SPD is read and printed, but the first DIMM isn't recognized any more.
    Due to an existing but unconfigured memory DIMM the timB tests failed.
    
    Test system:
     * Intel Pentium CPU G2130
     * Gigabyte GA-B75M-D3H
     * DIMMs:
          * crucial 2GB 256Mx64 CT2566aBA160BJ
          * corsair 8GB CMZ16GX3M2A1866C9
    
    Problem description:
    The channel's rankmap was overwritten by the second slot's rankmap.
    
    Problem solution:
    Logical OR the channel's rankmap with every slot's rankmap.
    
    Final testing result:
    The DIMM is recognized and can be properly configured and used.
    The timB tests doesn't fail any more.
    
    Change-Id: I17a205ff4d344c13d9ddfe71aaae2f3cef047665
    Signed-off-by: Patrick Rudolph <siro at das-labor.org>
---
 src/northbridge/intel/sandybridge/raminit_native.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/northbridge/intel/sandybridge/raminit_native.c b/src/northbridge/intel/sandybridge/raminit_native.c
index d56d60d..790f47c 100644
--- a/src/northbridge/intel/sandybridge/raminit_native.c
+++ b/src/northbridge/intel/sandybridge/raminit_native.c
@@ -280,7 +280,7 @@ static void dram_find_spds_ddr3(spd_raw_data * spd, dimm_info * dimm,
 			ctrl->auto_self_refresh &= dimm->dimm[channel][slot].flags.asr;
 			ctrl->extended_temperature_range &= dimm->dimm[channel][slot].flags.ext_temp_refresh;
 
-			ctrl->rankmap[channel] = ((1 << dimm->dimm[channel][slot].ranks) - 1) << (2 * slot);
+			ctrl->rankmap[channel] |= ((1 << dimm->dimm[channel][slot].ranks) - 1) << (2 * slot);
 			printk(BIOS_DEBUG, "rankmap[%d] = 0x%x\n", channel, ctrl->rankmap[channel]);
 		}
 		if ((ctrl->rankmap[channel] & 3) && (ctrl->rankmap[channel] & 0xc)



More information about the coreboot-gerrit mailing list