summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
diff options
context:
space:
mode:
authorAndre Marin <aamarin@us.ibm.com>2017-08-30 10:42:08 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-09-25 22:16:03 -0400
commit7085e6bb6afc0c22ac6b0bb5f2e67b59d1d0f993 (patch)
tree2a1d0a417eaa76579f20123c213810b57829705e /src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
parent84e9979022484372224d5b1a4ed44d7d2989bfe3 (diff)
downloadtalos-hostboot-7085e6bb6afc0c22ac6b0bb5f2e67b59d1d0f993.tar.gz
talos-hostboot-7085e6bb6afc0c22ac6b0bb5f2e67b59d1d0f993.zip
Add Write CRC attributes to xml and eff_dimm
Added ATTR_EFF_PACKAGE_RANK_MAP, ATTR_EFF_NIBBLE_MAP, and ATTR_MSS_EFF_WR_CRC attributes. Change-Id: Ib665e22ce755282afb012ca0df9c670770fa1dd6 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45386 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Louis Stermole <stermole@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Matt K. Light <mklight@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com> Dev-Ready: ANDRE A. MARIN <aamarin@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45406 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C')
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C90
1 files changed, 90 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 1e5706714..097ffc26c 100644
--- 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
@@ -3374,6 +3374,96 @@ fapi_try_exit:
}
///
+/// @brief Determines & sets effective config for nibble
+/// @return fapi2::FAPI2_RC_SUCCESS if okay
+///
+fapi2::ReturnCode eff_dimm::nibble_map()
+{
+ uint8_t l_attr[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_DQ_NIBBLES] = {};
+
+ std::vector<uint8_t> l_nibble_bitmap;
+ FAPI_TRY( iv_pDecoder->nibble_map(l_nibble_bitmap) );
+
+ // Sanity check we retrieved a vector w/the right size
+ FAPI_ASSERT( l_nibble_bitmap.size() == MAX_DQ_NIBBLES,
+ fapi2::MSS_UNEXPECTED_VALUE_SEEN().
+ set_TARGET(iv_dimm).
+ set_EXPECTED(MAX_DQ_NIBBLES).
+ set_ACTUAL(l_nibble_bitmap.size()).
+ set_FUNCTION(NIBBLE_MAP_FUNC),
+ "Expected vector size %d, actual size %d for %s",
+ MAX_DQ_NIBBLES, l_nibble_bitmap.size(), mss::c_str(iv_dimm) );
+
+ // Get & update MCS attribute
+ FAPI_TRY( eff_nibble_map(iv_mcs, &l_attr[0][0][0]) );
+
+ memcpy(&(l_attr[iv_port_index][iv_dimm_index][0]), l_nibble_bitmap.data(), MAX_DQ_NIBBLES);
+
+ FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_NIBBLE_MAP, iv_mcs, l_attr),
+ "Failed setting attribute ATTR_EFF_NIBBLE_MAP for %s", mss::c_str(iv_mcs));
+
+fapi_try_exit:
+ return fapi2::current_err;
+}
+
+///
+/// @brief Determines & sets effective config for the package rank map
+/// @return fapi2::FAPI2_RC_SUCCESS if okay
+///
+fapi2::ReturnCode eff_dimm::package_rank_map()
+{
+ uint8_t l_attr[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_DQ_NIBBLES] = {};
+
+ std::vector<uint8_t> l_package_rank_map;
+ FAPI_TRY( iv_pDecoder->package_rank_map(l_package_rank_map) );
+
+ // Sanity check we retrieved a vector w/the right size
+ FAPI_ASSERT( l_package_rank_map.size() == MAX_DQ_NIBBLES,
+ fapi2::MSS_UNEXPECTED_VALUE_SEEN().
+ set_TARGET(iv_dimm).
+ set_EXPECTED(MAX_DQ_NIBBLES).
+ set_ACTUAL(l_package_rank_map.size()).
+ set_FUNCTION(PACKAGE_RANK_MAP_FUNC),
+ "Expected vector size %d, actual size %d for %s",
+ MAX_DQ_NIBBLES, l_package_rank_map.size(), mss::c_str(iv_dimm) );
+
+ // Get & update MCS attribute
+ FAPI_TRY( eff_package_rank_map(iv_mcs, &l_attr[0][0][0]) );
+
+ memcpy(&(l_attr[iv_port_index][iv_dimm_index][0]), l_package_rank_map.data(), MAX_DQ_NIBBLES);
+
+ FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_PACKAGE_RANK_MAP, iv_mcs, l_attr),
+ "Failed setting attribute ATTR_EFF_PACKAGE_RANK_MAP for %s", mss::c_str(iv_mcs));
+
+fapi_try_exit:
+ return fapi2::current_err;
+}
+
+///
+/// @brief Determines & sets effective config for the wr_crc
+/// @return fapi2::FAPI2_RC_SUCCESS if okay
+/// @warning eff_package_rank_map must be set before calling this method
+///
+fapi2::ReturnCode eff_dimm::wr_crc()
+{
+ uint8_t l_attr[PORTS_PER_MCS] = {};
+
+ // Get & update MCS attribute
+ FAPI_TRY( eff_wr_crc(iv_mcs, &l_attr[0]) );
+
+ // By default write CRC will be disabled. For us to actually enable it in a product,
+ // we'd have to be taking more bit flips on the write data interface than scrub can keep up with,
+ // plus we'd have to take the performance hit of enabling it... so pretty high bar to enable it.
+ l_attr[iv_port_index] = fapi2::ENUM_ATTR_MSS_EFF_WR_CRC_DISABLE;
+
+ FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_MSS_EFF_WR_CRC, iv_mcs, l_attr),
+ "Failed setting attribute ATTR_MSS_EFF_WR_CRC for %s", mss::c_str(iv_mcs));
+
+fapi_try_exit:
+ return fapi2::current_err;
+}
+
+///
/// @brief Determines & sets effective config for tRRD_S
/// @return fapi2::FAPI2_RC_SUCCESS if okay
///
OpenPOWER on IntegriCloud