diff options
author | Benjamin Weisenbeck <bweisenb@us.ibm.com> | 2013-04-30 08:36:58 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-05-06 16:49:50 -0500 |
commit | 8aecb4950453b8dfc27bb93df056ea07adccc222 (patch) | |
tree | e34912b2c15bf060c98abd42e709d6130b538573 | |
parent | aac793482585434454f414c9e81bb185796beed5 (diff) | |
download | talos-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>
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 |