Skip to content

Commit

Permalink
PRD: Dont report error log for backlog count underflow FIR
Browse files Browse the repository at this point in the history
Change-Id: Ideaee095037308e679ffa859f16bfc5265129df5
CQ: SW433860
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/61001
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/61185
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
  • Loading branch information
cnpalmer authored and zane131 committed Jun 22, 2018
1 parent 3683998 commit a65f239
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/usr/diag/prdf/common/plat/p9/p9_cumulus.rule
Original file line number Diff line number Diff line change
Expand Up @@ -6042,7 +6042,7 @@ group gINTCQFIR filter singlebit, cs_root_cause
/** INTCQFIR[52:54]
* INT_CQ_FIR_PC_RECOV_ERROR_0_2:
*/
(rINTCQFIR, bit(52|53|54)) ? level2_M_self_L_th_1;
(rINTCQFIR, bit(52|53|54)) ? analyzeIntCqFirPcRecovError;

/** INTCQFIR[55:57]
* INT_CQ_FIR_PC_INFO_ERROR_0_2:
Expand Down
2 changes: 1 addition & 1 deletion src/usr/diag/prdf/common/plat/p9/p9_nimbus.rule
Original file line number Diff line number Diff line change
Expand Up @@ -6022,7 +6022,7 @@ group gINTCQFIR filter singlebit, cs_root_cause
/** INTCQFIR[52:54]
* INT_CQ_FIR_PC_RECOV_ERROR_0_2:
*/
(rINTCQFIR, bit(52|53|54)) ? level2_M_self_L_th_1;
(rINTCQFIR, bit(52|53|54)) ? analyzeIntCqFirPcRecovError;

/** INTCQFIR[55:57]
* INT_CQ_FIR_PC_INFO_ERROR_0_2:
Expand Down
5 changes: 5 additions & 0 deletions src/usr/diag/prdf/common/plat/p9/p9_proc_common_actions.rule
Original file line number Diff line number Diff line change
Expand Up @@ -574,3 +574,8 @@ actionclass analyzePhypTodError
try( funccall("isTodDisabled"), TodReportByPHYP );
};

/** action to analyze INT_CQ_FIR_PC_RECOV_ERROR_0_2 */
actionclass analyzeIntCqFirPcRecovError
{
try( funccall("handleIntCqFirPcRecovError"), level2_M_self_L_th_1 );
};
75 changes: 75 additions & 0 deletions src/usr/diag/prdf/common/plat/p9/prdfP9Proc.C
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,81 @@ PRDF_PLUGIN_DEFINE_NS( p9_cumulus, Proc, PmRecovery );

//------------------------------------------------------------------------------

/**
* @brief Special action for INT_CQ_FIR_PC_RECOV_ERROR_0_2
* @param i_chip A P9 chip.
* @param io_sc step code data struct
* @return PRD_SCAN_COMM_REGISTER_ZERO if we take normal action, SUCCESS for
* conditional action, FAIL if an internal function fails
*/
int32_t handleIntCqFirPcRecovError( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc)
{
int32_t l_rc = SUCCESS;

do
{
SCAN_COMM_REGISTER_CLASS * l_intPcVpcErr1Wof =
i_chip->getRegister("INT_PC_VPC_ERR1_WOF");
SCAN_COMM_REGISTER_CLASS * l_intPcVpcErr1WofDetail =
i_chip->getRegister("INT_PC_VPC_ERR1_WOF_DETAIL");

l_rc |= l_intPcVpcErr1Wof->Read();
l_rc |= l_intPcVpcErr1WofDetail->Read();
if ( SUCCESS != l_rc )
{
PRDF_ERR( "[handleIntCqFirPcRecovError] Error reading "
"INT_PC_VPC_ERR1_WOF or INT_PC_VPC_ERR1_WOF_DETAIL" );
break;
}

// If INT_PC_VPC_ERR1_WOF[30] or INT_PC_VPC_ERR1_WOF_DETAIL[3] is not
// set, set rc to FAIL and let rule code take action as normal
if ( !l_intPcVpcErr1Wof->IsBitSet(30) ||
!l_intPcVpcErr1WofDetail->IsBitSet(3) )
{
l_rc = PRD_SCAN_COMM_REGISTER_ZERO;
break;
}
// Else if INT_PC_VPC_ERR1_WOF[30] and INT_PC_VPC_ERR1_WOF_DETAIL[3] are
// both set.
// Don't increment thresholding

// Don't commit the error log
io_sc.service_data->setDontCommitErrl();

// Clear INT_PC_VPC_ERR1_WOF[30]
l_intPcVpcErr1Wof->ClearBit(30);
l_rc = l_intPcVpcErr1Wof->Write();
if ( SUCCESS != l_rc )
{
PRDF_ERR( "[handleIntCqFirPcRecovError] Error clearing "
"INT_PC_VPC_ERR1_WOF[30]" );
break;
}

// Clear all of INT_PC_VPC_ERR1_WOF_DETAIL because there are other bits
// in that register that have detauls about why bit 3 is set.
l_intPcVpcErr1WofDetail->clearAllBits();
l_rc = l_intPcVpcErr1WofDetail->Write();
if ( SUCCESS != l_rc )
{
PRDF_ERR( "[handleIntCqFirPcRecovError] Error clearing "
"INT_PC_VPC_ERR1_WOF_DETAIL" );
break;
}

// Clear INTCQFIR[52:54] (Should be done automatically by the rule code)

}while(0);

return l_rc;
}
PRDF_PLUGIN_DEFINE_NS( p9_nimbus, Proc, handleIntCqFirPcRecovError );
PRDF_PLUGIN_DEFINE_NS( p9_cumulus, Proc, handleIntCqFirPcRecovError );

//------------------------------------------------------------------------------

} // end namespace Proc

} // end namespace PRDF

0 comments on commit a65f239

Please sign in to comment.