diff options
author | Benjamin Weisenbeck <bweisenb@us.ibm.com> | 2013-06-07 14:19:14 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-08-19 08:56:37 -0500 |
commit | bb62dfc53db824c61ea2e166f12b90ff597f0138 (patch) | |
tree | 2acbd68d7f9e3296edcd54d387490b013984dbae /src/usr/diag/prdf | |
parent | 8efaa82ce48d80d3bf134cdd6832aa798cbfa4c9 (diff) | |
download | talos-hostboot-bb62dfc53db824c61ea2e166f12b90ff597f0138.tar.gz talos-hostboot-bb62dfc53db824c61ea2e166f12b90ff597f0138.zip |
PRD: L2/L3 Line Delete and Column Repair
Change-Id: I2cc89a92c42a35795ac5de0a7eed0bec9280b2ab
RTC: 22859
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/4899
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Tested-by: Jenkins Server
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5751
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf')
-rwxr-xr-x | src/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst | 8 | ||||
-rw-r--r-- | src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C | 290 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/prd_pegasus.mk | 2 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/pegasus/prdfPlatP8Ex.C | 146 |
4 files changed, 155 insertions, 291 deletions
diff --git a/src/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst b/src/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst index d3d5ed944..2fa9871f4 100755 --- a/src/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst +++ b/src/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst @@ -3,6 +3,14 @@ P8EX_L2_CACHE_CES 1 P8EX_L2_DIR_CES 1 P8EX_L3_CACHE_CES 255 P8EX_L3_DIR_CES 1 +P8EX_L2_LINE_DELETES 6 +P8EX_L3_LINE_DELETES 6 +P8EX_L2_COL_REPAIRS 7 +P8EX_L3_COL_REPAIRS 7 +P8EX_MFG_L2_LINE_DELETES 0 +P8EX_MFG_L3_LINE_DELETES 0 +P8EX_MFG_L2_COL_REPAIRS 0 +P8EX_MFG_L3_COL_REPAIRS 0 # P8 Chip Thresholds P8CHIP_ONNODE_BUS_CES 1 diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C deleted file mode 100644 index e453d375f..000000000 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C +++ /dev/null @@ -1,290 +0,0 @@ -/* IBM_PROLOG_BEGIN_TAG */ -/* This is an automatically generated prolog. */ -/* */ -/* $Source: src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C $ */ -/* */ -/* IBM CONFIDENTIAL */ -/* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ -/* */ -/* p1 */ -/* */ -/* Object Code Only (OCO) source materials */ -/* Licensed Internal Code Source Materials */ -/* IBM HostBoot Licensed Internal Code */ -/* */ -/* The source code for this program is not published or otherwise */ -/* divested of its trade secrets, irrespective of what has been */ -/* deposited with the U.S. Copyright Office. */ -/* */ -/* Origin: 30 */ -/* */ -/* IBM_PROLOG_END_TAG */ - -/** @file prdfP8Ex.C - * @brief Contains all the plugin code for the PRD P8 EX chiplet - */ - -#include <prdfGlobal.H> -#include <prdfPluginDef.H> -#include <iipServiceDataCollector.h> -#include <prdfExtensibleChip.H> -#include <prdfPlatServices.H> -#include <prdfPluginMap.H> - -namespace PRDF -{ -namespace Ex -{ - -/** - * @brief Set the cause attention type to UNIT_CS for further analysis. - * @param i_chip Ex chip. - * @param i_stepcode Step Code data struct - * @return SUCCESS - */ -int32_t SetCoreCheckstopCause( ExtensibleChip * i_chip, - STEP_CODE_DATA_STRUCT & i_stepcode ) -{ - i_stepcode.service_data->SetCauseAttentionType(UNIT_CS); - - return SUCCESS; -} PRDF_PLUGIN_DEFINE(Ex, SetCoreCheckstopCause); - -/** - * @brief Determine if there is a core unit checkstop and perform appropriate - * action. - * - * 1) Set error to predictive / at threshold. - * 2) Wait for PHYP to evacuate core. - * 3) Terminate if PHYP doesn't evacuate. - * @param i_chip Ex chip. - * @param i_stepcode Step Code data struct - * @return PRD return code - */ -int32_t CheckCoreCheckstop( ExtensibleChip * i_chip, - STEP_CODE_DATA_STRUCT & i_stepcode ) -{ - int32_t l_rc = SUCCESS; -#ifndef __HOSTBOOT_MODULE - static const uint32_t CORECS_SECONDS_TO_SLEEP = 10; - - do - { - // Skip if we're already at core checkstop in SDC. - if (i_stepcode.service_data->GetFlag(ServiceDataCollector::UNIT_CS)) - break; - - // Read core checkstop bit in chiplet RER. - SCAN_COMM_REGISTER_CLASS * l_coreRER - = i_chip->getRegister("EX_CHIPLET_RE_FIR"); - l_rc = l_coreRER->ForceRead(); - if (SUCCESS != l_rc) - break; - - // Check core checkstop bit. - if (!l_coreRER->IsBitSet(0)) - break; - - // We must be at core checkstop. - i_stepcode.service_data->SetFlag(ServiceDataCollector::UNIT_CS); - i_stepcode.service_data->SetThresholdMaskId(0); - - SCAN_COMM_REGISTER_CLASS * l_coreHMEER - = i_chip->getRegister("COREHMEER"); - l_rc = l_coreHMEER->Read(); - if (SUCCESS != l_rc) - break; - - // Check if PHYP has enabled core checkstop (HMEER[0]). - if (!l_coreHMEER->IsBitSet(0)) - { - // FIXME - (RTC: 51693) isCM_FUNCTIONAL not available yet - //if (!prdfHomServices::isCM_FUNCTIONAL(i_chip->GetChipEnum())) - //{ - // Core checkstop not enabled, terminate. - i_stepcode.service_data->SetFlag( ServiceDataCollector::TERMINATE ); - - // PHYP was unresponsive, be sure to get SH content. - i_stepcode.service_data->SetDump(CONTENT_SH, - i_chip->GetChipHandle()); - //} - break; - }; - - // Wait for PHYP evacuation by checking SPATTN register. - SCAN_COMM_REGISTER_CLASS * l_coreSPAttn - = i_chip->getRegister("SPATTN_0"); - - bool l_spAttnCleared = false; - uint32_t l_secondsToSleep = CORECS_SECONDS_TO_SLEEP; - - do - { - // Don't sleep on first time through. - if (l_secondsToSleep != CORECS_SECONDS_TO_SLEEP) - { - PlatServices::milliSleep(1,0); // 1 second - } - l_secondsToSleep--; - - l_rc = l_coreSPAttn->ForceRead(); - if (SUCCESS == l_rc) - { - if (!l_coreSPAttn->IsBitSet(2)) - { - l_spAttnCleared = 1; - } - } - } while ((l_secondsToSleep != 0) && (!l_spAttnCleared)); - - // If we weren't able to read the register, abort. - // Don't want to terminate if FSP couldn't read register. - if (SUCCESS != l_rc) - break; - - // If we waited and never cleared, terminate machine. - if (!l_spAttnCleared) - { - // FIXME - (RTC: 51693) isCM_FUNCTIONAL not available yet - //if (!prdfHomServices::isCM_FUNCTIONAL(i_chip->GetChipEnum())) - //{ - i_stepcode.service_data->SetFlag( ServiceDataCollector::TERMINATE ); - - // PHYP was unresponsive, be sure to get SH content. - i_stepcode.service_data->SetDump(CONTENT_SH, - i_chip->GetChipHandle()); - - //} - }; - - } while (0); -#endif - return l_rc; - -} PRDF_PLUGIN_DEFINE(Ex, CheckCoreCheckstop); - -/** - * @brief Mask errors from the core chiplet - * @param i_chip Ex chip. - * @param i_stepcode Step Code data struct - * @return PRD return code - */ -int32_t MaskIfCoreCheckstop( ExtensibleChip * i_chip, - STEP_CODE_DATA_STRUCT & i_stepcode ) -{ - int32_t l_rc = SUCCESS; - - // Only mask if Proc CS present. - if (! i_stepcode.service_data->IsProcCoreCS() || - i_stepcode.service_data->GetCauseAttentionType() == MACHINE_CHECK) - return SUCCESS; - - // Get core global mask register. - SCAN_COMM_REGISTER_CLASS * l_coreFirMask = - i_chip->getRegister("EX_CHIPLET_FIR_MASK"); - - // Read value. - l_rc = l_coreFirMask->Read(); - - if (SUCCESS == l_rc) - { - // Mask bit 4. - l_coreFirMask->SetBit(4); - l_rc = l_coreFirMask->Write(); - } - - 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 diff --git a/src/usr/diag/prdf/common/prd_pegasus.mk b/src/usr/diag/prdf/common/prd_pegasus.mk index 2a2bad727..daa68e9d7 100755 --- a/src/usr/diag/prdf/common/prd_pegasus.mk +++ b/src/usr/diag/prdf/common/prd_pegasus.mk @@ -24,7 +24,7 @@ # Object files for prdf rule plugins for pegasus PRDF_RULE_PLUGINS_PEGASUS = \ prdfP8Proc.o \ - prdfP8Ex.o \ + prdfPlatP8Ex.o \ prdfP8Mcs.o \ prdfP8Pll.o \ prdfCenMba.o \ diff --git a/src/usr/diag/prdf/plat/pegasus/prdfPlatP8Ex.C b/src/usr/diag/prdf/plat/pegasus/prdfPlatP8Ex.C new file mode 100644 index 000000000..8c13b041f --- /dev/null +++ b/src/usr/diag/prdf/plat/pegasus/prdfPlatP8Ex.C @@ -0,0 +1,146 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/plat/pegasus/prdfPlatP8Ex.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfP8Ex.C + * @brief Contains all the plugin code for the PRD P8 EX chiplet + */ + +#include <iipServiceDataCollector.h> +#include <prdfExtensibleChip.H> +#include <prdfPlatServices.H> +#include <prdfPluginMap.H> +#include <prdfCalloutUtil.H> + +namespace PRDF +{ +namespace Ex +{ +/** + * @brief Set the cause attention type to UNIT_CS for further analysis. + * @param i_chip Ex chip. + * @param i_sc Step Code data struct + * @return SUCCESS + */ +int32_t SetCoreCheckstopCause( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + PRDF_ERR( "[SetCoreCheckstopCause] Unexpected attention in Hostboot: " + "HUID=0x%08x", i_chip->GetId() ); + CalloutUtil::defaultError( i_sc ); + return SUCCESS; +} PRDF_PLUGIN_DEFINE(Ex, SetCoreCheckstopCause); + +/** + * @brief No-op in hostboot + * @param i_chip Ex chip. + * @param i_sc Step Code data struct + * @return PRD return code + */ +int32_t CheckCoreCheckstop( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + return SUCCESS; + +} PRDF_PLUGIN_DEFINE(Ex, CheckCoreCheckstop); + +/** + * @brief No-op in hostboot + * @param i_chip Ex chip. + * @param i_sc Step Code data struct + * @return PRD return code + */ +int32_t MaskIfCoreCheckstop( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + return SUCCESS; +} PRDF_PLUGIN_DEFINE(Ex, MaskIfCoreCheckstop); + +/** + * @brief Restart Trace Arrays that have been stopped on error + * @param i_chip Ex chip. + * @param i_sc Step Code data struct + * @return PRD return code + */ +int32_t RestartTraceArray( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + return SUCCESS; +} PRDF_PLUGIN_DEFINE(Ex, RestartTraceArray); + +/** + * @brief Handle an L3 UE + * @param i_chip Ex chip. + * @param i_sc Step Code data struct + * @return PRD return code + */ +int32_t L3UE( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + return SUCCESS; + +} PRDF_PLUGIN_DEFINE(Ex, L3UE); + +/** + * @brief Handle an L3 CE + * @param i_chip Ex chip. + * @param i_sc Step Code data struct + * @return PRD return code + */ +int32_t L3CE( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + PRDF_ERR( "[L3CE] Unexpected attention in Hostboot: " + "HUID=0x%08x", i_chip->GetId() ); + CalloutUtil::defaultError( i_sc ); + return SUCCESS; +} PRDF_PLUGIN_DEFINE(Ex, L3CE); + +/** + * @brief Handle an L2 UE + * @param i_chip Ex chip. + * @param i_sc Step Code data struct + * @return PRD return code + */ +int32_t L2UE( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + return SUCCESS; +} PRDF_PLUGIN_DEFINE(Ex, L2UE); + +/** + * @brief Handle an L2 CE + * @param i_chip Ex chip. + * @param i_sc Step Code data struct + * @return PRD return code + */ +int32_t L2CE( ExtensibleChip * i_chip, + STEP_CODE_DATA_STRUCT & i_sc ) +{ + PRDF_ERR( "[L2CE] Unexpected attention in Hostboot: " + "HUID=0x%08x", i_chip->GetId() ); + CalloutUtil::defaultError( i_sc ); + return SUCCESS; +} PRDF_PLUGIN_DEFINE(Ex, L2CE); + +} // end namespace Ex +} // end namespace PRDF |