diff options
author | Louis Stermole <stermole@us.ibm.com> | 2016-07-14 12:51:31 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-07-24 18:16:07 -0400 |
commit | ff5d29d744f8a53cf0ed6510e07b6a47bcc1a42f (patch) | |
tree | acc74ab83f815918b750894995f9a7e0edd38e06 /src/import/chips | |
parent | 7cb19899e629537ae080107933dafa68bf48e0b9 (diff) | |
download | talos-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.H | 33 | ||||
-rw-r--r-- | src/import/chips/p9/procedures/hwp/memory/lib/ecc/fw_mark_store.H | 32 |
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); } |