From d86c20f59ea1d977b0eb2ed7e2acf911ac037356 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Tue, 24 Apr 2018 21:13:30 -0500 Subject: Cap voltage offset when biased This fixes spurious (invalid) voltage requests when the bias frequency exceeds the maximum WoF frequency Signed-off-by: Timothy Pearson --- src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 7889f7045..413c340b0 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 @@ -1793,11 +1793,15 @@ uint32_t PlatPmPPB::ps2v_mv(const Pstate i_pstate) FAPI_INF ("l_SlopeValue %x",l_SlopeValue); - uint32_t x = (l_SlopeValue * (-i_pstate + iv_operating_points[VPD_PT_SET_BIASED_SYSP][region_start].pstate)); + int32_t x_candidate = (l_SlopeValue * (-i_pstate + iv_operating_points[VPD_PT_SET_BIASED_SYSP][region_start].pstate)); + uint32_t x = 0; uint32_t y = x >> VID_SLOPE_FP_SHIFT_12; + if (x_candidate > 0) + x = x_candidate; + uint32_t l_vdd = - (((l_SlopeValue * (-i_pstate + iv_operating_points[VPD_PT_SET_BIASED_SYSP][region_start].pstate)) >> VID_SLOPE_FP_SHIFT_12) + ((x >> VID_SLOPE_FP_SHIFT_12) + (iv_operating_points[VPD_PT_SET_BIASED_SYSP][region_start].vdd_mv)); // Round up -- cgit v1.2.1