From 15b0afe89c9109c0008a576e5bf74ca8222b6cc4 Mon Sep 17 00:00:00 2001 From: Stephen Glancy Date: Tue, 30 Jul 2019 14:07:07 -0400 Subject: Moves ecc::trap_address and fwms::address to new files Change-Id: Iac59794c4968136c41143f6518d8f5273a73ba3c Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81391 Reviewed-by: Mark Pizzutillo Reviewed-by: Louis Stermole Tested-by: FSP CI Jenkins Tested-by: Jenkins Server Tested-by: HWSV CI Dev-Ready: STEPHEN GLANCY Tested-by: Hostboot CI Reviewed-by: Jennifer A Stofer Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81407 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Reviewed-by: Christian R Geddes --- src/import/generic/memory/lib/ecc/fw_mark_store.H | 6 +- .../lib/utils/mcbist/gen_mss_mcbist_address.H | 273 --------------------- .../utils/mcbist/gen_mss_mcbist_ecc_trap_address.H | 152 ++++++++++++ .../lib/utils/mcbist/gen_mss_mcbist_fwms_address.H | 151 ++++++++++++ 4 files changed, 306 insertions(+), 276 deletions(-) (limited to 'src/import/generic') diff --git a/src/import/generic/memory/lib/ecc/fw_mark_store.H b/src/import/generic/memory/lib/ecc/fw_mark_store.H index 39f661daf..3e840c4d0 100644 --- a/src/import/generic/memory/lib/ecc/fw_mark_store.H +++ b/src/import/generic/memory/lib/ecc/fw_mark_store.H @@ -37,7 +37,7 @@ #define _MSS_FW_MARK_STORE_H_ #include -#include +#include #include #include @@ -573,9 +573,9 @@ template< fapi2::TargetType T = DEFAULT_MEM_PORT_TARGET, typename TT = eccTraits inline void get_address( const fapi2::buffer& i_data, mcbist::address& o_address ) { // construct fwms::address from i_data - const auto l_addr = address<>(uint64_t(i_data)); + const auto l_addr = mss::ecc::fwms::address<>(uint64_t(i_data)); // construct mcbist::address from fwms::address - o_address = mcbist::address(l_addr); + o_address = l_addr.operator mss::mcbist::address(); FAPI_INF("get_address: 0x%016lx", uint64_t(l_addr)); } diff --git a/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_address.H b/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_address.H index 07ac53933..b42c0e39b 100644 --- a/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_address.H +++ b/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_address.H @@ -43,62 +43,6 @@ namespace mss { -// Forward declaration - -/// -/// @class mcbistMCTraits -/// @tparam MC the mc type -/// @brief A MC to MC_TARGET_TYPE mapping -/// -template< mss::mc_type MC > -class mcbistMCTraits; - -/// -/// @class mcbistTraits -/// @tparam MC the mc type of the T -/// @tparam T the fapi2::TargetType - derived -/// @brief a collection of traits associated with the MCBIST engine or hardware -/// -template< mss::mc_type MC, fapi2::TargetType T > -class mcbistTraits; - -namespace ecc -{ - -/// -/// @class trap_address -/// @brief Converts trap address into mcbist::address -/// @tparam MC the mc type of the T -/// @tparam T fapi2 Target Type defaults to fapi2::TARGET_TYPE_MCA or TARGET_TYPE_MEM_PORT -/// @tparam TT traits type defaults to eccTraits -/// -// See declaration below -template< mss::mc_type MC = DEFAULT_MC_TYPE, fapi2::TargetType T = mss::mcbistMCTraits::FWMS_ADDR_TARGET_TYPE, typename TT = mss::eccTraits > -class trap_address; - -namespace fwms -{ - -/// -/// @class address -/// @brief Converts Firmware Mark Store ADDRESS field into mcbist::address -/// @tparam MC the mc type of the T -/// @tparam T fapi2 Target Type defaults to fapi2::TARGET_TYPE_MCA or TARGET_TYPE_MEM_PORT -/// @tparam TT traits type defaults to eccTraits -/// @note template argument defaults are in forward declaration in lib/mcbist/address.H -/// @note 12 = dimm -/// @note 13:14 = mrank -/// @note 15:17 = srank -/// @note 18:19 = bank group -/// @note 20:22 = bank -/// -// See declaration below -template< mss::mc_type MC = DEFAULT_MC_TYPE, fapi2::TargetType T = mss::mcbistMCTraits::FWMS_ADDR_TARGET_TYPE, typename TT = mss::eccTraits > -class address; - -} // close namespace fwms -} // close namespace ecc - namespace mcbist { @@ -154,39 +98,6 @@ class address { } - /// - /// @brief Construct an address from an ecc::trap_address - /// @tparam MC the mc type - /// @param[in] i_address representing an address field from a trap address - /// - template< mss::mc_type MC = DEFAULT_MC_TYPE > - address( const ecc::trap_address& i_address ) - { - this->set_field(i_address.template get_field::PORT>()); - this->set_field(i_address.template get_field::DIMM>()); - this->set_field(i_address.template get_field::MRANK>()); - this->set_field(i_address.template get_field::SRANK>()); - this->set_field(i_address.template get_field::ROW>()); - this->set_field(i_address.template get_field::COL>()); - this->set_field(i_address.template get_field::BANK>()); - this->set_field(i_address.template get_field::BANK_GROUP>()); - } - - /// - /// @brief Construct an address from an ecc::fwms::address - /// @tparam MC the mc type - /// @param[in] i_address representing an address field from a firmware mark store register - /// - template< mss::mc_type MC = DEFAULT_MC_TYPE > - address( const ecc::fwms::address& i_address ) - { - this->set_field(i_address.template get_field::DIMM>()); - this->set_field(i_address.template get_field::MRANK>()); - this->set_field(i_address.template get_field::SRANK>()); - this->set_field(i_address.template get_field::BANK_GROUP>()); - this->set_field(i_address.template get_field::BANK>()); - } - /// /// @brief Conversion operator to uint64_t /// @warn Right-aligns the address @@ -507,190 +418,6 @@ class address }; } // close namespace mcbist - -// Documented above in its declaration. -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -class ecc::fwms::address -{ - public: - // first is the start bit of the field, second is the length - using field = std::pair; - - constexpr static field DIMM = {TT::FIRMWARE_MS_ADDRESS, 1}; - constexpr static field MRANK = {TT::FIRMWARE_MS_ADDRESS + 1, 2}; - constexpr static field SRANK = {TT::FIRMWARE_MS_ADDRESS + 3, 3}; - constexpr static field BANK_GROUP = {TT::FIRMWARE_MS_ADDRESS + 6, 2}; - constexpr static field BANK = {TT::FIRMWARE_MS_ADDRESS + 8, 3}; - - address() = default; - - /// - /// @brief Construct an address from a uint64_t (scom'ed value) - /// @param[in] i_value representing raw value from FWMS register - /// - address( const uint64_t& i_value ): - iv_value(i_value) - { - } - - /// - /// @brief Construct an address from an mcbist::address - /// @param[in] i_mcbist_address mcbist formatted address - /// @note Construction of mcbist::address from ecc::fwms::address - /// @note located in mcbist::address class - /// - address( const mcbist::address& i_mcbist_address ) - { - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight - (i_mcbist_address.get_field()); - iv_value.insertFromRight(i_mcbist_address.get_field()); - } - - /// - /// @brief Conversion operator to uint64_t - /// - inline operator uint64_t() const - { - uint64_t l_temp = 0; - iv_value.extract(l_temp); - return l_temp; - } - - /// - /// @brief Get a field from an address - /// @tparam F the field to get - /// @return right-aligned uint64_t representing the value - /// - template< const field& F > - inline uint64_t get_field() const - { - uint64_t l_value = 0; - iv_value.extractToRight(l_value); - return l_value; - } - - private: - fapi2::buffer iv_value; - -}; - -using field = std::pair; -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::fwms::address::DIMM; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::fwms::address::MRANK; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::fwms::address::SRANK; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::fwms::address::BANK_GROUP; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::fwms::address::BANK; - -// Documented above in its declaration. -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -class ecc::trap_address -{ - public: - // first is the start bit of the field, second is the length - using field = std::pair; - - constexpr static field PORT = {TT::TRAP_ADDRESS_PORT, TT::TRAP_ADDRESS_PORT_LEN}; - constexpr static field DIMM = {TT::TRAP_ADDRESS_DIMM, TT::TRAP_ADDRESS_DIMM_LEN}; - constexpr static field MRANK = {TT::TRAP_ADDRESS_MRANK, TT::TRAP_ADDRESS_MRANK_LEN}; - constexpr static field SRANK = {TT::TRAP_ADDRESS_SRANK, TT::TRAP_ADDRESS_SRANK_LEN}; - constexpr static field ROW = {TT::TRAP_ADDRESS_ROW, TT::TRAP_ADDRESS_ROW_LEN}; - constexpr static field COL = {TT::TRAP_ADDRESS_COL, TT::TRAP_ADDRESS_COL_LEN}; - constexpr static field BANK = {TT::TRAP_ADDRESS_BANK, TT::TRAP_ADDRESS_BANK_LEN}; - constexpr static field BANK_GROUP = {TT::TRAP_ADDRESS_BANK_GROUP, TT::TRAP_ADDRESS_BANK_GROUP_LEN}; - - trap_address() = default; - - /// - /// @brief Construct an address from a uint64_t (scom'ed value) - /// @param[in] i_value representing raw value from FWMS register - /// - trap_address( const uint64_t& i_value ): - iv_value(i_value) - { - } - - /// - /// @brief Construct an address from an mcbist::address - /// @param[in] i_mcbist_address mcbist formatted address - /// @note Construction of mcbist::address from ecc::trap_address - /// @note located in mcbist::address class - /// - trap_address( const mcbist::address& i_mcbist_address ) - { - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight(i_mcbist_address.get_field()); - iv_value.insertFromRight - (i_mcbist_address.get_field()); - } - - /// - /// @brief Conversion operator to uint64_t - /// - inline operator uint64_t() const - { - uint64_t l_temp = 0; - iv_value.extract(l_temp); - return l_temp; - } - - /// - /// @brief Get a field from an address - /// @tparam F the field to get - /// @return right-aligned uint64_t representing the value - /// - template< const field& F > - inline uint64_t get_field() const - { - uint64_t l_value = 0; - iv_value.extractToRight(l_value); - return l_value; - } - - private: - fapi2::buffer iv_value; -}; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::trap_address::PORT; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::trap_address::DIMM; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::trap_address::MRANK; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::trap_address::SRANK; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::trap_address::ROW; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::trap_address::COL; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::trap_address::BANK; - -template< mss::mc_type MC, fapi2::TargetType T , typename TT > -constexpr field ecc::trap_address::BANK_GROUP; - } // close namespace mss #endif diff --git a/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_ecc_trap_address.H b/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_ecc_trap_address.H index 39d2f7f2e..ba8b1f47b 100644 --- a/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_ecc_trap_address.H +++ b/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_ecc_trap_address.H @@ -22,3 +22,155 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ + +/// +/// @file gen_mss_mcbist_ecc_trap_address.H +/// @brief Class for ECC trap addresses (addresses below the hash translation) +/// +// *HWP HWP Owner: Stephen Glancy +// *HWP HWP Backup: Andre Marin +// *HWP Team: Memory +// *HWP Level: 3 +// *HWP Consumed by: HB:FSP + +#ifndef _GEN_MSS_MCBIST_ECC_TRAP_ADDRESS_H_ +#define _GEN_MSS_MCBIST_ECC_TRAP_ADDRESS_H_ + +#include +#include +#include +#include +#include + +namespace mss +{ + +namespace ecc +{ + +/// +/// @class trap_address +/// @brief Converts trap address into mcbist::address +/// @tparam MC the mc type of the T +/// @tparam T fapi2 Target Type defaults to fapi2::TARGET_TYPE_MCA or TARGET_TYPE_MEM_PORT +/// @tparam TT traits type defaults to eccTraits +/// +template< mss::mc_type MC = DEFAULT_MC_TYPE, fapi2::TargetType T = mss::mcbistMCTraits::FWMS_ADDR_TARGET_TYPE, typename TT = mss::eccTraits > +class trap_address +{ + public: + // first is the start bit of the field, second is the length + using field = std::pair; + + constexpr static field PORT = {TT::TRAP_ADDRESS_PORT, TT::TRAP_ADDRESS_PORT_LEN}; + constexpr static field DIMM = {TT::TRAP_ADDRESS_DIMM, TT::TRAP_ADDRESS_DIMM_LEN}; + constexpr static field MRANK = {TT::TRAP_ADDRESS_MRANK, TT::TRAP_ADDRESS_MRANK_LEN}; + constexpr static field SRANK = {TT::TRAP_ADDRESS_SRANK, TT::TRAP_ADDRESS_SRANK_LEN}; + constexpr static field ROW = {TT::TRAP_ADDRESS_ROW, TT::TRAP_ADDRESS_ROW_LEN}; + constexpr static field COL = {TT::TRAP_ADDRESS_COL, TT::TRAP_ADDRESS_COL_LEN}; + constexpr static field BANK = {TT::TRAP_ADDRESS_BANK, TT::TRAP_ADDRESS_BANK_LEN}; + constexpr static field BANK_GROUP = {TT::TRAP_ADDRESS_BANK_GROUP, TT::TRAP_ADDRESS_BANK_GROUP_LEN}; + + trap_address() = default; + + /// + /// @brief Construct an address from a uint64_t (scom'ed value) + /// @param[in] i_value representing raw value from FWMS register + /// + trap_address( const uint64_t& i_value ): + iv_value(i_value) + { + } + + /// + /// @brief Construct an address from an mcbist::address + /// @param[in] i_mcbist_address mcbist formatted address + /// @note Construction of mcbist::address from trap_address + /// @note located in mcbist::address class + /// + trap_address( const mcbist::address& i_mcbist_address ) + { + iv_value.insertFromRight(i_mcbist_address.get_field()); + iv_value.insertFromRight(i_mcbist_address.get_field()); + iv_value.insertFromRight(i_mcbist_address.get_field()); + iv_value.insertFromRight(i_mcbist_address.get_field()); + iv_value.insertFromRight(i_mcbist_address.get_field()); + iv_value.insertFromRight(i_mcbist_address.get_field()); + iv_value.insertFromRight(i_mcbist_address.get_field()); + iv_value.insertFromRight + (i_mcbist_address.get_field()); + } + + /// + /// @brief Construct an mcbist::address from an ecc::trap_address + /// @return the mcbist::address + /// + inline operator mss::mcbist::address() const + { + mss::mcbist::address l_mcbist_address; + l_mcbist_address.set_port (this->get_field()); + l_mcbist_address.set_dimm (this->get_field()); + l_mcbist_address.set_master_rank(this->get_field()); + l_mcbist_address.set_slave_rank (this->get_field()); + l_mcbist_address.set_row (this->get_field()); + l_mcbist_address.set_column (this->get_field()); + l_mcbist_address.set_bank (this->get_field()); + l_mcbist_address.set_bank_group (this->get_field()); + return l_mcbist_address; + } + + /// + /// @brief Conversion operator to uint64_t + /// + inline operator uint64_t() const + { + uint64_t l_temp = 0; + iv_value.extract(l_temp); + return l_temp; + } + + /// + /// @brief Get a field from an address + /// @tparam F the field to get + /// @return right-aligned uint64_t representing the value + /// + template< const field& F > + inline uint64_t get_field() const + { + uint64_t l_value = 0; + iv_value.extractToRight(l_value); + return l_value; + } + + private: + fapi2::buffer iv_value; +}; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename trap_address::field trap_address::PORT; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename trap_address::field trap_address::DIMM; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename trap_address::field trap_address::MRANK; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename trap_address::field trap_address::SRANK; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename trap_address::field trap_address::ROW; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename trap_address::field trap_address::COL; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename trap_address::field trap_address::BANK; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename trap_address::field trap_address::BANK_GROUP; + + +} // close namespace ecc +} // close namespace mss +#endif diff --git a/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_fwms_address.H b/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_fwms_address.H index 407485f64..2b1bda8fe 100644 --- a/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_fwms_address.H +++ b/src/import/generic/memory/lib/utils/mcbist/gen_mss_mcbist_fwms_address.H @@ -22,3 +22,154 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ + +/// +/// @file gen_mss_mcbist_fwms_address.H +/// @brief Class for FWMS trap addresses (addresses below the hash translation) +/// +// *HWP HWP Owner: Stephen Glancy +// *HWP HWP Backup: Andre Marin +// *HWP Team: Memory +// *HWP Level: 3 +// *HWP Consumed by: HB:FSP + +#ifndef _GEN_MSS_MCBIST_FWMS_ADDRESS_H_ +#define _GEN_MSS_MCBIST_FWMS_ADDRESS_H_ + +#include +#include +#include +#include +#include + +namespace mss +{ + +namespace ecc +{ + +namespace fwms +{ + +/// +/// @class address +/// @brief Converts Firmware Mark Store ADDRESS field into mcbist::address +/// @tparam MC the mc type of the T +/// @tparam T fapi2 Target Type defaults to fapi2::TARGET_TYPE_MCA or TARGET_TYPE_MEM_PORT +/// @tparam TT traits type defaults to eccTraits +/// @note template argument defaults are in forward declaration in lib/mcbist/address.H +/// @note 12 = dimm +/// @note 13:14 = mrank +/// @note 15:17 = srank +/// @note 18:19 = bank group +/// @note 20:22 = bank +/// +// See declaration below +template< mss::mc_type MC = DEFAULT_MC_TYPE, fapi2::TargetType T = mss::mcbistMCTraits::FWMS_ADDR_TARGET_TYPE, typename TT = mss::eccTraits > +class address +{ + public: + // first is the start bit of the field, second is the length + using field = std::pair; + + constexpr static field DIMM = {TT::FIRMWARE_MS_ADDRESS, 1}; + constexpr static field MRANK = {TT::FIRMWARE_MS_ADDRESS + 1, 2}; + constexpr static field SRANK = {TT::FIRMWARE_MS_ADDRESS + 3, 3}; + constexpr static field BANK_GROUP = {TT::FIRMWARE_MS_ADDRESS + 6, 2}; + constexpr static field BANK = {TT::FIRMWARE_MS_ADDRESS + 8, 3}; + + address() = default; + + /// + /// @brief Construct an address from a uint64_t (scom'ed value) + /// @param[in] i_value representing raw value from FWMS register + /// + address( const uint64_t& i_value ): + iv_value(i_value) + { + } + + /// + /// @brief Construct an address from an mcbist::address + /// @param[in] i_mcbist_address mcbist formatted address + /// @note Construction of mcbist::address from address + /// @note located in mcbist::address class + /// + address( const mss::mcbist::address& i_mcbist_address ) + { + iv_value.insertFromRight(i_mcbist_address.get_dimm()); + iv_value.insertFromRight(i_mcbist_address.get_master_rank()); + iv_value.insertFromRight(i_mcbist_address.get_slave_rank()); + iv_value.insertFromRight(i_mcbist_address.get_bank_group()); + iv_value.insertFromRight(i_mcbist_address.get_bank()); + } + + /// + /// @brief Construct an address from an ecc::fwms::address + /// @tparam MC the mc type + /// @param[in] i_address representing an address field from a firmware mark store register + /// + + /// + /// @brief Construct an mcbist::address from an ecc::fwms::address + /// @return the mcbist::address + /// + inline operator mss::mcbist::address() const + { + mss::mcbist::address l_mcbist_address; + l_mcbist_address.set_dimm (this->get_field()); + l_mcbist_address.set_master_rank(this->get_field()); + l_mcbist_address.set_slave_rank (this->get_field()); + l_mcbist_address.set_bank_group (this->get_field()); + l_mcbist_address.set_bank (this->get_field()); + return l_mcbist_address; + } + + /// + /// @brief Conversion operator to uint64_t + /// + inline operator uint64_t() const + { + uint64_t l_temp = 0; + iv_value.extract(l_temp); + return l_temp; + } + + /// + /// @brief Get a field from an address + /// @tparam F the field to get + /// @return right-aligned uint64_t representing the value + /// + template< const field& F > + inline uint64_t get_field() const + { + uint64_t l_value = 0; + iv_value.extractToRight(l_value); + return l_value; + } + + private: + fapi2::buffer iv_value; + +}; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename address::field address::DIMM; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename address::field address::MRANK; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename address::field address::SRANK; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename address::field address::BANK_GROUP; + +template< mss::mc_type MC, fapi2::TargetType T , typename TT > +constexpr typename address::field address::BANK; + + +} // close namespace fwms +} // close namespace ecc +} // close namespace mss +#endif -- cgit v1.2.1