summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/usr/diag/mdia/mdia.C20
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfP9Mca.C4
-rw-r--r--src/usr/diag/prdf/plat/prdfPlatServices_ipl.C25
-rw-r--r--src/usr/diag/prdf/plat/prdfPlatServices_ipl.H3
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/target_types.xml2
5 files changed, 31 insertions, 23 deletions
diff --git a/src/usr/diag/mdia/mdia.C b/src/usr/diag/mdia/mdia.C
index d136f6cee..c05e38a1e 100644
--- a/src/usr/diag/mdia/mdia.C
+++ b/src/usr/diag/mdia/mdia.C
@@ -117,20 +117,16 @@ errlHndl_t runStep(const TargetHandleList & i_targetList)
doStepCleanup(globals);
- if ( nullptr != top &&
- 0 != top->getAttr<ATTR_RCD_PARITY_RECONFIG_LOOP_COUNT>() )
+ // If this step completes without the need for a reconfig due to an RCD
+ // parity error, clear all RCD parity error counters.
+ ATTR_RECONFIGURE_LOOP_type attr = top->getAttr<ATTR_RECONFIGURE_LOOP>();
+ if ( 0 == (attr & RECONFIGURE_LOOP_RCD_PARITY_ERROR) )
{
- // Reset the RCD parity error reconfig loop counter if this step
- // completes without an RCD parity error. Note that PRD will only set
- // the RCD parity error flag if there is an RCD parity error and the
- // total count of reconfig loops is under threshold. At threshold, a
- // part will be deconfigured, forcing a reconfig, but the RCD parity
- // error flag will not be set to ensure this code is activated and the
- // count it reset.
- ATTR_RECONFIGURE_LOOP_type attr = top->getAttr<ATTR_RECONFIGURE_LOOP>();
- if ( 0 == (attr & RECONFIGURE_LOOP_RCD_PARITY_ERROR) )
+ TargetHandleList trgtList; getAllChiplets( trgtList, TYPE_MCA );
+ for ( auto & trgt : trgtList )
{
- top->setAttr<ATTR_RCD_PARITY_RECONFIG_LOOP_COUNT>(0);
+ if ( 0 != trgt->getAttr<ATTR_RCD_PARITY_RECONFIG_LOOP_COUNT>() )
+ trgt->setAttr<ATTR_RCD_PARITY_RECONFIG_LOOP_COUNT>(0);
}
}
diff --git a/src/usr/diag/prdf/plat/mem/prdfP9Mca.C b/src/usr/diag/prdf/plat/mem/prdfP9Mca.C
index 84b3a7792..17161c03d 100644
--- a/src/usr/diag/prdf/plat/mem/prdfP9Mca.C
+++ b/src/usr/diag/prdf/plat/mem/prdfP9Mca.C
@@ -109,7 +109,7 @@ int32_t RcdParityError( ExtensibleChip * i_mcaChip,
// documented below.
// Nothing more to do if this is a checkstop attention.
- if ( CHECK_STOP != io_sc.service_data->getPrimaryAttnType() )
+ if ( CHECK_STOP == io_sc.service_data->getPrimaryAttnType() )
return SUCCESS;
#ifdef __HOSTBOOT_RUNTIME // TPS only supported at runtime.
@@ -160,7 +160,7 @@ int32_t RcdParityError( ExtensibleChip * i_mcaChip,
{
// Recovery is disabled. Issue a reconfig loop. Make the error log
// predictive if threshold is reached.
- if ( rcdParityErrorReconfigLoop() )
+ if ( rcdParityErrorReconfigLoop(i_mcaChip->getTrgt()) )
io_sc.service_data->setServiceCall();
}
else
diff --git a/src/usr/diag/prdf/plat/prdfPlatServices_ipl.C b/src/usr/diag/prdf/plat/prdfPlatServices_ipl.C
index 658a9f785..3b4aa0e7f 100644
--- a/src/usr/diag/prdf/plat/prdfPlatServices_ipl.C
+++ b/src/usr/diag/prdf/plat/prdfPlatServices_ipl.C
@@ -39,6 +39,7 @@
//#include <prdfCenDqBitmap.H> TODO RTC 164707
#include <prdfMemScrubUtils.H>
+#include <prdfMfgThresholdMgr.H>
#include <diag/mdia/mdia.H>
#include <config.h>
@@ -107,15 +108,25 @@ int32_t mdiaSendEventMsg( TargetHandle_t i_trgt,
//------------------------------------------------------------------------------
-bool rcdParityErrorReconfigLoop()
+bool rcdParityErrorReconfigLoop( TargetHandle_t i_trgt )
{
TargetHandle_t top = getSystemTarget();
- // Check the current reconfig count.
- uint8_t allowed = top->getAttr<ATTR_RCD_PARITY_RECONFIG_LOOPS_ALLOWED>();
- uint8_t count = top->getAttr<ATTR_RCD_PARITY_RECONFIG_LOOP_COUNT>();
+ // Get the current reconfig count and increment.
+ uint8_t count = i_trgt->getAttr<ATTR_RCD_PARITY_RECONFIG_LOOP_COUNT>() + 1;
- if ( count <= allowed )
+ // Get the reconfig threshold and check MNFG threshold, if needed.
+ uint8_t th = top->getAttr<ATTR_RCD_PARITY_RECONFIG_LOOPS_ALLOWED>() + 1;
+ if ( mfgMode() )
+ {
+ uint8_t mnfgTh = MfgThresholdMgr::getInstance()->
+ getThreshold(ATTR_MNFG_TH_RCD_PARITY_ERRORS);
+ if ( mnfgTh < th )
+ th = mnfgTh;
+ }
+
+ // If the count is under threshold, trigger a reconfig loop.
+ if ( count < th )
{
// Set the RCD parity error flag in the reconfig loop attribute. This
// will trigger a reconfig loop at the end of the current istep.
@@ -126,8 +137,8 @@ bool rcdParityErrorReconfigLoop()
top->setAttr<ATTR_RECONFIGURE_LOOP>(attr);
}
- // Increment the count.
- top->setAttr<ATTR_RCD_PARITY_RECONFIG_LOOP_COUNT>(++count);
+ // Write the new count to the attribute.
+ i_trgt->setAttr<ATTR_RCD_PARITY_RECONFIG_LOOP_COUNT>(count);
return false;
}
diff --git a/src/usr/diag/prdf/plat/prdfPlatServices_ipl.H b/src/usr/diag/prdf/plat/prdfPlatServices_ipl.H
index 5151f11b3..2dcdc628c 100644
--- a/src/usr/diag/prdf/plat/prdfPlatServices_ipl.H
+++ b/src/usr/diag/prdf/plat/prdfPlatServices_ipl.H
@@ -65,10 +65,11 @@ int32_t mdiaSendEventMsg( TARGETING::TargetHandle_t i_trgt,
/**
* @brief Initiates a reconfig loop due to an RCD parity error.
+ * @param i_trgt An MCA target.
* @return True if the number of allowed reconfig loops has been exceeded.
* False otherwise.
*/
-bool rcdParityErrorReconfigLoop();
+bool rcdParityErrorReconfigLoop( TARGETING::TargetHandle_t i_trgt );
/**
* @brief Invokes the restore DRAM repairs hardware procedure.
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index fa10dd73b..38085de50 100755
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -705,7 +705,6 @@
<attribute><id>MNFG_TH_MEMORY_IUES</id></attribute>
<attribute><id>MNFG_TH_MEMORY_IMPES</id></attribute>
<attribute><id>RCD_PARITY_RECONFIG_LOOPS_ALLOWED</id></attribute>
- <attribute><id>RCD_PARITY_RECONFIG_LOOP_COUNT</id></attribute>
<attribute><id>OPT_MEMMAP_GROUP_POLICY</id></attribute>
<attribute><id>BRAZOS_RX_FIFO_OVERRIDE</id></attribute>
<attribute><id>MRW_MBA_CACHELINE_INTERLEAVE_MODE_CONTROL</id></attribute>
@@ -1939,6 +1938,7 @@
<attribute><id>VPD_OVERRIDE_MW_ENABLE</id></attribute>
<attribute><id>VPD_OVERRIDE_MW</id></attribute>
<attribute><id>PRD_HWP_PLID</id></attribute>
+ <attribute><id>RCD_PARITY_RECONFIG_LOOP_COUNT</id></attribute>
</targetType>
<targetType>
OpenPOWER on IntegriCloud