From cc250127bd615861932ed23f7e55c61fa90b7fec Mon Sep 17 00:00:00 2001 From: Greg Still Date: Fri, 13 Apr 2018 07:04:10 -0500 Subject: PM: fix Core floor being below PowerSave for boot/safe voltage Key_Cronus_Test=PM_REGRESS Change-Id: Id7651266a11af04c5d05ec4080f7901b7a64a742 CQ: SW424899 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57355 Tested-by: FSP CI Jenkins Tested-by: Jenkins Server Tested-by: Hostboot CI Tested-by: Cronus HW CI Reviewed-by: AMIT J. TENDOLKAR Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA Reviewed-by: Jennifer A. Stofer Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57364 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Reviewed-by: Christian R. Geddes --- .../procedures/hwp/pm/p9_pstate_parameter_block.C | 60 ++++++++++++++-------- 1 file changed, 39 insertions(+), 21 deletions(-) (limited to 'src/import') diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C b/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C index 02b7cb39d..1b1c4f113 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C @@ -150,9 +150,6 @@ uint8_t g_sysvfrtData[] = {0x56, 0x54, // Magic_code 2B) 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA5, 0xA5, 0xA1, 0x9D, 0x9A }; - - - #define VALIDATE_VID_VALUES(w,x,y,z,state) \ if (!((w <= x) && (x <= y) && (y <= z))) \ {state = 0;} @@ -180,7 +177,6 @@ uint8_t g_sysvfrtData[] = {0x56, 0x54, // Magic_code 2B) if ( ((!a) || (!b) || (!c) || (!d) || (!e) || (!f) || (!g))) \ {state = 0; } - double internal_ceil(double x) { if ((x-(int)(x))>0) return (int)x+1; @@ -816,12 +812,12 @@ p9_pstate_parameter_block( const fapi2::Target& i_ Pstate l_ps; //Translate safe mode frequency to pstate - freq2pState(&l_globalppb, - revle32(attr.attr_pm_safe_frequency_mhz * 1000), + freq2pState(&l_globalppb, + revle32(attr.attr_pm_safe_frequency_mhz * 1000), &l_ps, ROUND_FAST); //Compute real frequency - l_occppb.frequency_min_khz = l_globalppb.reference_frequency_khz - + l_occppb.frequency_min_khz = l_globalppb.reference_frequency_khz - (l_ps * l_globalppb.frequency_step_khz); // frequency_max_khz - Value from Ultra Turbo operating point after biases @@ -1559,7 +1555,7 @@ proc_get_mvpd_iddq( const fapi2::Target& i_target, //if yes then initialized to 0 for (int i = 0; i < IDDQ_MEASUREMENTS; ++i) { - if ( io_iddqt->ivdd_all_cores_off_caches_off[i] & 0x8000) + if ( io_iddqt->ivdd_all_cores_off_caches_off[i] & 0x8000) { io_iddqt->ivdd_all_cores_off_caches_off[i] = 0; } @@ -4911,6 +4907,8 @@ p9_pstate_safe_mode_computation(const fapi2::Target i_reference_freq) + if ((l_core_floor_mhz*1000) > i_reference_freq) { FAPI_ERR("Core floor frequency %08x is greater than UltraTurbo frequency %08x", - (l_safe_mode_values.safe_op_freq_mhz*1000), i_reference_freq); + (l_core_floor_mhz*1000), i_reference_freq); FAPI_ASSERT(false, fapi2::PSTATE_PB_CORE_FLOOR_FREQ_GT_UT_FREQ() .set_CHIP_TARGET(i_target) - .set_CORE_FLOOR_FREQ(l_safe_mode_values.safe_op_freq_mhz*1000) + .set_CORE_FLOOR_FREQ(l_core_floor_mhz*1000) .set_UT_FREQ(i_reference_freq), "Core floor freqency is greater than UltraTurbo frequency"); } @@ -4946,21 +4944,41 @@ p9_pstate_safe_mode_computation(const fapi2::Target l_op_pt) + { + FAPI_INF("Core floor greater that POWERSAVE"); + l_safe_mode_values.safe_op_freq_mhz = l_core_floor_mhz; + } + else + { + FAPI_INF("Core floor less than or equal to POWERSAVE"); + l_safe_mode_values.safe_op_freq_mhz = l_op_pt; + } + + FAPI_INF ("safe_mode_values.safe_op_freq_mhz 0%08x (%d)", + l_safe_mode_values.safe_op_freq_mhz, + l_safe_mode_values.safe_op_freq_mhz); + // Calculate safe operational pstate. This must be rounded down to create // a faster Pstate than the floor l_safe_mode_values.safe_op_ps = ((float)(i_reference_freq) - (float)(l_safe_mode_values.safe_op_freq_mhz * 1000)) / (float)i_step_frequency; - l_safe_mode_op_ps2freq_mhz = (i_reference_freq - (l_safe_mode_values.safe_op_ps * i_step_frequency)) / 1000; @@ -4972,7 +4990,6 @@ p9_pstate_safe_mode_computation(const fapi2::Target