diff options
author | Caleb Palmer <cnpalmer@us.ibm.com> | 2015-10-15 14:44:33 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-10-23 18:00:49 -0500 |
commit | cc9054b568702806e6c159729285451896ef536b (patch) | |
tree | fbfbde941dda5e64e312b378517750c6166e50a5 /src/usr/diag | |
parent | 2c835b918baadc22ec17e58a5c13e489c359e87a (diff) | |
download | talos-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-x | src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C | 76 |
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); |