diff options
author | Prasad Bg Ranganath <prasadbgr@in.ibm.com> | 2018-07-01 12:30:25 -0500 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2018-07-20 13:27:52 -0500 |
commit | 4f0098cf3ce33d08a1b6a4afcfdec558d240a044 (patch) | |
tree | 359b500b2c172577ad2ca876afd39849ae4414af /src/import/chips/p9/procedures/hwp/pm | |
parent | 9f49d11b83bfbc8c626474262ccaac4560ba0947 (diff) | |
download | talos-hostboot-4f0098cf3ce33d08a1b6a4afcfdec558d240a044.tar.gz talos-hostboot-4f0098cf3ce33d08a1b6a4afcfdec558d240a044.zip |
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 <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/61722
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Disable-CI: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/pm')
-rw-r--r-- | src/import/chips/p9/procedures/hwp/pm/p9_pm_pstate_gpe_init.C | 10 | ||||
-rw-r--r-- | src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C | 44 |
2 files changed, 43 insertions, 11 deletions
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<uint64_t> 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<p9hcd::PGPE_ACTIVE>(); 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<fapi2::TARGET_TYPE_PROC_CHIP>& 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 |