[coreboot] Patch set updated for coreboot: 2724d28 Fix ECC disable option for AMD Fam10 DDR2 and DDR3.

Marc Jones (marcj303@gmail.com) gerrit at coreboot.org
Wed Feb 22 01:35:05 CET 2012


Marc Jones (marcj303 at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/670

-gerrit

commit 2724d286cbad4ae8a3a6f63719bc1098cc94360f
Author: Marc Jones <marc.jones at se-eng.com>
Date:   Tue Feb 21 17:06:40 2012 -0700

    Fix ECC disable option for AMD Fam10 DDR2 and DDR3.
    
    The logic was backwards on the ECC enable/disable option. Also added better
    debug output when the debug RAM init feature is enabled.
    
    Change-Id: I60bffb6149d96cac65011247ef51cd06ed2210c6
    Signed-off-by: Marc Jones <marc.jones at se-eng.com>
---
 src/northbridge/amd/amdmct/mct/mct_d.c         |    2 +-
 src/northbridge/amd/amdmct/mct/mctecc_d.c      |   18 ++++++++++++------
 src/northbridge/amd/amdmct/mct_ddr3/mct_d.c    |    2 +-
 src/northbridge/amd/amdmct/mct_ddr3/mctecc_d.c |   14 +++++++++++++-
 4 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/src/northbridge/amd/amdmct/mct/mct_d.c b/src/northbridge/amd/amdmct/mct/mct_d.c
index 5abe6d0..36b473a 100644
--- a/src/northbridge/amd/amdmct/mct/mct_d.c
+++ b/src/northbridge/amd/amdmct/mct/mct_d.c
@@ -300,7 +300,7 @@ restartinit:
 	}
 
 	mct_FinalMCT_D(pMCTstat, (pDCTstatA + 0) );	// Node 0
-	print_t("All Done\n");
+	print_tx("mctAutoInitMCT_D Done: Global Status: ", pMCTstat->GStatus);
 	return;
 
 fatalexit:
diff --git a/src/northbridge/amd/amdmct/mct/mctecc_d.c b/src/northbridge/amd/amdmct/mct/mctecc_d.c
index 87ac3ac..58e61ae 100644
--- a/src/northbridge/amd/amdmct/mct/mctecc_d.c
+++ b/src/northbridge/amd/amdmct/mct/mctecc_d.c
@@ -115,7 +115,6 @@ u8 ECCInit_D(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA)
 
 	AllECC = 1;
 	MemClrECC = 0;
-	print_t(" ECCInit 0 \n");
 	for (Node = 0; Node < MAX_NODES_SUPPORTED; Node++) {
 		struct DCTStatStruc *pDCTstat;
 		pDCTstat = pDCTstatA + Node;
@@ -133,7 +132,7 @@ u8 ECCInit_D(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA)
 					LDramECC = isDramECCEn_D(pDCTstat);
 					if(pDCTstat->ErrCode != SC_RunningOK) {
 						pDCTstat->Status &=  ~(1 << SB_ECCDIMMs);
-						if (OB_NBECC) {
+						if (!OB_NBECC) {
 							pDCTstat->ErrStatus |= (1 << SB_DramECCDis);
 						}
 						AllECC = 0;
@@ -164,15 +163,12 @@ u8 ECCInit_D(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA)
 			}
 		}	/* if Node present */
 	}
-	print_t(" ECCInit 1 \n");
 
 	if(AllECC)
 		pMCTstat->GStatus |= 1<<GSB_ECCDIMMs;
 	else
 		pMCTstat->GStatus &= ~(1<<GSB_ECCDIMMs);
 
-	print_t(" ECCInit 2 \n");
-
 	/* Program the Dram BKScrub CTL to the proper (user selected) value.*/
 	/* Reset MC4_STS. */
 	for (Node = 0; Node < MAX_NODES_SUPPORTED; Node++) {
@@ -212,12 +208,22 @@ u8 ECCInit_D(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA)
 			}	/*Node has Dram */
 		}	/*if Node present */
 	}
