summaryrefslogtreecommitdiffstats
path: root/src/import/chips
diff options
context:
space:
mode:
authorLouis Stermole <stermole@us.ibm.com>2016-07-14 12:51:31 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-07-24 18:16:07 -0400
commitff5d29d744f8a53cf0ed6510e07b6a47bcc1a42f (patch)
treeacc74ab83f815918b750894995f9a7e0edd38e06 /src/import/chips
parent7cb19899e629537ae080107933dafa68bf48e0b9 (diff)
downloadtalos-hostboot-ff5d29d744f8a53cf0ed6510e07b6a47bcc1a42f.tar.gz
talos-hostboot-ff5d29d744f8a53cf0ed6510e07b6a47bcc1a42f.zip
Adding top level ECC API functions
Change-Id: I8316eb9ae335b62162fd557def696c75d2a54d7f Depends-On: I6de1746b210a6de9b73f418f20d7821256f639e4 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/27117 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Brian R. Silver <bsilver@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Reviewed-by: JACOB L. HARVEY <jlharvey@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/27235 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/chips')
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc_traits.H33
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/ecc/fw_mark_store.H32
2 files changed, 59 insertions, 6 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc_traits.H b/src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc_traits.H
index d12e4ed6c..7ffedb905 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc_traits.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc_traits.H
@@ -79,6 +79,7 @@ class eccTraits<fapi2::TARGET_TYPE_MCA>
static constexpr uint64_t FIRMWARE_MS5_REG = MCA_FWMS5;
static constexpr uint64_t FIRMWARE_MS6_REG = MCA_FWMS6;
static constexpr uint64_t FIRMWARE_MS7_REG = MCA_FWMS7;
+ static constexpr uint64_t MARK_SHADOW_REG = MCA_MSR;
// MCBIST ECC registers - Register API uses an MCA target instead
// of MCBIST since MCA's relative position is needed to find
@@ -182,6 +183,10 @@ class eccTraits<fapi2::TARGET_TYPE_MCA>
CURRENT_PORT = MCBIST_MCBMCATQ_CFG_CURRENT_PORT_TRAP,
CURRENT_PORT_LEN = MCBIST_MCBMCATQ_CFG_CURRENT_PORT_TRAP_LEN,
CURRENT_DIMM = MCBIST_MCBMCATQ_CFG_CURRENT_DIMM_TRAP,
+ SHADOW_CHIPMARK = MCA_MSR_CHIPMARK,
+ SHADOW_CHIPMARK_LEN = MCA_MSR_CHIPMARK_LEN,
+ SHADOW_RANK = MCA_MSR_RANK,
+ SHADOW_RANK_LEN = MCA_MSR_RANK_LEN,
};
@@ -247,6 +252,15 @@ class eccTraits<fapi2::TARGET_TYPE_MCBIST>
static constexpr uint64_t READ_ERROR_COUNT_REG0 = MCBIST_MBSEC0Q;
static constexpr uint64_t READ_ERROR_COUNT_REG1 = MCBIST_MBSEC1Q;
static constexpr uint64_t MARK_SYMBOL_COUNT_REG = MCBIST_MBSMSECQ;
+ static constexpr uint64_t MODAL_SYM_COUNT0_REG = MCBIST_MBSSYMEC0Q;
+ static constexpr uint64_t MODAL_SYM_COUNT1_REG = MCBIST_MBSSYMEC1Q;
+ static constexpr uint64_t MODAL_SYM_COUNT2_REG = MCBIST_MBSSYMEC2Q;
+ static constexpr uint64_t MODAL_SYM_COUNT3_REG = MCBIST_MBSSYMEC3Q;
+ static constexpr uint64_t MODAL_SYM_COUNT4_REG = MCBIST_MBSSYMEC4Q;
+ static constexpr uint64_t MODAL_SYM_COUNT5_REG = MCBIST_MBSSYMEC5Q;
+ static constexpr uint64_t MODAL_SYM_COUNT6_REG = MCBIST_MBSSYMEC6Q;
+ static constexpr uint64_t MODAL_SYM_COUNT7_REG = MCBIST_MBSSYMEC7Q;
+ static constexpr uint64_t MODAL_SYM_COUNT8_REG = MCBIST_MBSSYMEC8Q;
// Fields, can be any size.
enum
@@ -279,7 +293,26 @@ class eccTraits<fapi2::TARGET_TYPE_MCBIST>
SYMBOL2_COUNT_LEN = MCBIST_MBSMSECQ_MCE_SYMBOL2_COUNT_LEN,
SYMBOL3_COUNT = MCBIST_MBSMSECQ_MCE_SYMBOL3_COUNT,
SYMBOL3_COUNT_LEN = MCBIST_MBSMSECQ_MCE_SYMBOL3_COUNT_LEN,
+ MODAL_SYMBOL_COUNTER_00 = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_00,
+ MODAL_SYMBOL_COUNTER_00_LEN = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_00_LEN,
+ MODAL_SYMBOL_COUNTER_01 = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_01,
+ MODAL_SYMBOL_COUNTER_01_LEN = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_01_LEN,
+ MODAL_SYMBOL_COUNTER_02 = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_02,
+ MODAL_SYMBOL_COUNTER_02_LEN = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_02_LEN,
+ MODAL_SYMBOL_COUNTER_03 = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_03,
+ MODAL_SYMBOL_COUNTER_03_LEN = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_03_LEN,
+ MODAL_SYMBOL_COUNTER_04 = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_04,
+ MODAL_SYMBOL_COUNTER_04_LEN = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_04_LEN,
+ MODAL_SYMBOL_COUNTER_05 = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_05,
+ MODAL_SYMBOL_COUNTER_05_LEN = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_05_LEN,
+ MODAL_SYMBOL_COUNTER_06 = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_06,
+ MODAL_SYMBOL_COUNTER_06_LEN = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_06_LEN,
+ MODAL_SYMBOL_COUNTER_07 = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_07,
+ MODAL_SYMBOL_COUNTER_07_LEN = MCBIST_MBSSYMEC0Q_MODAL_SYMBOL_COUNTER_07_LEN,
+ // and a couple constants
+ NUM_MBSSYM_REGS = 9,
+ MODAL_SYMBOL_COUNTERS_PER_REG = 8,
};
};
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/ecc/fw_mark_store.H b/src/import/chips/p9/procedures/hwp/memory/lib/ecc/fw_mark_store.H
index ef73c7c96..0fdb2e550 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/ecc/fw_mark_store.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/ecc/fw_mark_store.H
@@ -45,6 +45,24 @@ namespace ecc
namespace fwms
{
+enum mark_type
+{
+ SYMBOL = 1,
+ CHIP = 0
+};
+
+enum mark_region
+{
+ DISABLED = 0b000,
+ RESERVED = 0b001,
+ BANK = 0b010,
+ BANKGROUP = 0b011,
+ SRANK = 0b100,
+ MRANK = 0b101,
+ DIMM = 0b110,
+ UNIVERSAL = 0b111
+};
+
///
/// @brief Read Firmware Mark Store (FWMS) register
/// @tparam R master rank number
@@ -421,7 +439,7 @@ inline void get_mark( const fapi2::buffer<uint64_t>& i_data, uint64_t& o_value )
/// @note CHIP=>0b0
///
template< fapi2::TargetType T = fapi2::TARGET_TYPE_MCA, typename TT = eccTraits<T> >
-inline void set_type( fapi2::buffer<uint64_t>& io_data, const uint64_t i_value )
+inline void set_type( fapi2::buffer<uint64_t>& io_data, const mark_type i_value )
{
io_data.writeBit<TT::FIRMWARE_MS_TYPE>(i_value);
FAPI_INF("set_type: 0x%01lx", i_value);
@@ -439,9 +457,9 @@ inline void set_type( fapi2::buffer<uint64_t>& io_data, const uint64_t i_value )
/// @note CHIP=>0b0
///
template< fapi2::TargetType T = fapi2::TARGET_TYPE_MCA, typename TT = eccTraits<T> >
-inline void get_type( const fapi2::buffer<uint64_t>& i_data, uint64_t& o_value )
+inline void get_type( const fapi2::buffer<uint64_t>& i_data, mark_type& o_value )
{
- o_value = i_data.getBit<TT::FIRMWARE_MS_TYPE>();
+ o_value = mark_type(i_data.getBit<TT::FIRMWARE_MS_TYPE>());
FAPI_INF("get_type: 0x%01lx", o_value);
}
@@ -463,7 +481,7 @@ inline void get_type( const fapi2::buffer<uint64_t>& i_data, uint64_t& o_value )
/// @note UNIVERSAL=>0b111
///
template< fapi2::TargetType T = fapi2::TARGET_TYPE_MCA, typename TT = eccTraits<T> >
-inline void set_region( fapi2::buffer<uint64_t>& io_data, const uint64_t i_value )
+inline void set_region( fapi2::buffer<uint64_t>& io_data, const mark_region i_value )
{
io_data.insertFromRight<TT::FIRMWARE_MS_REGION, TT::FIRMWARE_MS_REGION_LEN>(i_value);
FAPI_INF("set_region: 0x%02lx", i_value);
@@ -487,9 +505,11 @@ inline void set_region( fapi2::buffer<uint64_t>& io_data, const uint64_t i_value
/// @note UNIVERSAL=>0b111
///
template< fapi2::TargetType T = fapi2::TARGET_TYPE_MCA, typename TT = eccTraits<T> >
-inline void get_region( const fapi2::buffer<uint64_t>& i_data, uint64_t& o_value )
+inline void get_region( const fapi2::buffer<uint64_t>& i_data, mark_region& o_value )
{
- i_data.extractToRight<TT::FIRMWARE_MS_REGION, TT::FIRMWARE_MS_REGION_LEN>(o_value);
+ uint64_t l_temp = 0;
+ i_data.extractToRight<TT::FIRMWARE_MS_REGION, TT::FIRMWARE_MS_REGION_LEN>(l_temp);
+ o_value = mark_region(l_temp);
FAPI_INF("get_region: 0x%02lx", o_value);
}
OpenPOWER on IntegriCloud