summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Weisenbeck <bweisenb@us.ibm.com>2013-04-30 08:36:58 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-05-06 16:49:50 -0500
commit8aecb4950453b8dfc27bb93df056ea07adccc222 (patch)
treee34912b2c15bf060c98abd42e709d6130b538573
parentaac793482585434454f414c9e81bb185796beed5 (diff)
downloadtalos-hostboot-8aecb4950453b8dfc27bb93df056ea07adccc222.tar.gz
talos-hostboot-8aecb4950453b8dfc27bb93df056ea07adccc222.zip
PRD: MFG files
Change-Id: I432274c75a06500551643aca0a78df6a911e4c80 RTC: 22859 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/4312 Tested-by: Jenkins Server Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C4
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H2
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdf_ras_services.C80
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdf_ras_services.H22
-rwxr-xr-xsrc/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst6
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Ex.rule50
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C89
7 files changed, 170 insertions, 83 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
index 3fd188b63..72cf4c288 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C
@@ -85,9 +85,9 @@ fapi::TargetType getFapiType( TARGETING::TargetHandle_t i_target )
//## System Level Utility Functions
//##############################################################################
-void getECIDString( TargetHandle_t i_target, const char * o_ecidStr )
+void getECIDString( TargetHandle_t i_target, char * o_ecidStr )
{
- o_ecidStr ="";
+ sprintf(o_ecidStr, "%s", "N/A");
PRDF_ERR( "[PlatServices::getECIDString] Function not implemented yet" );
}
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
index 532a76534..911283d9d 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
+++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H
@@ -90,7 +90,7 @@ bool isMemoryPreservingIpl();
* @return Returns ECID string for given target
*/
void getECIDString( TARGETING::TargetHandle_t i_target,
- const char * o_ecidStr );
+ char * o_ecidStr );
/**
* @brief Get a PRD timer value based on the current time.
diff --git a/src/usr/diag/prdf/common/framework/service/prdf_ras_services.C b/src/usr/diag/prdf/common/framework/service/prdf_ras_services.C
index 379680b7f..b613cb5f4 100755
--- a/src/usr/diag/prdf/common/framework/service/prdf_ras_services.C
+++ b/src/usr/diag/prdf/common/framework/service/prdf_ras_services.C
@@ -1300,8 +1300,7 @@ will also be removed. Need to confirm if this code is required anymore.
// to pass errLog to PRDF_HWUDUMP
// for FSP specific SRC handling in the future
#ifndef __HOSTBOOT_MODULE
- /* FIXME: not sure if we still need this in fips810?
- MnfgTrace(esig); */
+ MnfgTrace(esig);
#endif
PRDF_GET_PLID(errLog, dumpPlid);
@@ -1340,8 +1339,7 @@ will also be removed. Need to confirm if this code is required anymore.
{
#ifndef __HOSTBOOT_MODULE
- /* FIXME: not sure if we still need this in fips810?
- MnfgTrace(esig); */
+ MnfgTrace(esig);
#endif
PRDF_DTRAC( PRDF_FUNC"generating a terminating, or MP Fatal SRC" );
@@ -1461,44 +1459,10 @@ will also be removed. Need to confirm if this code is required anymore.
#undef PRDF_FUNC
}
-void prdfGetTargetString(TargetHandle_t i_pTargetHandle,
- char * o_chipName, uint32_t i_sizeOfChipName )
-{
- //FIXME waiting on alternate implementation of toString function in targeting
- //FIXME Commenting out current usage of getEntityPathString
- //char * l_entityPathString =NULL;
- //uint32_t l_tempSize =0;
- do
- {
- if(NULL==i_pTargetHandle )
- {
-#ifdef __HOSTBOOT_MODULE
- sprintf( o_chipName, "????, " );
-#else
- snprintf( o_chipName, i_sizeOfChipName, "????, " );
-#endif
-
- }
- else
- {
-/*
- l_entityPathString =PlatServices::getEntityPathString(i_pTargetHandle);
- l_tempSize = strlen(l_entityPathString );
- if(l_tempSize < i_sizeOfChipName)
- i_sizeOfChipName = l_tempSize;
- memcpy(o_chipName ,l_entityPathString ,i_sizeOfChipName);
- free(l_entityPathString);
-*/
- }
-
- } while (0);
-}
-
-
// ----------------------------------------------------------------------------
#ifndef __HOSTBOOT_MODULE
-void RasServices::MnfgTrace(ErrorSignature * l_esig )
+void ErrDataService::MnfgTrace(ErrorSignature * l_esig )
{
char * MnfgFilename = NULL;
uint32_t l_size = 0;
@@ -1506,43 +1470,49 @@ void RasServices::MnfgTrace(ErrorSignature * l_esig )
if ( PlatServices::mfgMode() )
{
- errlHndl_t errorLog = UtilReg::path(MnfgKey,1,"prdfMfgErrors",MnfgFilename,l_size);
+ errlHndl_t errorLog = UtilReg::path(MnfgKey, 1, "prdfMfgErrors",
+ MnfgFilename, l_size);
if (errorLog == NULL)
{
UtilFile l_mfgFile;
l_mfgFile.Open(MnfgFilename,"a+");
- char l_array[62];
- char l_array2[42];
+ char l_string[100];
uint32_t signature = l_esig->getSigId();
HUID sigChip = l_esig->getChipId();
// Get Entity Path String
TargetHandle_t l_ptempHandle = PlatServices::getTarget(sigChip);
- prdfGetTargetString(l_ptempHandle , l_array, 62);
- l_mfgFile.write(l_array, strlen(l_array));
+ TARGETING::EntityPath path;
+ PlatServices::getEntityPath(l_ptempHandle, path,
+ EntityPath::PATH_PHYSICAL);
+ char *epStr = path.toString();
+ if (epStr)
+ {
+ snprintf(l_string, 100, "%s, ", path.toString());
+ free(epStr);
+ }
+
+ l_mfgFile.write(l_string, strlen(l_string));
// Write Signature
- snprintf(l_array, 62, "0x%08x,", signature);
- l_mfgFile.write(l_array, 24);
+ snprintf(l_string, 100, "0x%08x, 0x%08x, ", sigChip, signature);
+ l_mfgFile.write(l_string, strlen(l_string));
// Write chip ECID data
- char ecidString[1024];
- l_ptempHandle = PlatServices::getTarget(pfaData.PfaCalloutList[0].Callout);
- //TODO TargetHandle conversion - not sure we need it now
- PlatServices::getECIDString(l_ptempHandle , ecidString);
- l_mfgFile.write(ecidString, strlen(ecidString));
+ PlatServices::getECIDString(l_ptempHandle, l_string);
+ l_mfgFile.write(l_string, strlen(l_string));
// Write MRU list
uint32_t n = 0;
while ( (n < MruListLIMIT ) && (n < pfaData.PfaCalloutCount) )
{
- snprintf(l_array2, 16, ", %08x", pfaData.PfaCalloutList[n].Callout);
- l_mfgFile.write(l_array2, 9);
+ snprintf(l_string, 100, " , %08x", pfaData.PfaCalloutList[n].Callout);
+ l_mfgFile.write(l_string, strlen(l_string));
++n;
}
- snprintf(l_array2, 42, "\n");
- l_mfgFile.write(l_array2, 1);
+ snprintf(l_string, 100, "\n");
+ l_mfgFile.write(l_string, 1);
l_mfgFile.Close();
}
diff --git a/src/usr/diag/prdf/common/framework/service/prdf_ras_services.H b/src/usr/diag/prdf/common/framework/service/prdf_ras_services.H
index 8a23966b8..c79a6213b 100755
--- a/src/usr/diag/prdf/common/framework/service/prdf_ras_services.H
+++ b/src/usr/diag/prdf/common/framework/service/prdf_ras_services.H
@@ -175,6 +175,16 @@ class ErrDataService
*/
bool SdcRetrieve(sdcSaveFlagsEnum i_saveFlag, void * o_buffer);
+ /**
+ @brief Add Trace Data to File for Manufacturing.
+ @param[in] ErrorSignature
+ @return None.
+ @pre None.
+ @post None.
+ @exception None.
+ */
+ void MnfgTrace(ErrorSignature * l_esig);
+
#endif // end if not __HOSTBOOT_MODULE
private:
@@ -263,18 +273,6 @@ public:
virtual errlHndl_t GenerateSrcPfa( ATTENTION_TYPE attn_type,
ServiceDataCollector & sdc );
-#ifndef __HOSTBOOT_MODULE
- /**
- @brief Add Trace Data to File for Manufacturing.
- @param[in] ErrorSignature
- @return None.
- @pre None.
- @post None.
- @exception None.
- */
- void MnfgTrace(ErrorSignature * l_esig);
-#endif
-
static void SetTerminateOnCheckstop(bool setting)
{
ErrDataService::SetTerminateOnCheckstop(setting);
diff --git a/src/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst b/src/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst
index 30a8d89b0..d3d5ed944 100755
--- a/src/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst
+++ b/src/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst
@@ -1,3 +1,9 @@
+# P8 EX Thresholds
+P8EX_L2_CACHE_CES 1
+P8EX_L2_DIR_CES 1
+P8EX_L3_CACHE_CES 255
+P8EX_L3_DIR_CES 1
+
# P8 Chip Thresholds
P8CHIP_ONNODE_BUS_CES 1
P8CHIP_OFFNODE_BUS_CES 1
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Ex.rule b/src/usr/diag/prdf/common/plat/pegasus/Ex.rule
index 28f078d98..65596c9c3 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/Ex.rule
+++ b/src/usr/diag/prdf/common/plat/pegasus/Ex.rule
@@ -398,7 +398,7 @@ group gExChipletFir attntype CHECK_STOP, RECOVERABLE filter priority(3,5,6,7,4,2
/** EX_CHIPLET_FIR[3]
* Attention from LFIR
*/
- (ExChipletFir, bit(3))? analyze(gExLFir);
+ (ExChipletFir, bit(3))? analyzeExLFir;
/** EX_CHIPLET_FIR[4]
* Attention from COREFIR
@@ -408,17 +408,17 @@ group gExChipletFir attntype CHECK_STOP, RECOVERABLE filter priority(3,5,6,7,4,2
/** EX_CHIPLET_FIR[5]
* Attention from L2FIR
*/
- (ExChipletFir, bit(5)) ? analyze(gL2Fir);
+ (ExChipletFir, bit(5)) ? analyzeL2Fir;
/** EX_CHIPLET_FIR[6]
* Attention from L3FIR
*/
- (ExChipletFir, bit(6)) ? analyze(gL3Fir);
+ (ExChipletFir, bit(6)) ? analyzeL3Fir;
/** EX_CHIPLET_FIR[7]
* Attention from NCUFIR
*/
- (ExChipletFir, bit(7)) ? analyze(gNcuFir);
+ (ExChipletFir, bit(7)) ? analyzeNcuFir;
};
################################################################################
@@ -1347,6 +1347,7 @@ actionclass analyzeCore
funccall("CheckCoreCheckstop");
analyze(gCoreFir);
funccall("MaskIfCoreCheckstop");
+ funccall("RestartTraceArray");
};
# Chiplet recoverable FIR indicated Core checkstop, so take actions for
@@ -1359,44 +1360,67 @@ actionclass analyzeCoreUnitCheckstop
funccall("MaskIfCoreCheckstop");
};
+actionclass analyzeExLFir
+{
+ analyze(gExLFir);
+ funccall("RestartTraceArray");
+};
+
+actionclass analyzeL2Fir
+{
+ analyze(gL2Fir);
+ funccall("RestartTraceArray");
+};
+
+actionclass analyzeL3Fir
+{
+ analyze(gL3Fir);
+ funccall("RestartTraceArray");
+};
+
+actionclass analyzeNcuFir
+{
+ analyze(gNcuFir);
+ funccall("RestartTraceArray");
+};
+
actionclass L3DirCE
{
calloutSelfMed;
- threshold32pday; #FIXME RTC:65507 add MFG threshold
+ threshold( field(32 / day), mfg_file(P8EX_L3_DIR_CES) );
};
actionclass L3UE
{
SelfMedThr1UE;
- #funccall("L3UE"); #FIXME RTC:22859 support for L3 repairs and trace arrays
+ funccall("L3UE");
};
actionclass L3CE
{
calloutSelfMed;
- threshold32pday; #FIXME RTC:65507 add MFG threshold
- #funccall("L3CE"); #FIXME RTC:22859 support for L3 repairs and trace arrays
+ threshold( field(32 / day), mfg_file(P8EX_L3_CACHE_CES) );
+ funccall("L3CE");
};
actionclass L2CE
{
calloutSelfMed;
- threshold32pday; #FIXME RTC:65507 add MFG threshold
- #funcall("L2CE");#FIXME RTC 22859 Support for L2 Line Delete
-
+ threshold( field(32 / day), mfg_file(P8EX_L2_CACHE_CES) );
+ funccall("L2CE");
};
actionclass L2UE
{
SelfMedThr1UE;
- #funcall("L2UE");#FIXME RTC 22859 Support for L2 Line Delete
+ funccall("L2UE");
};
actionclass L2DirCE
{
calloutSelfMed;
- threshold32pday; #FIXME RTC:65507 add MFG threshold
+ threshold( field(32 / day), mfg_file(P8EX_L2_DIR_CES) );
};
actionclass L2ChipLevel2
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C
index 196dcfda2..e453d375f 100644
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C
@@ -197,5 +197,94 @@ int32_t MaskIfCoreCheckstop( ExtensibleChip * i_chip,
return l_rc;
} PRDF_PLUGIN_DEFINE(Ex, MaskIfCoreCheckstop);
+/**
+ * @brief Restart Trace Arrays that have been stopped on error
+ * @param i_chip Ex chip.
+ * @param i_stepcode Step Code data struct
+ * @return PRD return code
+ */
+int32_t RestartTraceArray( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & i_stepcode )
+{
+ int32_t l_rc = SUCCESS;
+#ifndef __HOSTBOOT_MODULE
+ l_rc = PlatServices::RestartTraceArray(i_chip->GetChipHandle());
+#endif
+ return l_rc;
+} PRDF_PLUGIN_DEFINE(Ex, RestartTraceArray);
+
+/**
+ * @brief Handle an L3 UE
+ * @param i_chip Ex chip.
+ * @param i_stepcode Step Code data struct
+ * @return PRD return code
+ */
+int32_t L3UE( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & i_stepcode )
+{
+ //FIXME RTC:22859 support for L2/L3 repairs
+ int32_t l_rc = SUCCESS;
+#ifndef __HOSTBOOT_MODULE
+ l_rc = PlatServices::processL2L3TraceArray(i_chip->GetChipHandle(),
+ false);
+#endif
+ return l_rc;
+
+} PRDF_PLUGIN_DEFINE(Ex, L3UE);
+
+/**
+ * @brief Handle an L3 CE
+ * @param i_chip Ex chip.
+ * @param i_stepcode Step Code data struct
+ * @return PRD return code
+ */
+int32_t L3CE( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & i_stepcode )
+{
+ //FIXME RTC:22859 support for L2/L3 repairs
+ int32_t l_rc = SUCCESS;
+#ifndef __HOSTBOOT_MODULE
+ l_rc = PlatServices::processL2L3TraceArray(i_chip->GetChipHandle(),
+ false);
+#endif
+ return l_rc;
+} PRDF_PLUGIN_DEFINE(Ex, L3CE);
+
+/**
+ * @brief Handle an L2 UE
+ * @param i_chip Ex chip.
+ * @param i_stepcode Step Code data struct
+ * @return PRD return code
+ */
+int32_t L2UE( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & i_stepcode )
+{
+ //FIXME RTC:22859 support for L2/L3 repairs
+ int32_t l_rc = SUCCESS;
+#ifndef __HOSTBOOT_MODULE
+ l_rc = PlatServices::processL2L3TraceArray(i_chip->GetChipHandle(),
+ true);
+#endif
+ return l_rc;
+} PRDF_PLUGIN_DEFINE(Ex, L2UE);
+
+/**
+ * @brief Handle an L2 CE
+ * @param i_chip Ex chip.
+ * @param i_stepcode Step Code data struct
+ * @return PRD return code
+ */
+int32_t L2CE( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & i_stepcode )
+{
+ //FIXME RTC:22859 support for L2/L3 repairs
+ int32_t l_rc = SUCCESS;
+#ifndef __HOSTBOOT_MODULE
+ l_rc = PlatServices::processL2L3TraceArray(i_chip->GetChipHandle(),
+ true);
+#endif
+ return l_rc;
+} PRDF_PLUGIN_DEFINE(Ex, L2CE);
+
} // end namespace Ex
} // end namespace PRDF
OpenPOWER on IntegriCloud