-	print_t(" ECCInit 3 \n");
 
 	if(mctGet_NVbits(NV_SyncOnUnEccEn))
 		setSyncOnUnEccEn_D(pMCTstat, pDCTstatA);
 
 	mctHookAfterECC();
+	for (Node = 0; Node < MAX_NODES_SUPPORTED; Node++) {
+		struct DCTStatStruc *pDCTstat;
+		pDCTstat = pDCTstatA + Node;
+		if (NodePresent_D(Node)) {
+			print_tx("ECCInit: Node ", Node);
+			print_tx("ECCInit: Status ", pDCTstat->Status);
+			print_tx("ECCInit: ErrStatus ", pDCTstat->ErrStatus);
+			print_tx("ECCInit: ErrCode ", pDCTstat->ErrCode);
+			print_t("ECCInit: Done\n");
+		}
+	}
 	return MemClrECC;
 }
 
diff --git a/src/northbridge/amd/amdmct/mct_ddr3/mct_d.c b/src/northbridge/amd/amdmct/mct_ddr3/mct_d.c
index 1faed5a..d126a95 100644
--- a/src/northbridge/amd/amdmct/mct_ddr3/mct_d.c
+++ b/src/northbridge/amd/amdmct/mct_ddr3/mct_d.c
@@ -343,7 +343,7 @@ restartinit:
 	}
 
 	mct_FinalMCT_D(pMCTstat, pDCTstatA);
-	printk(BIOS_DEBUG, "All Done\n");
+	printk(BIOS_DEBUG, "mctAutoInitMCT_D Done: Global Status: %x\n", pMCTstat->GStatus);
 	return;
 
 fatalexit:
diff --git a/src/northbridge/amd/amdmct/mct_ddr3/mctecc_d.c b/src/northbridge/amd/amdmct/mct_ddr3/mctecc_d.c
index ca03f4b..6f6767a 100644
--- a/src/northbridge/amd/amdmct/mct_ddr3/mctecc_d.c
+++ b/src/northbridge/amd/amdmct/mct_ddr3/mctecc_d.c
@@ -127,7 +127,7 @@ u8 ECCInit_D(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA)
 					LDramECC = isDramECCEn_D(pDCTstat);
 					if(pDCTstat->ErrCode != SC_RunningOK) {
 						pDCTstat->Status &=  ~(1 << SB_ECCDIMMs);
-						if (OB_NBECC) {
+						if (!OB_NBECC) {
 							pDCTstat->ErrStatus |= (1 << SB_DramECCDis);
 						}
 						AllECC = 0;
@@ -146,6 +146,7 @@ u8 ECCInit_D(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA)
 						Set_NB32(dev, reg, val);
 						DCTMemClr_Init_D(pMCTstat, pDCTstat);
 						MemClrECC = 1;
+						print_tx("  ECC enabled on node: ", Node);
 					}
 				}	/* this node has ECC enabled dram */
 			} else {
@@ -207,6 +208,17 @@ u8 ECCInit_D(struct MCTStatStruc *pMCTstat, struct DCTStatStruc *pDCTstatA)
 		setSyncOnUnEccEn_D(pMCTstat, pDCTstatA);
 
 	mctHookAfterECC();
+	for (Node = 0; Node < MAX_NODES_SUPPORTED; Node++) {
+		struct DCTStatStruc *pDCTstat;
+		pDCTstat = pDCTstatA + Node;
+		if (NodePresent_D(Node)) {
+			print_tx("ECCInit: Node ", Node);
+			print_tx("ECCInit: Status ", pDCTstat->Status);
+			print_tx("ECCInit: ErrStatus ", pDCTstat->ErrStatus);
+			print_tx("ECCInit: ErrCode ", pDCTstat->ErrCode);
+			print_t("ECCInit: Done\n");
+		}
+	}
 	return MemClrECC;
 }
 




More information about the coreboot mailing list