summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
diff options
context:
space:
mode:
authorStephen Glancy <sglancy@us.ibm.com>2018-11-08 17:01:16 -0600
committerChristian R. Geddes <crgeddes@us.ibm.com>2019-02-13 19:50:23 -0600
commitb8427c4aa0721c64137494aad82b5cb7ca012bd4 (patch)
tree95fa9100791d40e84f21ee4c6cfa881c9ab7ddcc /src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
parent3ba6748d3f2c361ca1649ba7ec88150fc285274a (diff)
downloadtalos-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-xsrc/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C92
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
///
OpenPOWER on IntegriCloud