summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C
diff options
context:
space:
mode:
authorPrasad Bg Ranganath <prasadbgr@in.ibm.com>2017-07-03 12:30:01 -0500
committerDean Sanner <dsanner@us.ibm.com>2017-07-11 06:24:03 -0400
commitad62efb318aebf528b12a2ec934b9f86c33e1572 (patch)
tree22c72d9642267e053c2958ef4932890dff6efd37 /src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C
parentb509872c38eb60a7311d0068055953060cdf2fbc (diff)
downloadtalos-hostboot-ad62efb318aebf528b12a2ec934b9f86c33e1572.tar.gz
talos-hostboot-ad62efb318aebf528b12a2ec934b9f86c33e1572.zip
PSTATE_PARAMETER_BLOCK structure alignment and error handling
- Add VDM EC attribute to generally disable VDMs on Nimbus DD1 Change-Id: I7743bbff9c8f975074068d760373b8b9b8294d32 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42714 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Adam S. Hale <adam.samuel.hale@ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42715 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Dean Sanner <dsanner@us.ibm.com> Tested-by: Dean Sanner <dsanner@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C')
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_pstate_parameter_block.C265
1 files changed, 159 insertions, 106 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 992a0c620..43c3298a1 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
@@ -144,6 +144,18 @@ uint8_t g_sysvfrtData[] = {0x56, 0x54, 0x00, 0x00, 0x02, 0x01, 0x01, 0x06, /// V
// Struct Variable for all attributes
AttributeList attr;
+bool
+is_wof_enabled()
+{
+ return (!(attr.attr_system_wof_disable) && !(attr.attr_dd_wof_not_supported)) ? true : false;
+}
+
+bool
+is_vdm_enabled()
+{
+ return (!(attr.attr_system_vdm_disable) && !(attr.attr_dd_vdm_not_supported)) ? true : false;
+}
+
// START OF PSTATE PARAMETER BLOCK function
/// -------------------------------------------------------------------
@@ -208,6 +220,9 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
SysPowerDistParms l_vdd_sysparm;
SysPowerDistParms l_vcs_sysparm;
SysPowerDistParms l_vdn_sysparm;
+ memset(&l_vdd_sysparm,0x00,sizeof(SysPowerDistParms));
+ memset(&l_vcs_sysparm,0x00,sizeof(SysPowerDistParms));
+ memset(&l_vdn_sysparm,0x00,sizeof(SysPowerDistParms));
// Local IDDQ table variable
IddqTable l_iddqt;
@@ -218,14 +233,18 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
//VDM Parm block
GP_VDMParmBlock l_gp_vdmpb;
+ memset (&l_gp_vdmpb,0x00,sizeof(GP_VDMParmBlock));
LP_VDMParmBlock l_lp_vdmpb;
+ memset (&l_lp_vdmpb, 0x00, sizeof(LP_VDMParmBlock));
//Resonant Clocking setup
ResonantClockingSetup l_resclk_setup;
+ memset (&l_resclk_setup,0x00, sizeof(ResonantClockingSetup));
//IVRM Parm block
IvrmParmBlock l_ivrmpb;
+ memset (&l_ivrmpb, 0x00,sizeof(IvrmParmBlock));
// VPD voltage and frequency biases
VpdBias l_vpdbias[NUM_OP_POINTS];
@@ -252,7 +271,6 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
break;
}
-
// ----------------
// get #V data
// ----------------
@@ -264,17 +282,9 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
fapi2::voltageBucketData_t l_poundv_data;
- l_rc = proc_get_mvpd_data( i_target, attr_mvpd_voltage_control, &valid_pdv_points, &present_chiplets,
- l_poundv_bucketId, &l_poundv_data, &l_state);
-
- if(l_rc)
- {
- FAPI_ASSERT(false,
- fapi2::PSTATE_PB_GET_MVPD_FOR_POUND_V_FAILED()
- .set_CHIP_TARGET(i_target)
- .set_PRESENT_CHIPLETS(present_chiplets),
- "proc_get_mvpd_data function failed to retrieve porund V data");
- }
+ FAPI_TRY(proc_get_mvpd_data( i_target, attr_mvpd_voltage_control, &valid_pdv_points, &present_chiplets,
+ l_poundv_bucketId, &l_poundv_data, &l_state),
+ "proc_get_mvpd_data function failed to retrieve porund V data");
if (!present_chiplets)
{
@@ -314,7 +324,7 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
l_vdn_sysparm.distoffset_uv = revle32(attr.attr_proc_vrm_voffset_vdn_uv);
//if wof is disabled.. don't call IQ function
- if (attr.attr_system_wof_disable == fapi2::ENUM_ATTR_SYSTEM_WOF_DISABLE_OFF)
+ if (is_wof_enabled())
{
// ----------------
// get IQ (IDDQ) data
@@ -334,6 +344,7 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
}
else
{
+ FAPI_INF("Skipping IQ (IDDQ) Data as WOF is disabled");
l_state.iv_wof_enabled = false;
}
@@ -343,28 +354,22 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
FAPI_INF("Getting VDM Parameters Data");
FAPI_TRY(proc_get_vdm_parms(i_target, &attr, &l_gp_vdmpb));
- // if vdm is disabled.. don't call pound w funcion
- if (attr.attr_system_vdm_disable == fapi2::ENUM_ATTR_SYSTEM_VDM_DISABLE_OFF)
- {
- FAPI_INF("Getting WOF data and VDM points (#W) Data");
- l_rc = proc_get_mvpd_poundw(i_target, l_poundv_bucketId, &l_lp_vdmpb, &l_poundw_data, l_poundv_data, &l_state);
+ // Note: the proc_get_mvpd_poundw has the conditional checking for VDM and WOF enablement
+ // as #W has both VDM and WOF content
- if (l_rc)
- {
- FAPI_ASSERT_NOEXIT(false,
- fapi2::PSTATE_PB_FUNCTION_FAIL(fapi2::FAPI2_ERRL_SEV_RECOVERED)
- .set_CHIP_TARGET(i_target)
- .set_FAPI_RC(l_rc),
- "Pstate Parameter Block proc_get_mvpd_poundw function failed");
- fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
- }
- }
- else
+ l_rc = proc_get_mvpd_poundw(i_target, l_poundv_bucketId, &l_lp_vdmpb, &l_poundw_data, l_poundv_data, &l_state);
+
+ if (l_rc)
{
- l_state.iv_wof_enabled = false;
- l_state.iv_vdm_enabled = false;
+ FAPI_ASSERT_NOEXIT(false,
+ fapi2::PSTATE_PB_FUNCTION_FAIL(fapi2::FAPI2_ERRL_SEV_RECOVERED)
+ .set_CHIP_TARGET(i_target)
+ .set_FAPI_RC(l_rc),
+ "Pstate Parameter Block proc_get_mvpd_poundw function failed");
+ fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
}
+
// ----------------
// get IVRM Parameters data
// ----------------
@@ -440,11 +445,13 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
{
if (attr.attr_resclk_disable == fapi2::ENUM_ATTR_SYSTEM_RESCLK_DISABLE_OFF)
{
- FAPI_TRY(proc_set_resclk_table_attrs(i_target), "proc_set_resclk_table_attrs failed");
- FAPI_TRY(proc_res_clock_setup(i_target, &l_resclk_setup, &l_globalppb));
- l_localppb.resclk = l_resclk_setup;
- l_globalppb.resclk = l_resclk_setup;
- l_state.iv_resclk_enabled = true;
+ FAPI_TRY(proc_set_resclk_table_attrs(i_target, &l_state), "proc_set_resclk_table_attrs failed");
+ if (l_state.iv_resclk_enabled)
+ {
+ FAPI_TRY(proc_res_clock_setup(i_target, &l_resclk_setup, &l_globalppb));
+ l_localppb.resclk = l_resclk_setup;
+ l_globalppb.resclk = l_resclk_setup;
+ }
FAPI_INF("Resonant Clocks are enabled");
}
@@ -513,12 +520,14 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
FAPI_INF ("l_biased_pstate %d ", l_biased_pstate[i]);
}
- p9_pstate_compute_vdm_threshold_pts(l_poundw_data, &l_localppb);
-
+ if (attr.attr_system_vdm_disable == fapi2::ENUM_ATTR_SYSTEM_VDM_DISABLE_OFF)
+ {
+ p9_pstate_compute_vdm_threshold_pts(l_poundw_data, &l_localppb);
- p9_pstate_compute_PsVIDCompSlopes_slopes(l_poundw_data, &l_localppb, l_biased_pstate);
+ p9_pstate_compute_PsVIDCompSlopes_slopes(l_poundw_data, &l_localppb, l_biased_pstate);
- p9_pstate_compute_PsVDMThreshSlopes(&l_localppb, l_biased_pstate);
+ p9_pstate_compute_PsVDMThreshSlopes(&l_localppb, l_biased_pstate);
+ }
// -----------------------------------------------
// OCC parameter block
// -----------------------------------------------
@@ -664,6 +673,12 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_
fapi_try_exit:
FAPI_INF("< p9_pstate_parameter_block");
+ if (fapi2::current_err)
+ {
+ fapi2::logError(fapi2::current_err,fapi2::FAPI2_ERRL_SEV_RECOVERED);
+ fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
+ }
+
return fapi2::current_err;
}
// END OF PSTATE PARAMETER BLOCK function
@@ -891,6 +906,7 @@ FAPI_INF("%-60s = 0x%08x %u", #attr_name, io_attr->attr_assign, io_attr->attr_as
DATABLOCK_GET_ATTR(ATTR_DPLL_DROOP_PROTECT_ENABLE, FAPI_SYSTEM, attr_dpll_droop_protect_enable);
DATABLOCK_GET_ATTR(ATTR_SYSTEM_RESCLK_DISABLE, FAPI_SYSTEM, attr_resclk_disable);
DATABLOCK_GET_ATTR(ATTR_CHIP_EC_FEATURE_WOF_NOT_SUPPORTED, i_target, attr_dd_wof_not_supported);
+ DATABLOCK_GET_ATTR(ATTR_CHIP_EC_FEATURE_VDM_NOT_SUPPORTED, i_target, attr_dd_vdm_not_supported);
DATABLOCK_GET_ATTR(ATTR_SYSTEM_PSTATES_MODE, FAPI_SYSTEM, attr_pstate_mode);
DATABLOCK_GET_ATTR(ATTR_TDP_RDP_CURRENT_FACTOR, i_target, attr_tdp_rdp_current_factor);
@@ -1496,11 +1512,6 @@ proc_get_extint_bias( uint32_t io_attr_mvpd_data[PV_D][PV_W],
/// ssrivath END OF BIAS APPLICATION FUNCTION
-bool
-is_wof_enabled()
-{
- return (!(attr.attr_system_wof_disable) && !(attr.attr_dd_wof_not_supported)) ? true : false;
-}
fapi2::ReturnCode
@@ -1643,6 +1654,7 @@ proc_chk_valid_poundv(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_targe
pv_op_str[pv_op_order[i - 1]], pv_op_str[pv_op_order[i]], i_chiplet_num, i_bucket_id,
pv_op_order[i]);
+ o_state->iv_pstates_enabled = false;
// Error out has Pstate and all dependent functions are suspious.
FAPI_ASSERT(false,
@@ -2685,8 +2697,22 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
const uint16_t VDM_VOLTAGE_IN_MV = 512;
const uint16_t VDM_GRANULARITY = 4;
+ FAPI_INF(">> proc_get_mvpd_poundw");
+
do
{
+ FAPI_DBG("proc_get_mvpd_poundw: VDM enable = %d, WOF enable %d",
+ is_vdm_enabled(), is_wof_enabled());
+
+ // Exit if both VDM and WOF is disabled
+ if (!is_vdm_enabled() && !is_wof_enabled())
+ {
+ FAPI_INF(" proc_get_mvpd_poundw: BOTH VDM and WOF are disabled. Skipping remaining checks");
+ o_state->iv_vdm_enabled = false;
+ o_state->iv_wof_enabled = false;
+ break;
+ }
+
// Below fields for Nominal, Powersave, Turbo, Ultra Turbo
// I-VDD Nominal TDP AC current 2B
// I-VDD Nominal TDP DC current 2B
@@ -2723,6 +2749,15 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
}
}
+ // The rest of the processing here is all checking of the VDM content
+ // within #W. If VDMs are not enabled (or supported), skip all of it
+ if (!is_vdm_enabled())
+ {
+ FAPI_INF(" proc_get_mvpd_poundw: VDM is disabled. Skipping remaining checks");
+ o_state->iv_vdm_enabled = false;
+ break;
+ }
+
uint8_t l_poundw_static_data = 0;
const fapi2::Target<fapi2::TARGET_TYPE_SYSTEM> FAPI_SYSTEM;
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_POUND_W_STATIC_DATA_ENABLE,
@@ -2752,7 +2787,6 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
memcpy(&(o_data->poundw[VPD_PV_NOMINAL]), &(o_data->poundw[VPD_PV_POWERSAVE]), sizeof(poundw_entry_t));
memcpy (&(o_data->poundw[VPD_PV_POWERSAVE]), &l_tmp_data, sizeof(poundw_entry_t));
-
FAPI_INF("POWERSAVE.vdm_vid_compare_ivid %d",o_data->poundw[POWERSAVE].vdm_vid_compare_ivid);
FAPI_INF("NOMINAL.vdm_vid_compare_ivid %d",o_data->poundw[NOMINAL].vdm_vid_compare_ivid);
FAPI_INF("TURBO.vdm_vid_compare_ivid %d",o_data->poundw[TURBO].vdm_vid_compare_ivid);
@@ -2783,7 +2817,6 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
!(o_data->poundw[ULTRA].vdm_vid_compare_ivid))
{
o_state->iv_vdm_enabled = false;
- FAPI_ERR("Pound W data contains invalid values");
FAPI_ASSERT_NOEXIT(false,
fapi2::PSTATE_PB_POUND_W_INVALID_VID_VALUE(fapi2::FAPI2_ERRL_SEV_RECOVERED)
.set_CHIP_TARGET(i_target)
@@ -2793,6 +2826,7 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
.set_ULTRA_VID_COMPARE_IVID_VALUE(o_data->poundw[ULTRA].vdm_vid_compare_ivid),
"Pstate Parameter Block #W : one of the VID compare value is zero");
fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
+ break;
}
FAPI_INF("POWERSAVE.vdm_vid_compare_ivid %d",o_data->poundw[POWERSAVE].vdm_vid_compare_ivid);
@@ -2812,7 +2846,7 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
{
o_state->iv_vdm_enabled = false;
FAPI_ASSERT_NOEXIT(false,
- fapi2::PSTATE_PB_POUND_W_INVALID_VID_VALUE(fapi2::FAPI2_ERRL_SEV_RECOVERED)
+ fapi2::PSTATE_PB_POUND_W_INVALID_VID_ORDER(fapi2::FAPI2_ERRL_SEV_RECOVERED)
.set_CHIP_TARGET(i_target)
.set_NOMINAL_VID_COMPARE_IVID_VALUE(o_data->poundw[NOMINAL].vdm_vid_compare_ivid)
.set_POWERSAVE_VID_COMPARE_IVID_VALUE(o_data->poundw[POWERSAVE].vdm_vid_compare_ivid)
@@ -2820,6 +2854,7 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
.set_ULTRA_VID_COMPARE_IVID_VALUE(o_data->poundw[ULTRA].vdm_vid_compare_ivid),
"Pstate Parameter Block #W VID compare data are not in increasing order");
fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
+ break;
}
// validate threshold values
@@ -2850,6 +2885,7 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
.set_VDM_LARGE((o_data->poundw[p].vdm_large_extreme_thresholds) & 0x0F),
"Pstate Parameter Block #W VDM threshold data are invalid");
fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
+ break;
}
}
@@ -2876,6 +2912,7 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
.set_VDM_SMALL_NORMAL((o_data->poundw[p].vdm_large_small_normal_freq) & 0x0F),
"Pstate Parameter Block #W VDM frequency drop data are invalid");
fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
+ break;
}
}
@@ -2907,100 +2944,116 @@ proc_get_mvpd_poundw(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target
fapi_try_exit:
+ // Given #W has both VDM and WOF content, a failure needs to disable both
if (fapi2::current_err != fapi2::FAPI2_RC_SUCCESS)
{
o_state->iv_vdm_enabled = false;
+ o_state->iv_wof_enabled = false;
}
-
+ FAPI_INF("<< proc_get_mvpd_poundw");
return fapi2::current_err;
}
fapi2::ReturnCode
-proc_set_resclk_table_attrs(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target)
+proc_set_resclk_table_attrs(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target,
+ PSTATE_attribute_state* o_state)
{
uint8_t l_resclk_freq_index[RESCLK_FREQ_REGIONS];
uint8_t l_l3_steparray[RESCLK_L3_STEPS];
uint16_t l_resclk_freq_regions[RESCLK_FREQ_REGIONS];
uint16_t l_resclk_value[RESCLK_STEPS];
uint16_t l_l3_threshold_mv;
+ o_state->iv_resclk_enabled = true;
- // Perform some basic sanity checks on the header data structures (since
- // the header values are provided by another team)
- FAPI_ASSERT((p9_resclk_defines::RESCLK_INDEX_VEC.size() == RESCLK_FREQ_REGIONS),
- fapi2::PSTATE_PB_RESCLK_INDEX_ERROR()
+ do
+ {
+ // Perform some basic sanity checks on the header data structures (since
+ // the header values are provided by another team)
+ FAPI_ASSERT_NOEXIT((p9_resclk_defines::RESCLK_INDEX_VEC.size() == RESCLK_FREQ_REGIONS),
+ fapi2::PSTATE_PB_RESCLK_INDEX_ERROR(fapi2::FAPI2_ERRL_SEV_RECOVERED)
.set_FREQ_REGIONS(RESCLK_FREQ_REGIONS)
.set_INDEX_VEC_SIZE(p9_resclk_defines::RESCLK_INDEX_VEC.size()),
"p9_resclk_defines.h RESCLK_INDEX_VEC.size() mismatch");
- FAPI_ASSERT((p9_resclk_defines::RESCLK_TABLE_VEC.size() == RESCLK_STEPS),
- fapi2::PSTATE_PB_RESCLK_TABLE_ERROR()
- .set_STEPS(RESCLK_STEPS)
- .set_TABLE_VEC_SIZE(p9_resclk_defines::RESCLK_TABLE_VEC.size()),
- "p9_resclk_defines.h RESCLK_TABLE_VEC.size() mismatch");
+ FAPI_ASSERT_NOEXIT((p9_resclk_defines::RESCLK_TABLE_VEC.size() == RESCLK_STEPS),
+ fapi2::PSTATE_PB_RESCLK_TABLE_ERROR(fapi2::FAPI2_ERRL_SEV_RECOVERED)
+ .set_STEPS(RESCLK_STEPS)
+ .set_TABLE_VEC_SIZE(p9_resclk_defines::RESCLK_TABLE_VEC.size()),
+ "p9_resclk_defines.h RESCLK_TABLE_VEC.size() mismatch");
+
+ FAPI_ASSERT_NOEXIT((p9_resclk_defines::L3CLK_TABLE_VEC.size() == RESCLK_L3_STEPS),
+ fapi2::PSTATE_PB_RESCLK_L3_TABLE_ERROR(fapi2::FAPI2_ERRL_SEV_RECOVERED)
+ .set_L3_STEPS(RESCLK_L3_STEPS)
+ .set_L3_VEC_SIZE(p9_resclk_defines::L3CLK_TABLE_VEC.size()),
+ "p9_resclk_defines.h L3CLK_TABLE_VEC.size() mismatch");
+ //FAPI_ASSERT_NOEXIT will log an error with recoverable.. but rc won't be
+ //cleared.. So we are initializing again to continue further
+ if (fapi2::current_err != fapi2::FAPI2_RC_SUCCESS)
+ {
+ o_state->iv_resclk_enabled = false;
+ fapi2::current_err = fapi2::FAPI2_RC_SUCCESS;
+ break;
+ }
- FAPI_ASSERT((p9_resclk_defines::L3CLK_TABLE_VEC.size() == RESCLK_L3_STEPS),
- fapi2::PSTATE_PB_RESCLK_L3_TABLE_ERROR()
- .set_L3_STEPS(RESCLK_L3_STEPS)
- .set_L3_VEC_SIZE(p9_resclk_defines::L3CLK_TABLE_VEC.size()),
- "p9_resclk_defines.h L3CLK_TABLE_VEC.size() mismatch");
- FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_L3_VALUE, i_target,
- l_l3_steparray));
- FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_FREQ_REGIONS, i_target,
- l_resclk_freq_regions));
- FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_FREQ_REGION_INDEX, i_target,
- l_resclk_freq_index));
- FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_VALUE, i_target,
- l_resclk_value));
- FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_L3_VOLTAGE_THRESHOLD_MV, i_target,
- l_l3_threshold_mv));
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_L3_VALUE, i_target,
+ l_l3_steparray));
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_FREQ_REGIONS, i_target,
+ l_resclk_freq_regions));
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_FREQ_REGION_INDEX, i_target,
+ l_resclk_freq_index));
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_VALUE, i_target,
+ l_resclk_value));
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_RESCLK_L3_VOLTAGE_THRESHOLD_MV, i_target,
+ l_l3_threshold_mv));
- for (uint8_t i = 0; i < RESCLK_FREQ_REGIONS; ++i)
- {
- if (l_resclk_freq_regions[i] == 0)
+ for (uint8_t i = 0; i < RESCLK_FREQ_REGIONS; ++i)
{
- l_resclk_freq_regions[i] = p9_resclk_defines::RESCLK_INDEX_VEC.at(i).freq;
+ if (l_resclk_freq_regions[i] == 0)
+ {
+ l_resclk_freq_regions[i] = p9_resclk_defines::RESCLK_INDEX_VEC.at(i).freq;
+ }
+
+ if (l_resclk_freq_index[i] == 0)
+ {
+ l_resclk_freq_index[i] = p9_resclk_defines::RESCLK_INDEX_VEC.at(i).idx;
+ }
}
- if (l_resclk_freq_index[i] == 0)
+ for (uint8_t i = 0; i < RESCLK_STEPS; ++i)
{
- l_resclk_freq_index[i] = p9_resclk_defines::RESCLK_INDEX_VEC.at(i).idx;
+ if (l_resclk_value[i] == 0)
+ {
+ l_resclk_value[i] = p9_resclk_defines::RESCLK_TABLE_VEC.at(i);
+ }
}
- }
- for (uint8_t i = 0; i < RESCLK_STEPS; ++i)
- {
- if (l_resclk_value[i] == 0)
+ for (uint8_t i = 0; i < RESCLK_L3_STEPS; ++i)
{
- l_resclk_value[i] = p9_resclk_defines::RESCLK_TABLE_VEC.at(i);
+ if (l_l3_steparray[i] == 0)
+ {
+ l_l3_steparray[i] = p9_resclk_defines::L3CLK_TABLE_VEC.at(i);
+ }
}
- }
- for (uint8_t i = 0; i < RESCLK_L3_STEPS; ++i)
- {
- if (l_l3_steparray[i] == 0)
+ if(l_l3_threshold_mv == 0)
{
- l_l3_steparray[i] = p9_resclk_defines::L3CLK_TABLE_VEC.at(i);
+ l_l3_threshold_mv = p9_resclk_defines::L3_VOLTAGE_THRESHOLD_MV;
}
- }
- if(l_l3_threshold_mv == 0)
- {
- l_l3_threshold_mv = p9_resclk_defines::L3_VOLTAGE_THRESHOLD_MV;
- }
-
- FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_L3_VALUE, i_target,
- l_l3_steparray));
- FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_FREQ_REGIONS, i_target,
- l_resclk_freq_regions));
- FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_FREQ_REGION_INDEX, i_target,
- l_resclk_freq_index));
- FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_VALUE, i_target,
- l_resclk_value));
- FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_L3_VOLTAGE_THRESHOLD_MV, i_target,
- l_l3_threshold_mv));
+ FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_L3_VALUE, i_target,
+ l_l3_steparray));
+ FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_FREQ_REGIONS, i_target,
+ l_resclk_freq_regions));
+ FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_FREQ_REGION_INDEX, i_target,
+ l_resclk_freq_index));
+ FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_VALUE, i_target,
+ l_resclk_value));
+ FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_SYSTEM_RESCLK_L3_VOLTAGE_THRESHOLD_MV, i_target,
+ l_l3_threshold_mv));
+ }while(0);
fapi_try_exit:
return fapi2::current_err;
OpenPOWER on IntegriCloud