summaryrefslogtreecommitdiffstats
path: root/src/usr/diag
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2017-05-12 15:14:49 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2017-05-17 11:56:46 -0400
commitdc94aa0d2c9ba8eaabf17399df5acf08e83ced8a (patch)
tree144ba22c28fd501e770df1294dcab227628c8b2b /src/usr/diag
parentd4db18f792b0a2b5c7ec4b9f527ee4d83c963dde (diff)
downloadtalos-hostboot-dc94aa0d2c9ba8eaabf17399df5acf08e83ced8a.tar.gz
talos-hostboot-dc94aa0d2c9ba8eaabf17399df5acf08e83ced8a.zip
PRD: RAS policies for chip/symbol marks
Change-Id: Ib522204a98056a2f9ea348d65f6f60212be8b66e RTC: 174200 CQ: SW388927 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40465 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40596 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag')
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemMark.H16
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C2
2 files changed, 15 insertions, 3 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemMark.H b/src/usr/diag/prdf/common/plat/mem/prdfMemMark.H
index ccd41359e..fb5e33a52 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemMark.H
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemMark.H
@@ -26,7 +26,11 @@
#ifndef __prdfMemMark_H
#define __prdfMemMark_H
+// Framework includes
+#include <iipServiceDataCollector.h>
#include <prdfExtensibleChip.H>
+
+// Platform includes
#include <prdfMemAddress.H>
#include <prdfMemSymbol.H>
#include <prdfPlatServices.H>
@@ -150,13 +154,15 @@ uint32_t clearSymbolMark( ExtensibleChip * i_chip, const MemRank & i_rank );
/**
* @brief If a rank contains a symbol mark that is on the same DRAM as the chip
* mark, the symbol mark is removed. This is done to free up available
- * repairs.
+ * repairs. Will also apply RAS policies where necessary.
* @param i_chip MBA or MCA chip.
* @param i_rank Target rank.
+ * @param io_sc The step code data struct.
* @return Non-SUCCESS if an internal function fails. SUCCESS otherwise.
*/
template<TARGETING::TYPE T>
-uint32_t balance( ExtensibleChip * i_chip, const MemRank & i_rank )
+uint32_t balance( ExtensibleChip * i_chip, const MemRank & i_rank,
+ STEP_CODE_DATA_STRUCT & io_sc )
{
uint32_t o_rc = SUCCESS;
@@ -181,6 +187,12 @@ uint32_t balance( ExtensibleChip * i_chip, const MemRank & i_rank )
o_rc = clearSymbolMark<T>( i_chip, i_rank );
if ( SUCCESS != o_rc ) break;
}
+ else
+ {
+ // Both a chip and symbol mark exist, but they are on separate
+ // DRAMs. So, make the error log predictive.
+ io_sc.service_data->setServiceCall();
+ }
} while (0);
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
index 739709606..4eb08798f 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
@@ -199,7 +199,7 @@ uint32_t VcmEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
// If there is a symbol mark on the same DRAM as the newly
// verified chip mark, remove the symbol mark.
- o_rc = MarkStore::balance<TYPE_MCA>( iv_chip, iv_rank );
+ o_rc = MarkStore::balance<TYPE_MCA>( iv_chip, iv_rank, io_sc );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "MarkStore::balance(0x%08x, %d) failed",
OpenPOWER on IntegriCloud