[coreboot-gerrit] New patch to review for coreboot: nb/intel/i945: Fix sdram_on_die_termination
HAOUAS Elyes (ehaouas@noos.fr)
gerrit at coreboot.org
Thu Mar 2 20:17:22 CET 2017
HAOUAS Elyes (ehaouas at noos.fr) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/18548
-gerrit
commit 202ab12554d8b9d889059b9b9cbe24a3251901d1
Author: Elyes HAOUAS <ehaouas at noos.fr>
Date: Thu Mar 2 19:55:44 2017 +0100
nb/intel/i945: Fix sdram_on_die_termination
Fix one DIMM per channel detection.
"if ( !(sysinfo->dimm[0] != SYSINFO_DIMM_NOT_POPULATED &&
sysinfo->dimm[1] != SYSINFO_DIMM_NOT_POPULATED) ) {"
is true when both of dimm[0] and dimm[1] are not populated.
Change-Id: I7aec35f45250da554ddc5a68f5add157c313399c
Signed-off-by: Elyes HAOUAS <ehaouas at noos.fr>
---
src/northbridge/intel/i945/raminit.c | 42 +++++++++++++++++++++++++++---------
1 file changed, 32 insertions(+), 10 deletions(-)
diff --git a/src/northbridge/intel/i945/raminit.c b/src/northbridge/intel/i945/raminit.c
index a7ccefb..8161562 100644
--- a/src/northbridge/intel/i945/raminit.c
+++ b/src/northbridge/intel/i945/raminit.c
@@ -2799,16 +2799,38 @@ static void sdram_on_die_termination(struct sys_info *sysinfo)
reg32 |= (1 << 14) | (1 << 6) | (2 << 16);
MCHBAR32(ODTC) = reg32;
- if ( !(sysinfo->dimm[0] != SYSINFO_DIMM_NOT_POPULATED &&
- sysinfo->dimm[1] != SYSINFO_DIMM_NOT_POPULATED) ) {
- printk(BIOS_DEBUG, "one dimm per channel config..\n");
-
- reg32 = MCHBAR32(C0ODT);
- reg32 &= ~(7 << 28);
- MCHBAR32(C0ODT) = reg32;
- reg32 = MCHBAR32(C1ODT);
- reg32 &= ~(7 << 28);
- MCHBAR32(C1ODT) = reg32;
+ if (sysinfo->dual_channel) {
+ if ((!(sysinfo->dimm[0] != SYSINFO_DIMM_NOT_POPULATED &&
+ sysinfo->dimm[1] != SYSINFO_DIMM_NOT_POPULATED)) &&
+ (sysinfo->dimm[0] != SYSINFO_DIMM_NOT_POPULATED ||
+ sysinfo->dimm[1] != SYSINFO_DIMM_NOT_POPULATED)) &&
+ ((!(sysinfo->dimm[2] != SYSINFO_DIMM_NOT_POPULATED &&
+ sysinfo->dimm[3] != SYSINFO_DIMM_NOT_POPULATED)) &&
+ (sysinfo->dimm[2] != SYSINFO_DIMM_NOT_POPULATED ||
+ sysinfo->dimm[3] != SYSINFO_DIMM_NOT_POPULATED)) {
+ printk(BIOS_DEBUG, "one dimm per channel config..\n");
+
+ reg32 = MCHBAR32(C0ODT);
+ reg32 &= ~(7 << 28);
+ MCHBAR32(C0ODT) = reg32;
+ reg32 = MCHBAR32(C1ODT);
+ reg32 &= ~(7 << 28);
+ MCHBAR32(C1ODT) = reg32;
+ }
+ } else {
+ if ((!(sysinfo->dimm[0] != SYSINFO_DIMM_NOT_POPULATED &&
+ sysinfo->dimm[1] != SYSINFO_DIMM_NOT_POPULATED)) &&
+ (sysinfo->dimm[0] != SYSINFO_DIMM_NOT_POPULATED ||
+ sysinfo->dimm[1] != SYSINFO_DIMM_NOT_POPULATED)) {
+ printk(BIOS_DEBUG, "one dimm per channel config..\n");
+
+ reg32 = MCHBAR32(C0ODT);
+ reg32 &= ~(7 << 28);
+ MCHBAR32(C0ODT) = reg32;
+ reg32 = MCHBAR32(C1ODT);
+ reg32 &= ~(7 << 28);
+ MCHBAR32(C1ODT) = reg32;
+ }
}
cas = sysinfo->cas;
More information about the coreboot-gerrit
mailing list