summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/pm
diff options
context:
space:
mode:
authorPrasad Bg Ranganath <prasadbgr@in.ibm.com>2018-07-01 12:30:25 -0500
committerChristian R. Geddes <crgeddes@us.ibm.com>2018-07-20 13:27:52 -0500
commit4f0098cf3ce33d08a1b6a4afcfdec558d240a044 (patch)
tree359b500b2c172577ad2ca876afd39849ae4414af /src/import/chips/p9/procedures/hwp/pm
parent9f49d11b83bfbc8c626474262ccaac4560ba0947 (diff)
downloadtalos-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.C10
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C44
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
OpenPOWER on IntegriCloud