diff options
author | Stephen Glancy <sglancy@us.ibm.com> | 2018-11-08 17:01:16 -0600 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2019-02-13 19:50:23 -0600 |
commit | b8427c4aa0721c64137494aad82b5cb7ca012bd4 (patch) | |
tree | 95fa9100791d40e84f21ee4c6cfa881c9ab7ddcc /src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C | |
parent | 3ba6748d3f2c361ca1649ba7ec88150fc285274a (diff) | |
download | talos-hostboot-b8427c4aa0721c64137494aad82b5cb7ca012bd4.tar.gz talos-hostboot-b8427c4aa0721c64137494aad82b5cb7ca012bd4.zip |
Updates MCA write and read timings
Allows LRDIMM's to pass MCBIST writes and reads
Updates initfile code to use new attributes
Change-Id: I69c19bdc66ca3ab1ace61bbc49101f6ca8267065
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/68568
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: ANDRE A. MARIN <aamarin@us.ibm.com>
Reviewed-by: Louis Stermole <stermole@us.ibm.com>
Dev-Ready: STEPHEN GLANCY <sglancy@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/68573
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C')
-rwxr-xr-x | src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C index 1968516fc..287be1eb5 100755 --- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C +++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C @@ -5966,6 +5966,98 @@ fapi_try_exit: } /// +/// @brief Determines & sets effective PHY RLO values +/// @return fapi2::FAPI2_RC_SUCCESS if okay +/// +fapi2::ReturnCode eff_rdimm::phy_rlo() +{ + uint8_t l_mcs_attr[PORTS_PER_MCS] = {}; + uint8_t l_vpd = 0; + + // Gets the VPD value + FAPI_TRY( mss::vpd_mr_dphy_rlo(iv_mca, l_vpd)); + FAPI_TRY( eff_dphy_rlo( iv_mcs, &(l_mcs_attr[0])) ); + + // Sets up the value + l_mcs_attr[iv_port_index] = l_vpd; + + FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_MSS_EFF_DPHY_RLO, iv_mcs, l_mcs_attr) ); + +fapi_try_exit: + return fapi2::current_err; +} + +/// +/// @brief Determines & sets effective PHY RLO values +/// @return fapi2::FAPI2_RC_SUCCESS if okay +/// +fapi2::ReturnCode eff_lrdimm::phy_rlo() +{ + constexpr uint8_t LR_OFFSET = 1; + constexpr uint8_t RLO_MAX = 7; + uint8_t l_mcs_attr[PORTS_PER_MCS] = {}; + uint8_t l_vpd = 0; + + // Gets the VPD value + FAPI_TRY( mss::vpd_mr_dphy_rlo(iv_mca, l_vpd)); + FAPI_TRY( eff_dphy_rlo( iv_mcs, &(l_mcs_attr[0])) ); + + // Sets up the value - ensure we don't have a rollover case + l_mcs_attr[iv_port_index] = std::min(uint8_t(l_vpd + LR_OFFSET), RLO_MAX); + + FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_MSS_EFF_DPHY_RLO, iv_mcs, l_mcs_attr) ); + +fapi_try_exit: + return fapi2::current_err; +} + +/// +/// @brief Determines & sets effective PHY WLO values +/// @return fapi2::FAPI2_RC_SUCCESS if okay +/// +fapi2::ReturnCode eff_rdimm::phy_wlo() +{ + uint8_t l_mcs_attr[PORTS_PER_MCS] = {}; + uint8_t l_vpd = 0; + + // Gets the VPD value + FAPI_TRY( mss::vpd_mr_dphy_wlo(iv_mca, l_vpd)); + FAPI_TRY( eff_dphy_wlo( iv_mcs, &(l_mcs_attr[0])) ); + + // Sets up the value + l_mcs_attr[iv_port_index] = l_vpd; + + FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_MSS_EFF_DPHY_WLO, iv_mcs, l_mcs_attr) ); + +fapi_try_exit: + return fapi2::current_err; +} + +/// +/// @brief Determines & sets effective PHY WLO values +/// @return fapi2::FAPI2_RC_SUCCESS if okay +/// +fapi2::ReturnCode eff_lrdimm::phy_wlo() +{ + constexpr uint8_t LR_OFFSET = 2; + uint8_t l_mcs_attr[PORTS_PER_MCS] = {}; + uint8_t l_vpd = 0; + + // Gets the VPD value + FAPI_TRY( mss::vpd_mr_dphy_wlo(iv_mca, l_vpd)); + FAPI_TRY( eff_dphy_wlo( iv_mcs, &(l_mcs_attr[0])) ); + + // Sets up the value - ensure we don't have an underflow case + l_mcs_attr[iv_port_index] = (l_vpd < LR_OFFSET) ? 0 : (l_vpd - LR_OFFSET); + + FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_MSS_EFF_DPHY_WLO, iv_mcs, l_mcs_attr) ); + +fapi_try_exit: + return fapi2::current_err; +} + + +/// /// @brief Determines & sets effective ODT read values /// @return fapi2::FAPI2_RC_SUCCESS if okay /// |