summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc.H')
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc.H789
1 files changed, 0 insertions, 789 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc.H b/src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc.H
deleted file mode 100644
index 5a657edac..000000000
--- a/src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc.H
+++ /dev/null
@@ -1,789 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/import/chips/p9/procedures/hwp/memory/lib/ecc/ecc.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2016,2018 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-
-///
-/// @file ecc.H
-/// @brief Top level API for MSS ECC
-///
-// *HWP HWP Owner: Louis Stermole <stermole@us.ibm.com>
-// *HWP HWP Backup: Stephen Glancy <sglancy@us.ibm.com>
-// *HWP Team: Memory
-// *HWP Level: 3
-// *HWP Consumed by: FSP:HB
-
-#ifndef _MSS_ECC_H_
-#define _MSS_ECC_H_
-
-#include <fapi2.H>
-#include <lib/mcbist/mcbist.H>
-#include <lib/mcbist/address.H>
-#include <lib/ecc/ecc_traits.H>
-#include <lib/ecc/galois.H>
-#include <lib/ecc/hw_mark_store.H>
-#include <lib/ecc/fw_mark_store.H>
-#include <lib/ecc/mainline_nce_trap.H>
-#include <lib/ecc/mainline_rce_trap.H>
-#include <lib/ecc/mainline_mpe_trap.H>
-#include <lib/ecc/mainline_ue_trap.H>
-#include <lib/ecc/mainline_aue_trap.H>
-#include <lib/ecc/mbs_error_vector_trap.H>
-#include <lib/ecc/maint_current_trap.H>
-#include <lib/ecc/read_error_count_regs.H>
-#include <lib/ecc/modal_symbol_count.H>
-#include <lib/ecc/mark_shadow_reg.H>
-
-namespace mss
-{
-
-namespace ecc
-{
-
-///
-/// @brief Get Hardware Mark Store
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[in] i_rank the desired rank
-/// @param[out] o_galois the Galois code of the mark
-/// @param[out] o_confirmed true if the mark is a chipmark
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_hwms( const fapi2::Target<T>& i_target,
- const uint64_t i_rank,
- uint64_t& o_galois,
- mss::states& o_confirmed )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::hwms::read(i_target, i_rank, l_buffer) );
- mss::ecc::hwms::get_chipmark(l_buffer, o_galois);
- mss::ecc::hwms::get_confirmed(l_buffer, o_confirmed);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Set Hardware Mark Store
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[in] i_rank the desired rank
-/// @param[in] i_galois the Galois code of the mark, or set to 0 to clear mark
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode set_hwms( const fapi2::Target<T>& i_target,
- const uint64_t i_rank,
- const uint64_t i_galois )
-{
- fapi2::buffer<uint64_t> l_buffer;
- uint8_t l_symbol = 0;
-
- // galois value of 0 means to clear the mark so only fill in fields if non-zero
- if (i_galois != 0)
- {
- // check for valid Galois code
- FAPI_TRY( mss::ecc::galois_to_symbol( (uint8_t)i_galois, l_symbol) );
-
- mss::ecc::hwms::set_chipmark(l_buffer, i_galois);
- mss::ecc::hwms::set_confirmed(l_buffer, mss::YES);
- mss::ecc::hwms::set_exit_1(l_buffer, mss::YES);
- }
-
- FAPI_TRY( mss::ecc::hwms::write(i_target, i_rank, l_buffer) );
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Firmware Mark Store
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[in] i_rank the desired rank
-/// @param[out] o_galois the Galois code of the mark
-/// @param[out] o_type the type code of the mark
-/// @param[out] o_region the region code of the mark
-/// @param[out] o_address the starting address of the mark
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_fwms( const fapi2::Target<T>& i_target,
- const uint64_t i_rank,
- uint64_t& o_galois,
- mss::ecc::fwms::mark_type& o_type,
- mss::ecc::fwms::mark_region& o_region,
- mss::mcbist::address& o_address )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::fwms::read(i_target, i_rank, l_buffer) );
- mss::ecc::fwms::get_mark(l_buffer, o_galois);
- mss::ecc::fwms::get_type(l_buffer, o_type);
- mss::ecc::fwms::get_region(l_buffer, o_region);
- mss::ecc::fwms::get_address(l_buffer, o_address);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Set Firmware Mark Store
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[in] i_rank the desired rank
-/// @param[in] i_galois the Galois code of the mark, or set to 0 to clear mark
-/// @param[in] i_type the type code of the mark
-/// @param[in] i_region the region code of the mark
-/// @param[in] i_address the starting address of the mark
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode set_fwms( const fapi2::Target<T>& i_target,
- const uint64_t i_rank,
- const uint64_t i_galois,
- const mss::ecc::fwms::mark_type i_type,
- const mss::ecc::fwms::mark_region i_region,
- const mss::mcbist::address i_address )
-{
- fapi2::buffer<uint64_t> l_buffer = 0;
- uint8_t l_symbol = 0;
-
- // galois value of 0 means to clear the mark so only fill in fields if non-zero
- if (i_galois != 0)
- {
- // check for valid Galois code
- FAPI_TRY( mss::ecc::galois_to_symbol( (uint8_t)i_galois, l_symbol) );
-
- mss::ecc::fwms::set_mark(l_buffer, i_galois);
- mss::ecc::fwms::set_type(l_buffer, i_type);
- mss::ecc::fwms::set_region(l_buffer, i_region);
- mss::ecc::fwms::set_address(l_buffer, i_address);
- mss::ecc::fwms::set_exit_1(l_buffer, mss::YES);
- }
-
- FAPI_TRY( mss::ecc::fwms::write(i_target, i_rank, l_buffer) );
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Query Hardware Marks
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_marks vector of Galois codes of any marks set
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-/// @note no rank information is returned
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_hw_marks( const fapi2::Target<T>& i_target,
- std::vector<uint64_t>& o_marks )
-{
- fapi2::buffer<uint64_t> l_buffer;
- uint64_t l_galois = 0;
- auto l_confirmed = mss::states::NO;
-
- o_marks.clear();
-
- for (uint64_t l_rank = 0; l_rank < MAX_MRANK_PER_PORT; ++l_rank)
- {
- FAPI_TRY( get_hwms(i_target, l_rank, l_galois, l_confirmed) );
-
- if (l_confirmed == mss::states::YES)
- {
- o_marks.push_back(l_galois);
- }
- }
-
- return fapi2::FAPI2_RC_SUCCESS;
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Query Firmware Marks
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_marks vector of Galois codes of any marks set
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-/// @note no rank information is returned
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_fw_marks( const fapi2::Target<T>& i_target,
- std::vector<uint64_t>& o_marks )
-{
- fapi2::buffer<uint64_t> l_buffer;
- uint64_t l_galois = 0;
- auto l_type = mss::ecc::fwms::mark_type::CHIP;
- auto l_region = mss::ecc::fwms::mark_region::UNIVERSAL;
- mss::mcbist::address l_address;
-
- o_marks.clear();
-
- for (uint64_t l_rank = 0; l_rank < MAX_MRANK_PER_PORT; ++l_rank)
- {
- FAPI_TRY( get_fwms(i_target, l_rank, l_galois, l_type, l_region, l_address) );
-
- if (l_region != mss::ecc::fwms::mark_region::DISABLED)
- {
- o_marks.push_back(l_galois);
- }
- }
-
- return fapi2::FAPI2_RC_SUCCESS;
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Mainline NCE address traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_address the trap address of the last mainline nce
-/// @param[out] o_on_rce mss::YES if nce is part of an rce
-/// @param[out] o_is_tce mss::YES if nce is a tce
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_nce_addr_trap( const fapi2::Target<T>& i_target,
- mss::mcbist::address& o_address,
- mss::states& o_on_rce,
- mss::states& o_is_tce )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mainline_nce_trap::read(i_target, l_buffer) );
- mss::ecc::mainline_nce_trap::get_address(l_buffer, o_address);
- mss::ecc::mainline_nce_trap::get_nce_on_rce(l_buffer, o_on_rce);
- mss::ecc::mainline_nce_trap::get_nce_is_tce(l_buffer, o_is_tce);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Mainline NCE error vector traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_galois the Galois code
-/// @param[out] o_magnitude the magnitude of the error
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_nce_error_vector_trap( const fapi2::Target<T>& i_target,
- uint64_t& o_galois,
- uint64_t& o_magnitude )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mbs_error_vector_trap::read(i_target, l_buffer) );
- mss::ecc::mbs_error_vector_trap::get_nce_galois(i_target, l_buffer, o_galois);
- mss::ecc::mbs_error_vector_trap::get_nce_magnitude(i_target, l_buffer, o_magnitude);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Mainline TCE address traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_address the trap address of the last mainline nce
-/// @param[out] o_on_rce mss::YES if nce is part of an rce
-/// @param[out] o_is_tce mss::YES if nce is a tce
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_tce_addr_trap( const fapi2::Target<T>& i_target,
- mss::mcbist::address& o_address,
- mss::states& o_on_rce,
- mss::states& o_is_tce )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mainline_nce_trap::read(i_target, l_buffer) );
- mss::ecc::mainline_nce_trap::get_address(l_buffer, o_address);
- mss::ecc::mainline_nce_trap::get_nce_on_rce(l_buffer, o_on_rce);
- mss::ecc::mainline_nce_trap::get_nce_is_tce(l_buffer, o_is_tce);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Mainline TCE error vector traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_nce_galois the Galois code
-/// @param[out] o_nce_magnitude the magnitude of the error
-/// @param[out] o_tce_galois the Galois code
-/// @param[out] o_tce_magnitude the magnitude of the error
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_tce_error_vector_trap( const fapi2::Target<T>& i_target,
- uint64_t& o_nce_galois,
- uint64_t& o_nce_magnitude,
- uint64_t& o_tce_galois,
- uint64_t& o_tce_magnitude )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mbs_error_vector_trap::read(i_target, l_buffer) );
- mss::ecc::mbs_error_vector_trap::get_nce_galois(i_target, l_buffer, o_nce_galois);
- mss::ecc::mbs_error_vector_trap::get_nce_magnitude(i_target, l_buffer, o_nce_magnitude);
- mss::ecc::mbs_error_vector_trap::get_tce_galois(i_target, l_buffer, o_tce_galois);
- mss::ecc::mbs_error_vector_trap::get_tce_magnitude(i_target, l_buffer, o_tce_magnitude);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Mainline MPE address traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_address the trap address of the last mainline mpe
-/// @param[out] o_on_rce mss::YES if mpe is part of an rce
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_mpe_addr_trap( const fapi2::Target<T>& i_target,
- mss::mcbist::address& o_address,
- mss::states& o_on_rce )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mainline_mpe_trap::read(i_target, l_buffer) );
- mss::ecc::mainline_mpe_trap::get_address(l_buffer, o_address);
- mss::ecc::mainline_mpe_trap::get_mpe_on_rce(l_buffer, o_on_rce);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Mainline RCE address traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_address the trap address of the last mainline rce
-/// @param[out] o_nce_on_rce mss::YES if nce is part of an rce
-/// @param[out] o_tce_on_rce mss::YES if tce is part of an rce
-/// @param[out] o_mpe_on_rce mss::YES if mpe is part of an rce
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_rce_addr_trap( const fapi2::Target<T>& i_target,
- mss::mcbist::address& o_address,
- mss::states& o_nce_on_rce,
- mss::states& o_tce_on_rce,
- mss::states& o_mpe_on_rce )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mainline_rce_trap::read(i_target, l_buffer) );
- mss::ecc::mainline_rce_trap::get_address(l_buffer, o_address);
-
- FAPI_TRY( mss::ecc::mainline_nce_trap::read(i_target, l_buffer) );
- mss::ecc::mainline_nce_trap::get_nce_on_rce(l_buffer, o_nce_on_rce);
- mss::ecc::mainline_nce_trap::get_nce_is_tce(l_buffer, o_tce_on_rce);
-
- FAPI_TRY( mss::ecc::mainline_mpe_trap::read(i_target, l_buffer) );
- mss::ecc::mainline_mpe_trap::get_mpe_on_rce(l_buffer, o_mpe_on_rce);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Mainline UE address traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_address the trap address of the last mainline ue
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_ue_addr_trap( const fapi2::Target<T>& i_target,
- mss::mcbist::address& o_address )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mainline_ue_trap::read(i_target, l_buffer) );
- mss::ecc::mainline_ue_trap::get_address(l_buffer, o_address);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Mainline AUE address traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_address the trap address of the last mainline aue
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_aue_addr_trap( const fapi2::Target<T>& i_target,
- mss::mcbist::address& o_address )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mainline_aue_trap::read(i_target, l_buffer) );
- mss::ecc::mainline_aue_trap::get_address(l_buffer, o_address);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get IMPE address traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_chipmark the mark location (Galois code) of the last mark placed
-/// @param[out] o_rank the rank of the last mark placed
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_impe_addr_trap( const fapi2::Target<T>& i_target,
- uint64_t& o_chipmark,
- uint64_t& o_rank )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mark_shadow_reg::read(i_target, l_buffer) );
- mss::ecc::mark_shadow_reg::get_chipmark(l_buffer, o_chipmark);
- mss::ecc::mark_shadow_reg::get_rank(l_buffer, o_rank);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Maint Current address traps
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_address the last address executed
-/// @param[out] o_port_trap port value if MCBCFGQ_cfg_current_addr_trap_update_dis == 0
-/// @param[out] o_dimm_trap dimm value if MCBCFGQ_cfg_current_addr_trap_update_dis == 0
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_maint_current_addr_trap( const fapi2::Target<T>& i_target,
- mss::mcbist::address& o_address,
- uint64_t& o_port_trap,
- uint64_t& o_dimm_trap )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::maint_current_trap::read(i_target, l_buffer) );
- mss::ecc::maint_current_trap::get_address(l_buffer, o_address);
- mss::ecc::maint_current_trap::get_port(l_buffer, o_port_trap);
- mss::ecc::maint_current_trap::get_dimm(l_buffer, o_dimm_trap);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Per Symbol Error Counts
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_error_counts vector of symbol error counts
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T, typename TT = eccTraits<T> >
-inline fapi2::ReturnCode get_per_symbol_error_counts( const fapi2::Target<T>& i_target,
- std::vector<uint64_t>& o_error_counts )
-{
- fapi2::buffer<uint64_t> l_buffer;
- uint64_t l_count = 0;
- o_error_counts.clear();
-
- for (uint64_t l_index = 0; l_index < TT::NUM_MBSSYM_REGS; ++l_index)
- {
- FAPI_TRY( mss::ecc::modal_symbol_count::read(i_target, l_index, l_buffer) );
-
- for (uint64_t l_symbol = 0; l_symbol < TT::MODAL_SYMBOL_COUNTERS_PER_REG; ++l_symbol)
- {
- l_count = 0;
- mss::ecc::modal_symbol_count::get_count(l_buffer, l_symbol, l_count);
- o_error_counts.push_back(l_count);
- }
- }
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Intermittent NCE error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of intermittent NCE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_intermittent_nce_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg0::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg0::get_intermittent_ce_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Soft NCE error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of soft NCE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_soft_nce_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg0::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg0::get_soft_ce_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Hard NCE error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of hard NCE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_hard_nce_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg0::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg0::get_hard_ce_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Intermittent MCE error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of intermittent MCE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_intermittent_mce_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg0::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg0::get_intermittent_mce_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Soft MCE error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of soft MCE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_soft_mce_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg0::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg0::get_soft_mce_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get Hard MCE error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of hard MCE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_hard_mce_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg1::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg1::get_hard_mce_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get ICE (IMPE) error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of ICE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_ice_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg1::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg1::get_ice_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get UE error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of UE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_ue_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg1::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg1::get_ue_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get AUE error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of AUE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_aue_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg1::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg1::get_aue_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get RCE error count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_count count of RCE events
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_rce_count( const fapi2::Target<T>& i_target,
- uint64_t& o_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::read_error_count_reg1::read(i_target, l_buffer) );
- mss::ecc::read_error_count_reg1::get_rce_count(l_buffer, o_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Get MCE symbol count
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @param[out] o_symbol0_count count of symbol 0 errors
-/// @param[out] o_symbol1_count count of symbol 1 errors
-/// @param[out] o_symbol2_count count of symbol 2 errors
-/// @param[out] o_symbol3_count count of symbol 3 errors
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode get_mce_symbol_count( const fapi2::Target<T>& i_target,
- uint64_t& o_symbol0_count,
- uint64_t& o_symbol1_count,
- uint64_t& o_symbol2_count,
- uint64_t& o_symbol3_count )
-{
- fapi2::buffer<uint64_t> l_buffer;
-
- FAPI_TRY( mss::ecc::mark_symbol_count_reg::read(i_target, l_buffer) );
- mss::ecc::mark_symbol_count_reg::get_symbol0_count(l_buffer, o_symbol0_count);
- mss::ecc::mark_symbol_count_reg::get_symbol1_count(l_buffer, o_symbol1_count);
- mss::ecc::mark_symbol_count_reg::get_symbol2_count(l_buffer, o_symbol2_count);
- mss::ecc::mark_symbol_count_reg::get_symbol3_count(l_buffer, o_symbol3_count);
-
-fapi_try_exit:
- return fapi2::current_err;
-}
-
-///
-/// @brief Clear all MAINT.ECC counters
-/// @tparam T the fapi2::TargetType - derived
-/// @param[in] i_target the fapi2 target
-/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS if ok
-///
-template< fapi2::TargetType T >
-inline fapi2::ReturnCode clear_all_counters( const fapi2::Target<T>& i_target )
-{
- return ( mss::mcbist::reset_errors(i_target) );
-}
-
-
-} // close namespace ecc
-
-} // close namespace mss
-
-#endif
OpenPOWER on IntegriCloud