From 4f0098cf3ce33d08a1b6a4afcfdec558d240a044 Mon Sep 17 00:00:00 2001 From: Prasad Bg Ranganath Date: Sun, 1 Jul 2018 12:30:25 -0500 Subject: PPB:Compute safe mode Freq and Volt calculation during runtime Change-Id: I66943612e85c59590d7cdf4270c9f4a27f7481eb CQ:SW435482 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/61718 Tested-by: Jenkins Server Tested-by: Hostboot CI Reviewed-by: Prem Shanker Jha Reviewed-by: Jennifer A. Stofer Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/61722 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Reviewed-by: Christian R. Geddes Disable-CI: Christian R. Geddes --- .../p9/procedures/hwp/pm/p9_pm_pstate_gpe_init.C | 10 +++++ .../procedures/hwp/pm/p9_pstate_parameter_block.C | 44 ++++++++++++++++------ 2 files changed, 43 insertions(+), 11 deletions(-) (limited to 'src/import/chips/p9/procedures/hwp/pm') diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_pm_pstate_gpe_init.C b/src/import/chips/p9/procedures/hwp/pm/p9_pm_pstate_gpe_init.C index 8483b9308..b4ac2bf3e 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_pm_pstate_gpe_init.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_pm_pstate_gpe_init.C @@ -312,6 +312,8 @@ fapi2::ReturnCode pstate_gpe_reset( uint32_t l_timeout_in_MS = 100; std::vector l_pgpe_base_addr; l_pgpe_base_addr.push_back( PGPE_BASE_ADDRESS ); + fapi2::ATTR_SAFE_MODE_FREQUENCY_MHZ_Type l_safe_mode_freq_mhz = 0; + fapi2::ATTR_SAFE_MODE_VOLTAGE_MV_Type l_safe_mode_mv = 0; FAPI_IMP(">> pstate_gpe_reset..."); @@ -364,6 +366,14 @@ fapi2::ReturnCode pstate_gpe_reset( l_data64.flush<0>().clearBit(); FAPI_TRY(putScom(i_target, PU_OCB_OCI_OCCS2_SCOM, l_data64)); + + //Reset safe mode attributes + FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SAFE_MODE_FREQUENCY_MHZ, + i_target, l_safe_mode_freq_mhz)); + FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SAFE_MODE_VOLTAGE_MV, + i_target, l_safe_mode_mv)); + + fapi_try_exit: FAPI_IMP("<< pstate_gpe_reset..."); return fapi2::current_err; 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 9dee852b2..083b76663 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 @@ -659,18 +659,40 @@ p9_pstate_parameter_block( const fapi2::Target& i_ l_localppb.ext_biases[i] = l_vpdbias[i]; l_localppb.int_biases[i] = l_vpdbias[i]; } + if (!attr.attr_pm_safe_voltage_mv && + !attr.attr_pm_safe_frequency_mhz) + { + uint8_t l_ps_pstate = 0; + Safe_mode_parameters l_safe_mode_values; + uint32_t l_ps_freq_khz = + l_operating_points[VPD_PT_SET_BIASED][POWERSAVE].frequency_mhz * 1000; + freq2pState(&l_globalppb, l_ps_freq_khz, &l_ps_pstate); + //Compute safe mode values + FAPI_TRY(p9_pstate_safe_mode_computation ( + i_target, + l_operating_points, + revle32(l_globalppb.reference_frequency_khz), + revle32(l_globalppb.frequency_step_khz), + l_ps_pstate, + &l_safe_mode_values, + l_poundw_data), + "Error from p9_pstate_safe_mode_computation function"); - // safe_voltage_mv - l_globalppb.safe_voltage_mv = revle32(attr.attr_pm_safe_voltage_mv); - - // safe_frequency_khz - l_globalppb.safe_frequency_khz = - revle32(attr.attr_pm_safe_frequency_mhz * 1000); - FAPI_INF("Safe Mode Frequency %d (0x%X) kHz; Voltage %d (0x%X) mV", - revle32(l_globalppb.safe_frequency_khz), - revle32(l_globalppb.safe_frequency_khz), - revle32(l_globalppb.safe_voltage_mv), - revle32(l_globalppb.safe_voltage_mv)); + } + else + { + // safe_voltage_mv + l_globalppb.safe_voltage_mv = revle32(attr.attr_pm_safe_voltage_mv); + + // safe_frequency_khz + l_globalppb.safe_frequency_khz = + revle32(attr.attr_pm_safe_frequency_mhz * 1000); + FAPI_INF("Safe Mode Frequency %d (0x%X) kHz; Voltage %d (0x%X) mV", + revle32(l_globalppb.safe_frequency_khz), + revle32(l_globalppb.safe_frequency_khz), + revle32(l_globalppb.safe_voltage_mv), + revle32(l_globalppb.safe_voltage_mv)); + } // ---------------- // get Resonant clocking attributes -- cgit v1.2.1