summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp
diff options
context:
space:
mode:
authorJoe McGill <jmcgill@us.ibm.com>2016-09-09 08:48:26 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-09-24 16:07:35 -0400
commit8e70eadd39c78d24897317df926746518ddd2de5 (patch)
treef92c4468643189762864a258d83a4849371602dc /src/import/chips/p9/procedures/hwp
parentb7ef219d889fa2831d293e1aad9275270bc995af (diff)
downloadtalos-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')
-rw-r--r--src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.C18
-rw-r--r--src/import/chips/p9/procedures/hwp/lib/p9_pstate_parameter_block.H4
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_setup_evid.C134
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);
OpenPOWER on IntegriCloud