summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
authorBenjamin Weisenbeck <bweisenb@us.ibm.com>2013-06-07 14:19:14 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-08-19 08:56:37 -0500
commitbb62dfc53db824c61ea2e166f12b90ff597f0138 (patch)
tree2acbd68d7f9e3296edcd54d387490b013984dbae /src/usr/diag/prdf
parent8efaa82ce48d80d3bf134cdd6832aa798cbfa4c9 (diff)
downloadtalos-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-xsrc/usr/diag/prdf/common/mnfgtools/prdfMfgThresholds.lst8
-rw-r--r--src/usr/diag/prdf/common/plat/pegasus/prdfP8Ex.C290
-rwxr-xr-xsrc/usr/diag/prdf/common/prd_pegasus.mk2
-rw-r--r--src/usr/diag/prdf/plat/pegasus/prdfPlatP8Ex.C146
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
OpenPOWER on IntegriCloud