summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2014-01-31 17:32:38 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-02-06 17:33:12 -0600
commit9fd68c17cf40ecf7343ab51f49e2a6a538c27f1b (patch)
tree883113639e71c411a82a7c7a3fd46aa5984cd146
parent78db12452b19b1ff6416c71c6eefddc49419bfcf (diff)
downloadtalos-hostboot-9fd68c17cf40ecf7343ab51f49e2a6a538c27f1b.tar.gz
talos-hostboot-9fd68c17cf40ecf7343ab51f49e2a6a538c27f1b.zip
PRD: Better callouts for combine response errors
Change-Id: I43e5854138a87f9e3f18f47e00bcaea38270db1c CQ: SW244371 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8493 Tested-by: Jenkins Server Reviewed-by: Christopher T. Phan <cphan@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com> Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8579
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule14
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule9
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C78
3 files changed, 98 insertions, 3 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule
index cde63dbc0..69b5175cf 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule
+++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule
@@ -1240,7 +1240,7 @@ group gPbCentFir filter singlebit
/** PBCENTFIR[5]
* PB_CENT_CRESP_ADDR_ERROR
*/
- (PbCentFir, bit(5)) ? calloutProcAnalyzeMpIpl;
+ (PbCentFir, bit(5)) ? combinedResponseError;
/** PBCENTFIR[6]
* PB_CENT_CRESP_ERROR
@@ -1265,7 +1265,7 @@ group gPbCentFir filter singlebit
/** PBCENTFIR[10]
* PB_CENT_FORCE_MP_IPL
*/
- (PbCentFir, bit(10)) ? calloutProcAnalyzeMpIpl;
+ (PbCentFir, bit(10)) ? forceMpIpl;
/** PBCENTFIR[11]
* PB_CENT_FIR_SPARE_0
@@ -3150,8 +3150,16 @@ actionclass calloutNxThr5pHr
threshold5phour;
};
-actionclass calloutProcAnalyzeMpIpl
+actionclass combinedResponseError
+{
+ callout2ndLvlMedThr1;
+ funccall("combinedResponseCallout");
+ funccall("analyzeMpIPL");
+};
+
+actionclass forceMpIpl
{
calloutProcLevel2MedThr1;
funccall("analyzeMpIPL");
};
+
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule
index 600bcfc93..4b19ffeee 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule
+++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule
@@ -384,6 +384,15 @@
capture req nonzero("PBEASTFIR");
};
+ # c_err_rpt for PBWESTFIR, PBCENTFIR, and PBEASTFIR
+ register PB_CENT_CR_ERROR
+ {
+ name "EH.PB.MISC.PB_CENT_CR_ERROR";
+ scomaddr 0x02010c6c;
+ capture group default;
+ capture group CerrRegs;
+ };
+
############################################################################
# PB Chiplet PBEXTFIR
############################################################################
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C
index aeec2edfa..6700a9e2d 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C
@@ -582,6 +582,84 @@ PRDF_PLUGIN_DEFINE( Proc, calloutMasterCore );
//------------------------------------------------------------------------------
/**
+ * @brief Calls out the EX chiplet (MRU_LOW), if possible. Otherwise, calls
+ * out the PROC (MRU_LOW)
+ * @param i_chip P8 chip
+ * @param io_sc service data collector
+ * @returns SUCCESS
+ */
+int32_t combinedResponseCallout( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc )
+{
+ #define PRDF_FUNC "[Proc::combinedResponseCallout] "
+
+ int32_t l_rc = SUCCESS;
+
+ TargetHandle_t procTrgt = i_chip->GetChipHandle();
+
+ SCAN_COMM_REGISTER_CLASS * reg = i_chip->getRegister("PB_CENT_CR_ERROR");
+
+ do
+ {
+ l_rc = reg->Read();
+ if ( SUCCESS != l_rc )
+ {
+ PRDF_ERR( PRDF_FUNC"Read() failed on PB_CENT_CR_ERROR" );
+ break;
+ }
+
+ uint32_t tmp = reg->GetBitFieldJustified(0,3);
+ if ( 0x02 != tmp ) // Must be 0b010 to continue
+ {
+ PRDF_ERR( PRDF_FUNC"Unsupported reason code: 0x%02x", tmp );
+ l_rc = FAIL; break;
+ }
+
+ tmp = reg->GetBitFieldJustified(38,5);
+ if ( 0x00 != tmp ) // Must be 0b00000 to continue
+ {
+ PRDF_ERR( PRDF_FUNC"Unsupported combined response encoding: 0x%02x",
+ tmp );
+ l_rc = FAIL; break;
+ }
+
+ if ( reg->IsBitSet(22) ) // Must be 0b0 to continue
+ {
+ PRDF_ERR( PRDF_FUNC"Operation not sourced by an EX chiplet" );
+ l_rc = FAIL; break;
+ }
+
+ // Get the EX target
+ tmp = reg->GetBitFieldJustified(23,4);
+ TargetHandle_t exTrgt = getConnectedChild( procTrgt, TYPE_EX, tmp );
+ if ( NULL == exTrgt )
+ {
+ PRDF_ERR( PRDF_FUNC"No connected EX chiplet at position %d", tmp );
+ l_rc = FAIL; break;
+ }
+
+ // Callout the EX target
+ io_sc.service_data->SetCallout( exTrgt, MRU_LOW );
+
+ } while (0);
+
+ if ( SUCCESS != l_rc )
+ {
+ PRDF_ERR( PRDF_FUNC"Unable to isolate to an EX chiplet. Calling out "
+ "PROC 0x%08x instead.", i_chip->GetId() );
+
+ io_sc.service_data->SetCallout( procTrgt, MRU_LOW );
+ }
+
+ return SUCCESS;
+
+ #undef PRDF_FUNC
+}
+PRDF_PLUGIN_DEFINE( Proc, combinedResponseCallout );
+
+//------------------------------------------------------------------------------
+
+/**
* @brief When not in MNFG mode, clear the service call flag so that
* thresholding will still be done, but no visible error log committed.
* @param i_chip P8 chip
OpenPOWER on IntegriCloud