diff options
author | Joe McGill <jmcgill@us.ibm.com> | 2016-09-09 08:48:26 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-09-24 16:07:35 -0400 |
commit | 8e70eadd39c78d24897317df926746518ddd2de5 (patch) | |
tree | f92c4468643189762864a258d83a4849371602dc /src/import/chips/p9/procedures/hwp | |
parent | b7ef219d889fa2831d293e1aad9275270bc995af (diff) | |
download | talos-hostboot-8e70eadd39c78d24897317df926746518ddd2de5.tar.gz talos-hostboot-8e70eadd39c78d24897317df926746518ddd2de5.zip |
p9_setup_evid -- adjust voltage computation policy
drive boot voltages directly from attributes, if set
allows for user/platform override if desired, independent from VPD
VPD access will be skipped entirely if all rail attributes are set
Change-Id: Ic13399e05852651368dd9915559e11a85bdf6977
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/29417
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Joseph J. McGill <jmcgill@us.ibm.com>
Reviewed-by: Thi N. Tran <thi@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30094
Reviewed-by: Hostboot Team <hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp')
3 files changed, 76 insertions, 80 deletions
diff --git a/src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.C b/src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.C index 678e285fa..b7b40a9a1 100644 --- a/src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.C +++ b/src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.C @@ -154,7 +154,7 @@ p9_pstate_parameter_block( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_ // clear MVPD array memset(attr_mvpd_voltage_control, 0, sizeof(attr_mvpd_voltage_control)); - FAPI_TRY(proc_get_mvpd_data( i_target, &attr, attr_mvpd_voltage_control, &valid_pdv_points, &present_chiplets), + FAPI_TRY(proc_get_mvpd_data( i_target, attr_mvpd_voltage_control, &valid_pdv_points, &present_chiplets), "Get MVPD #V data failed"); if (!present_chiplets) @@ -1178,7 +1178,6 @@ return fapi2::current_err; fapi2::ReturnCode proc_get_mvpd_data(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, - const AttributeList* i_attr, uint32_t o_attr_mvpd_data[PV_D][PV_W], uint32_t* o_valid_pdv_points, uint8_t* o_present_chiplets @@ -1286,7 +1285,6 @@ do // bucket_id); FAPI_TRY(proc_chk_valid_poundv( i_target, - i_attr, chiplet_mvpd_data, o_valid_pdv_points, l_chipNum, @@ -1823,7 +1821,6 @@ return l_rc; fapi2::ReturnCode proc_chk_valid_poundv(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, - const AttributeList* i_attr, const uint32_t i_chiplet_mvpd_data[PV_D][PV_W], uint32_t* o_valid_pdv_points, const uint8_t i_chiplet_num, @@ -1834,10 +1831,14 @@ const uint8_t pv_op_order[VPD_PV_POINTS] = VPD_PV_ORDER; const char* pv_op_str[VPD_PV_POINTS] = VPD_PV_ORDER_STR; uint8_t i = 0; bool suspend_ut_check = false; +uint8_t l_attr_system_wof_enabled; do { + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SYSTEM_WOF_ENABLED, fapi2::Target<fapi2::TARGET_TYPE_SYSTEM>(), + l_attr_system_wof_enabled)); + // check for non-zero freq, voltage, or current in valid operating points for (i = 0; i <= VPD_PV_POINTS - 1; i++) { @@ -1849,7 +1850,7 @@ do i_chiplet_mvpd_data[pv_op_order[i]][3], i_chiplet_mvpd_data[pv_op_order[i]][4]); - if (i_attr->attr_system_wof_enabled && (strcmp(pv_op_str[pv_op_order[i]], "UltraTurbo") == 0)) + if (l_attr_system_wof_enabled && (strcmp(pv_op_str[pv_op_order[i]], "UltraTurbo") == 0)) { if (i_chiplet_mvpd_data[pv_op_order[i]][0] == 0 || @@ -1871,7 +1872,7 @@ do suspend_ut_check = true; } } - else if ((!i_attr->attr_system_wof_enabled) && (strcmp(pv_op_str[pv_op_order[i]], "UltraTurbo") == 0)) + else if ((!l_attr_system_wof_enabled) && (strcmp(pv_op_str[pv_op_order[i]], "UltraTurbo") == 0)) { FAPI_INF("**** NOTE: WOF is disabled so the UltraTurbo VPD is not being checked"); suspend_ut_check = true; @@ -1935,7 +1936,7 @@ do i_chiplet_mvpd_data[pv_op_order[i]][3], i_chiplet_mvpd_data[pv_op_order[i - 1]][4], i_chiplet_mvpd_data[pv_op_order[i]][4]); - if (i_attr->attr_system_wof_enabled && strcmp(pv_op_str[pv_op_order[i]], "UltraTurbo") && !suspend_ut_check ) + if (l_attr_system_wof_enabled && strcmp(pv_op_str[pv_op_order[i]], "UltraTurbo") && !suspend_ut_check ) { if (i_chiplet_mvpd_data[pv_op_order[i - 1]][0] > i_chiplet_mvpd_data[pv_op_order[i]][0] || i_chiplet_mvpd_data[pv_op_order[i - 1]][1] > i_chiplet_mvpd_data[pv_op_order[i]][1] || @@ -1961,7 +1962,8 @@ do } while(0); -return fapi2::FAPI2_RC_SUCCESS; +fapi_try_exit: +return fapi2::current_err; } #if 0 diff --git a/src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.H b/src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.H index d044e0777..c3d11b9a8 100644 --- a/src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.H +++ b/src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.H @@ -224,7 +224,6 @@ typedef struct /// ---------------------------------------------------------------- /// @brief Get #V data and put into array /// @param[i] i_target Chip Target -/// @param[i] i_attr Attribute list /// @param[o] o_attr_mvpd_data 5x5 array to hold the #V data /// @param[o] o_valid_pdv_points No of Valid VPD points /// @param[o] o_present_chiplets No of functional chiplets @@ -232,14 +231,12 @@ typedef struct /// ---------------------------------------------------------------- fapi2::ReturnCode proc_get_mvpd_data ( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, - const AttributeList* i_attr, uint32_t o_attr_mvpd_data[PV_D][PV_W], uint32_t* o_valid_pdv_points, uint8_t* o_present_chiplets ); /// ------------------------------------------------------------------- /// @brief Perform data validity check on #V data -/// @param[i] i_attr Attribute list /// @param[i] i_chiplet_mvpd_data Pointer to array of #V data /// @param[o] o_valid_pdv_points No of Valid VPD points /// @param[o] i_chiplet_num Chiplet number @@ -249,7 +246,6 @@ proc_get_mvpd_data ( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target fapi2::ReturnCode proc_chk_valid_poundv ( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, - const AttributeList* i_attr, const uint32_t i_chiplet_mvpd_data[PV_D][PV_W], uint32_t* o_valid_pdv_points, const uint8_t i_chiplet_num, diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_setup_evid.C b/src/import/chips/p9/procedures/hwp/pm/p9_setup_evid.C index 57b2c85f9..090e4b4e5 100644 --- a/src/import/chips/p9/procedures/hwp/pm/p9_setup_evid.C +++ b/src/import/chips/p9/procedures/hwp/pm/p9_setup_evid.C @@ -184,13 +184,19 @@ avsInitAttributes(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, avsbus_attrs_t* attrs, const VoltageConfigActions_t i_action) { + uint32_t attr_mvpd_data[PV_D][PV_W]; + uint32_t valid_pdv_points; + uint8_t present_chiplets; attrs->vdd_bus_num = DEFAULT_VDD_BUS_NUMBER; attrs->vdd_rail_select = DEFAULT_VDD_RAILSELECT; + attrs->vdd_voltage_mv = DEFAULT_BOOT_VDD_VOLTAGE_MV; attrs->vdn_bus_num = DEFAULT_VDN_BUS_NUMBER; attrs->vdn_rail_select = DEFAULT_VDN_RAILSELECT; + attrs->vdn_voltage_mv = DEFAULT_BOOT_VDN_VOLTAGE_MV; attrs->vcs_bus_num = DEFAULT_VCS_BUS_NUMBER; attrs->vcs_rail_select = DEFAULT_VCS_RAILSELECT; + attrs->vcs_voltage_mv = DEFAULT_BOOT_VCS_VOLTAGE_MV; FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_VDD_AVSBUS_BUSNUM, i_target, attrs->vdd_bus_num)); @@ -216,68 +222,67 @@ avsInitAttributes(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, //inputed to the HWP tells us to if(i_action == COMPUTE_VOLTAGE_SETTINGS) { - // If attribute values are zero, use the default values (hardcoded) - // check VDD VID - if (attrs->vdd_voltage_mv == 0) - { - // Default voltage if mailbox value is not set - - // @todo L3 - Eventually, this should replaced with an error point - // to indicate that the mailbox -> attributes haven't been setup - - attrs->vdd_voltage_mv = DEFAULT_BOOT_VDD_VOLTAGE_MV; - FAPI_INF("VDD boot voltage not set in attributes. Setting to default of %d mV (%x)", - attrs->vdd_voltage_mv, attrs->vdd_voltage_mv); - FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_VDD_BOOT_VOLTAGE, i_target, - attrs->vdd_voltage_mv)); - } - else - { - FAPI_INF("VDD boot voltage = %d mV (%x)", - attrs->vdd_voltage_mv, attrs->vdd_voltage_mv); - } - - // check VCS VID - if (attrs->vcs_voltage_mv == 0) - { - // Default voltage if mailbox value is not set - - // @todo L3 - Eventually, this should replaced with an error point - // to indicate that the mailbox -> attributes haven't been setup - - attrs->vcs_voltage_mv = DEFAULT_BOOT_VCS_VOLTAGE_MV; - FAPI_INF("VCS boot voltage not set in attributes. Setting to default of %d mV (%x)", - attrs->vcs_voltage_mv, attrs->vcs_voltage_mv); - FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_VCS_BOOT_VOLTAGE, i_target, - attrs->vcs_voltage_mv)); - } - else + // query VPD if any of the voltage attributes are zero + if (!attrs->vdd_voltage_mv || + !attrs->vcs_voltage_mv || + !attrs->vdn_voltage_mv) { - FAPI_INF("VCS boot voltage = %d mV (%x)", - attrs->vcs_voltage_mv, attrs->vcs_voltage_mv); - } - - // check VDN VID - if (attrs->vdn_voltage_mv == 0) - { - // Default voltage if mailbox value is not set - - // @todo -L3 Eventually, this should replaced with an error point - // to indicate that the mailbox -> attributes haven't been setup - - attrs->vdn_voltage_mv = DEFAULT_BOOT_VDN_VOLTAGE_MV; - FAPI_INF("VDN boot voltage not set in attributes. Setting to default of %d mV (%x)", - attrs->vdn_voltage_mv, attrs->vdn_voltage_mv); - FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_VDN_BOOT_VOLTAGE, i_target, - attrs->vdn_voltage_mv)); + // Get #V data from MVPD for VDD/VDN and VCS voltage values + FAPI_TRY(proc_get_mvpd_data(i_target, attr_mvpd_data, &valid_pdv_points, &present_chiplets)); + + // set VDD voltage to PowerSave Voltage from MVPD data (if no override) + if (attrs->vdd_voltage_mv) + { + FAPI_INF("VDD boot voltage override set"); + } + else + { + FAPI_INF("VDD boot voltage override not set, using VPD value"); + attrs->vdd_voltage_mv = attr_mvpd_data[POWERSAVE][1]; + FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_VDD_BOOT_VOLTAGE, i_target, attrs->vdd_voltage_mv), + "Error from FAPI_ATTR_SET (ATTR_VDD_BOOT_VOLTAGE)"); + } + + // set VCS voltage to UltraTurbo Voltage from MVPD data (if no override) + if (attrs->vcs_voltage_mv) + { + FAPI_INF("VCS boot voltage override set"); + } + else + { + FAPI_INF("VCS boot voltage override not set, using VPD value"); + attrs->vcs_voltage_mv = attr_mvpd_data[ULTRA][1]; + FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_VCS_BOOT_VOLTAGE, i_target, attrs->vcs_voltage_mv), + "Error from FAPI_ATTR_SET (ATTR_VCS_BOOT_VOLTAGE)"); + } + + // set VDN voltage to PowerSave Voltage from MVPD data (if no override) + if (attrs->vdn_voltage_mv) + { + FAPI_INF("VDN boot voltage override set"); + } + else + { + FAPI_INF("VDN boot voltage override not set, using VPD value"); + attrs->vdn_voltage_mv = attr_mvpd_data[POWERBUS][1]; + FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_VDN_BOOT_VOLTAGE, i_target, attrs->vdn_voltage_mv), + "Error from FAPI_ATTR_SET (ATTR_VDN_BOOT_VOLTAGE)"); + } } else { - FAPI_INF("VDN boot voltage = %d mV (%x)", - attrs->vdn_voltage_mv, attrs->vdn_voltage_mv); + FAPI_INF("Using override for all boot voltages (VDD/VCS/VDN)"); } } + // trace values to be used + FAPI_INF("VDD boot voltage = %d mV (%x)", + attrs->vdd_voltage_mv, attrs->vdd_voltage_mv); + FAPI_INF("VCS boot voltage = %d mV (%x)", + attrs->vcs_voltage_mv, attrs->vcs_voltage_mv); + FAPI_INF("VDN boot voltage = %d mV (%x)", + attrs->vdn_voltage_mv, attrs->vdn_voltage_mv); + fapi_try_exit: return fapi2::current_err; } // avsInitAttributes @@ -289,10 +294,6 @@ p9_setup_evid(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, const // AVSBus configuration variables avsbus_attrs_t attrs; - AttributeList mvpd_attrs; - uint32_t attr_mvpd_data[PV_D][PV_W]; - uint32_t valid_pdv_points; - uint8_t present_chiplets; // Read attribute - FAPI_TRY(avsInitAttributes(i_target, &attrs, i_action)); @@ -308,30 +309,27 @@ p9_setup_evid(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, const attrs.vdn_bus_num, BRIDGE_NUMBER), "Initializing avsBus VDN, bridge %d", BRIDGE_NUMBER); - // Get #V data from MVPD to program VDD/VDN and VCS voltage values - FAPI_TRY(proc_get_mvpd_data(i_target, &mvpd_attrs, attr_mvpd_data, &valid_pdv_points, &present_chiplets)); - - // Set Boot VDD Voltage - PowerSave Voltage from the MVPD data + // Set Boot VDD Voltage FAPI_TRY(avsVoltageWrite(i_target, attrs.vdd_bus_num, BRIDGE_NUMBER, attrs.vdd_rail_select, - attr_mvpd_data[POWERSAVE][1]), + attrs.vdd_voltage_mv), "Setting VDD voltage via AVSBus %d, Bridge %d", attrs.vdd_bus_num, BRIDGE_NUMBER); - // Set Boot VDN Voltage - PowerBus Voltage from the MVPD data + // Set Boot VDN Voltage FAPI_TRY(avsVoltageWrite(i_target, attrs.vdn_bus_num, BRIDGE_NUMBER, attrs.vdn_rail_select, - attr_mvpd_data[POWERBUS][1]), + attrs.vdn_voltage_mv), "Setting VDN voltage via AVSBus %d, Bridge %d", attrs.vdn_bus_num, BRIDGE_NUMBER); - // Set Boot VCS Voltage - UltraTurbo Voltage from the MVPD data + // Set Boot VCS Voltage if(attrs.vcs_bus_num == 0xFF) { @@ -345,7 +343,7 @@ p9_setup_evid(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, const attrs.vcs_bus_num, BRIDGE_NUMBER, attrs.vcs_rail_select, - attr_mvpd_data[ULTRA][1]), + attrs.vcs_voltage_mv), "Setting VCS voltage via AVSBus %d, Bridge %d", attrs.vcs_bus_num, BRIDGE_NUMBER); |