From cc9054b568702806e6c159729285451896ef536b Mon Sep 17 00:00:00 2001 From: Caleb Palmer Date: Thu, 15 Oct 2015 14:44:33 -0500 Subject: 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 Reviewed-by: BENJAMIN J. WEISENBECK 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 --- src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C | 76 ++++++++++++++++++---- 1 file changed, 65 insertions(+), 11 deletions(-) (limited to 'src/usr/diag') 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); -- cgit v1.2.1