summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2015-10-15 14:44:33 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-10-23 18:00:49 -0500
commitcc9054b568702806e6c159729285451896ef536b (patch)
treefbfbde941dda5e64e312b378517750c6166e50a5 /src/usr/diag
parent2c835b918baadc22ec17e58a5c13e489c359e87a (diff)
downloadtalos-hostboot-cc9054b568702806e6c159729285451896ef536b.tar.gz
talos-hostboot-cc9054b568702806e6c159729285451896ef536b.zip
PRD: Mask RCD errors side-effects bug fix
Change-Id: Ibe960f5fcff6bb853a21efe67edfa1d256133e3f CQ: SW325911 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/21264 Tested-by: Jenkins Server Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com> Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/21451 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/diag')
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C76
1 files changed, 65 insertions, 11 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C
index 61ffad002..6dedb8895 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C
@@ -188,6 +188,25 @@ int32_t maskRcdParitySideEffects( ExtensibleChip * i_mbaChip,
break;
}
+ //get the FIRs
+ SCAN_COMM_REGISTER_CLASS * mbsFir =
+ membChip->getRegister("MBSFIR");
+ SCAN_COMM_REGISTER_CLASS * mbaCalFir =
+ i_mbaChip->getRegister("MBACALFIR");
+ SCAN_COMM_REGISTER_CLASS * mbaFir =
+ i_mbaChip->getRegister("MBAFIR");
+
+ l_rc = mbsFir->Read();
+ l_rc |= mbaCalFir->Read();
+ l_rc |= mbaFir->Read();
+
+ if (SUCCESS != l_rc)
+ {
+ PRDF_ERR(PRDF_FUNC "MBSFIR/MBACALFIR/MBAFIR read failed for"
+ " 0x%08x", i_mbaChip->GetId());
+ break;
+ }
+
//get the masks for each FIR
SCAN_COMM_REGISTER_CLASS * mbsFirMaskOr =
membChip->getRegister("MBSFIR_MASK_OR");
@@ -196,20 +215,55 @@ int32_t maskRcdParitySideEffects( ExtensibleChip * i_mbaChip,
SCAN_COMM_REGISTER_CLASS * mbaFirMaskOr =
i_mbaChip->getRegister("MBAFIR_MASK_OR");
- mbaFirMaskOr->SetBit(2);
- mbaCalMaskOr->SetBit(2);
- mbaCalMaskOr->SetBit(17);
- mbsFirMaskOr->SetBit(4);
+ //set the masks only if the side effect bit is set
+ if (mbaFir->IsBitSet(2))
+ {
+ mbaFirMaskOr->SetBit(2);
+ l_rc = mbaFirMaskOr->Write();
+ if (SUCCESS != l_rc)
+ {
+ PRDF_ERR(PRDF_FUNC "MBAFIR_MASK_OR write failed for "
+ "0x%08x", i_mbaChip->GetId());
+ break;
+ }
+ }
- l_rc = mbaFirMaskOr->Write();
- l_rc |= mbaCalMaskOr->Write();
- l_rc |= mbsFirMaskOr->Write();
+ if (mbaCalFir->IsBitSet(2))
+ {
+ mbaCalMaskOr->SetBit(2);
+ l_rc = mbaCalMaskOr->Write();
+ if (SUCCESS != l_rc)
+ {
+ PRDF_ERR(PRDF_FUNC "MBACALFIR_MASK_OR write failed for "
+ "0x%08x", i_mbaChip->GetId());
+ break;
+ }
- if (SUCCESS != l_rc)
+ }
+
+ if (mbaCalFir->IsBitSet(17))
{
- PRDF_ERR(PRDF_FUNC "MBAFIR_MASK_OR/MBACALFIR_MASK_OR/MBSFIR_MASK_OR"
- " write failed for 0x%08x", i_mbaChip->GetId());
- break;
+ mbaCalMaskOr->SetBit(17);
+ l_rc = mbaCalMaskOr->Write();
+ if (SUCCESS != l_rc)
+ {
+ PRDF_ERR(PRDF_FUNC "MBACALFIR_MASK_OR write failed for "
+ "0x%08x", i_mbaChip->GetId());
+ break;
+ }
+ }
+
+ if (mbsFir->IsBitSet(4))
+ {
+ mbsFirMaskOr->SetBit(4);
+ l_rc = mbsFirMaskOr->Write();
+ if (SUCCESS != l_rc)
+ {
+ PRDF_ERR(PRDF_FUNC "MBSFIR_MASK_OR write failed for "
+ "0x%08x", membChip->GetId());
+ break;
+ }
+
}
}while(0);
OpenPOWER on IntegriCloud