summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2019-07-09 14:55:42 -0500
committerZane C Shelley <zshelle@us.ibm.com>2019-07-30 09:22:37 -0500
commitb731bda962809b7ac080b7c1cd594a260b3415f3 (patch)
treeb205284479661549c52102b38b78b697896f196d /src
parent6751459c351f789c3083a3c52d8228cd18e510a8 (diff)
downloadtalos-hostboot-b731bda962809b7ac080b7c1cd594a260b3415f3.tar.gz
talos-hostboot-b731bda962809b7ac080b7c1cd594a260b3415f3.zip
PRD: Axone Restore DRAM Repairs support
Change-Id: I6a705fc2429b1b49b766f72d1ace818ad8b9b87d RTC: 199034 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/80168 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Benjamen G. Tyner <ben.tyner@ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81058 Reviewed-by: Zane C Shelley <zshelle@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/diag/prdf/prdfMain_ipl.H2
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/prdfTargetServices.H4
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C87
-rw-r--r--src/usr/diag/prdf/plat/prdfPlatServices_ipl.C8
4 files changed, 63 insertions, 38 deletions
diff --git a/src/include/usr/diag/prdf/prdfMain_ipl.H b/src/include/usr/diag/prdf/prdfMain_ipl.H
index 08b626ce2..396d225c3 100644
--- a/src/include/usr/diag/prdf/prdfMain_ipl.H
+++ b/src/include/usr/diag/prdf/prdfMain_ipl.H
@@ -48,7 +48,7 @@ extern errlHndl_t noLock_initialize();
/**
* @brief Restores hardware DRAM repairs to reflect what is stored in VPD.
- * @param i_trgt An MBA or MCA target.
+ * @param i_trgt An MBA, MCA, or OCMB target.
* @return Non-SUCCESS if conditions are such that a callout had to be made,
* SUCCESS otherwise.
*/
diff --git a/src/usr/diag/prdf/common/plat/prdfTargetServices.H b/src/usr/diag/prdf/common/plat/prdfTargetServices.H
index 74ccbbc85..cead140df 100755
--- a/src/usr/diag/prdf/common/plat/prdfTargetServices.H
+++ b/src/usr/diag/prdf/common/plat/prdfTargetServices.H
@@ -321,8 +321,8 @@ TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_trgt,
/**
* @param i_trgt The target MBA, MCA, OCMB_CHIP, or MEM_PORT.
* @param i_rank The target rank.
- * @param i_port Port select, only needed for MBA. MCA and MEM_PORT are
- * targets equivalent to the port already.
+ * @param i_port Port select, only needed for MBA and OCMB_CHIP. MCA and
+ * MEM_PORT are targets equivalent to the port already.
* @return The DIMM connected to the target and rank on a port.
*/
TARGETING::TargetHandle_t getConnectedDimm( TARGETING::TargetHandle_t i_trgt,
diff --git a/src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C b/src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C
index 04eff661e..3acf7bcb1 100644
--- a/src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C
+++ b/src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C
@@ -171,11 +171,7 @@ void commitSoftError( uint32_t i_reasonCode, TargetHandle_t i_trgt,
//------------------------------------------------------------------------------
template<TARGETING::TYPE T>
-bool processRepairedRanks( TargetHandle_t i_trgt, uint8_t i_repairedRankMask );
-
-template<>
-bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
- uint8_t i_repairedRankMask )
+bool processRepairedRanks( TargetHandle_t i_trgt, uint8_t i_repairedRankMask )
{
#define PRDF_FUNC "[processRepairedRanks] "
@@ -194,7 +190,7 @@ bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
// map value has no significance.
std::map<TargetHandle_t, uint32_t> calloutList;
- ExtensibleChip * mcaChip = (ExtensibleChip *)systemPtr->GetChip(i_trgt);
+ ExtensibleChip * chip = (ExtensibleChip *)systemPtr->GetChip(i_trgt);
for ( uint8_t r = 0; r < MASTER_RANKS_PER_PORT; ++r )
{
@@ -206,20 +202,18 @@ bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
MemRank rank ( r );
MemMark cm;
- if ( SUCCESS != MarkStore::readChipMark<TYPE_MCA>( mcaChip, rank,
- cm ) )
+ if ( SUCCESS != MarkStore::readChipMark<T>( chip, rank, cm ) )
{
- PRDF_ERR( PRDF_FUNC "readChipMark<TYPE_MCA>(0x%08x,0x%02x) "
- "failed", mcaChip->getHuid(), rank.getKey() );
+ PRDF_ERR( PRDF_FUNC "readChipMark<T>(0x%08x,0x%02x) "
+ "failed", chip->getHuid(), rank.getKey() );
continue; // skip this rank
}
MemMark sm;
- if ( SUCCESS != MarkStore::readSymbolMark<TYPE_MCA>( mcaChip, rank,
- sm ) )
+ if ( SUCCESS != MarkStore::readSymbolMark<T>( chip, rank, sm ) )
{
- PRDF_ERR( PRDF_FUNC "readSymbolMark<TYPE_MCA>(0x%08x,0x%02x) "
- "failed", mcaChip->getHuid(), rank.getKey() );
+ PRDF_ERR( PRDF_FUNC "readSymbolMark<T>(0x%08x,0x%02x) "
+ "failed", chip->getHuid(), rank.getKey() );
continue; // skip this rank
}
@@ -229,9 +223,8 @@ bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
if ( NULL == errl )
{
- errl = createErrl<TYPE_MCA>( PRDF_DETECTED_FAIL_HARDWARE,
- i_trgt,
- PRDFSIG_RdrRepairsUsed );
+ errl = createErrl<T>( PRDF_DETECTED_FAIL_HARDWARE,
+ i_trgt, PRDFSIG_RdrRepairsUsed );
}
std::vector<MemSymbol> symList;
@@ -261,16 +254,16 @@ bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
// Callout all DIMMs in the map.
for ( auto const & dimm : calloutList )
{
- __calloutDimm<TYPE_MCA>( errl, i_trgt, dimm.first );
+ __calloutDimm<T>( errl, i_trgt, dimm.first );
}
// Commit the error log, if needed.
- commitErrl<TYPE_MCA>( errl, i_trgt );
+ commitErrl<T>( errl, i_trgt );
// Commit an additional error log indicating something failed in the
// analysis, if needed.
- commitSoftError<TYPE_MCA>( PRDF_DETECTED_FAIL_SOFTWARE, i_trgt,
- PRDFSIG_RdrInternalFail, analysisErrors );
+ commitSoftError<T>( PRDF_DETECTED_FAIL_SOFTWARE, i_trgt,
+ PRDFSIG_RdrInternalFail, analysisErrors );
}while(0);
return o_calloutMade;
@@ -278,6 +271,14 @@ bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
#undef PRDF_FUNC
}
+
+template
+bool processRepairedRanks<TYPE_MCA>( TargetHandle_t i_trgt,
+ uint8_t i_repairedRankMask );
+template
+bool processRepairedRanks<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt,
+ uint8_t i_repairedRankMask );
+
//------------------------------------------------------------------------------
template<>
@@ -407,10 +408,7 @@ bool processRepairedRanks<TYPE_MBA>( TargetHandle_t i_trgt,
template<TARGETING::TYPE T>
-bool processBadDimms( TargetHandle_t i_trgt, uint8_t i_badDimmMask );
-
-template<>
-bool processBadDimms<TYPE_MCA>( TargetHandle_t i_trgt, uint8_t i_badDimmMask )
+bool processBadDimms( TargetHandle_t i_trgt, uint8_t i_badDimmMask )
{
#define PRDF_FUNC "[processBadDimms] "
@@ -436,29 +434,35 @@ bool processBadDimms<TYPE_MCA>( TargetHandle_t i_trgt, uint8_t i_badDimmMask )
{
if ( NULL == errl )
{
- errl = createErrl<TYPE_MCA>( PRDF_DETECTED_FAIL_HARDWARE,
- i_trgt, PRDFSIG_RdrRepairUnavail );
+ errl = createErrl<T>( PRDF_DETECTED_FAIL_HARDWARE,
+ i_trgt, PRDFSIG_RdrRepairUnavail );
}
- __calloutDimm<TYPE_MCA>( errl, i_trgt, dimm );
+ __calloutDimm<T>( errl, i_trgt, dimm );
o_calloutMade = true;
}
}
// Commit the error log, if needed.
- commitErrl<TYPE_MCA>( errl, i_trgt );
+ commitErrl<T>( errl, i_trgt );
// Commit an additional error log indicating something failed in the
// analysis, if needed.
- commitSoftError<TYPE_MCA>( PRDF_DETECTED_FAIL_SOFTWARE, i_trgt,
- PRDFSIG_RdrInternalFail, analysisErrors );
+ commitSoftError<T>( PRDF_DETECTED_FAIL_SOFTWARE, i_trgt,
+ PRDFSIG_RdrInternalFail, analysisErrors );
return o_calloutMade;
#undef PRDF_FUNC
}
+template
+bool processBadDimms<TYPE_MCA>( TargetHandle_t i_trgt, uint8_t i_badDimmMask );
+template
+bool processBadDimms<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt,
+ uint8_t i_badDimmMask );
+
//------------------------------------------------------------------------------
template<>
@@ -595,6 +599,25 @@ void deployDramSpares<TYPE_MBA>( TargetHandle_t i_trgt,
}
}
+template<>
+void deployDramSpares<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt,
+ const std::vector<MemRank> & i_ranks )
+{
+ for ( auto & rank : i_ranks )
+ {
+ MemSymbol sym = MemSymbol::fromSymbol( i_trgt, rank, 71 );
+
+ int32_t l_rc = mssSetSteerMux<TYPE_OCMB_CHIP>(i_trgt, rank, sym, false);
+ if ( SUCCESS != l_rc )
+ {
+ // mssSetSteerMux() will print a trace and commit the error log,
+ // however, we need to handle the return code or we get a compile
+ // warning in Hostboot.
+ continue;
+ }
+ }
+}
+
} // end namespace RDR
//------------------------------------------------------------------------------
@@ -695,6 +718,8 @@ template
uint32_t restoreDramRepairs<TYPE_MCA>( TargetHandle_t i_trgt );
template
uint32_t restoreDramRepairs<TYPE_MBA>( TargetHandle_t i_trgt );
+template
+uint32_t restoreDramRepairs<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt );
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/plat/prdfPlatServices_ipl.C b/src/usr/diag/prdf/plat/prdfPlatServices_ipl.C
index 204e61ca6..756d877c0 100644
--- a/src/usr/diag/prdf/plat/prdfPlatServices_ipl.C
+++ b/src/usr/diag/prdf/plat/prdfPlatServices_ipl.C
@@ -211,9 +211,9 @@ uint32_t mssRestoreDramRepairs<TYPE_MBA>( TargetHandle_t i_target,
//------------------------------------------------------------------------------
template<>
-uint32_t mssRestoreDramRepairs<TYPE_MEM_PORT>( TargetHandle_t i_target,
- uint8_t & o_repairedRankMask,
- uint8_t & o_badDimmMask )
+uint32_t mssRestoreDramRepairs<TYPE_OCMB_CHIP>( TargetHandle_t i_target,
+ uint8_t & o_repairedRankMask,
+ uint8_t & o_badDimmMask )
{
uint32_t o_rc = SUCCESS;
@@ -223,7 +223,7 @@ uint32_t mssRestoreDramRepairs<TYPE_MEM_PORT>( TargetHandle_t i_target,
fapi2::buffer<uint8_t> tmpRepairedRankMask, tmpBadDimmMask;
FAPI_INVOKE_HWP( errl, mss::restore_repairs,
- fapi2::Target<fapi2::TARGET_TYPE_MEM_PORT>( i_target ),
+ fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>( i_target ),
tmpRepairedRankMask, tmpBadDimmMask );
if ( NULL != errl )
OpenPOWER on IntegriCloud