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-01-16 15:42:54 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-06-14 16:53:04 -0400
commit772291f30ccfe843f585c6bf9e23e6b1c9b13813 (patch)
tree85b0e57027ba5bbb59ddb4661e3dceaacedf2a97 /src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
parent389c4cfbe086a04f9a05eba9f516d04402a9b360 (diff)
downloadtalos-hostboot-772291f30ccfe843f585c6bf9e23e6b1c9b13813.tar.gz
talos-hostboot-772291f30ccfe843f585c6bf9e23e6b1c9b13813.zip
Fix tREFI calculation to use MRW REFRESH REQUEST RATE as opposed to TEMP RANGE
Reverting to P8 attribute used to calculate tREFI. Lab request expects to use MRW REFRESH REQUEST RATE since it has more enum options to control refresh range and assure we are in SPEC. Change-Id: Ibdb6023c60fdf000f642becb53513ecaaf88aa15 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/35003 Reviewed-by: Michael D. Pardeik <pardeik@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Matt K. Light <mklight@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/35435 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@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.C18
1 files changed, 15 insertions, 3 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 06ee66044..1c7055e4b 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
@@ -636,7 +636,7 @@ fapi2::ReturnCode eff_dimm::dram_trefi()
case fapi2::ENUM_ATTR_MSS_MRW_FINE_REFRESH_MODE_NORMAL:
FAPI_TRY( calc_trefi( mss::refresh_rate::REF1X,
- iv_temp_refresh_range,
+ iv_refresh_rate_request,
l_trefi_in_ps),
"Failed to calculate tREF1 for target %s", mss::c_str(iv_dimm) );
break;
@@ -645,7 +645,7 @@ fapi2::ReturnCode eff_dimm::dram_trefi()
case fapi2::ENUM_ATTR_MSS_MRW_FINE_REFRESH_MODE_FLY_2X:
FAPI_TRY( calc_trefi( mss::refresh_rate::REF2X,
- iv_temp_refresh_range,
+ iv_refresh_rate_request,
l_trefi_in_ps),
"Failed to calculate tREF2 for target %s", mss::c_str(iv_dimm) );
break;
@@ -654,7 +654,7 @@ fapi2::ReturnCode eff_dimm::dram_trefi()
case fapi2::ENUM_ATTR_MSS_MRW_FINE_REFRESH_MODE_FLY_4X:
FAPI_TRY( calc_trefi( mss::refresh_rate::REF4X,
- iv_temp_refresh_range,
+ iv_refresh_rate_request,
l_trefi_in_ps),
"Failed to calculate tREF4 for target %s", mss::c_str(iv_dimm) );
break;
@@ -674,7 +674,9 @@ fapi2::ReturnCode eff_dimm::dram_trefi()
{
// Calculate refresh cycle time in nCK & set attribute
+ constexpr double PERCENT_ADJUST = 0.999;
std::vector<uint16_t> l_mcs_attrs_trefi(PORTS_PER_MCS, 0);
+
uint64_t l_trefi_in_nck = 0;
// Retrieve MCS attribute data
@@ -687,6 +689,16 @@ fapi2::ReturnCode eff_dimm::dram_trefi()
l_trefi_in_nck),
"Error in calculating tREFI for target %s, with value of l_trefi_in_ps: %d", mss::c_str(iv_dimm), l_trefi_in_ps);
+ // Per Mike P., requested 99.9% of tREFI calculation to avoid any latency impact and violation of any
+ // refresh specification (across all number of ranks and frequencies) observed during lab tests.
+
+ FAPI_INF("For %s, adjusting tREFI calculation by 99.9%, calculated tREFI (nck): %lu, adjusted tREFI (nck): %lu,",
+ mss::c_str(iv_dimm), l_trefi_in_nck, l_trefi_in_nck * PERCENT_ADJUST);
+
+ // The compiler does this under the covers but just to be explicit on intent:
+ // Floating point arithmetic and truncation of result saved to an unsigned integer
+ l_trefi_in_nck = static_cast<double>(l_trefi_in_nck * PERCENT_ADJUST);
+
FAPI_INF("tCK (ps): %d, tREFI (ps): %d, tREFI (nck): %d",
iv_tCK_in_ps, l_trefi_in_ps, l_trefi_in_nck);
OpenPOWER on IntegriCloud