From 1b9910cea325b42cf0dadd071b30d648dc7092da Mon Sep 17 00:00:00 2001 From: Greg Still Date: Thu, 6 Jul 2017 13:41:16 -0500 Subject: PM: no EQ (eg no core) support - disables Pstates due to lack of #V VPD - Doesn't start Pstates in AUTO mode - Fixed in setup evid procedure related to same issue - rebased Change-Id: I6f52b5d968e3f66da8c9d33067424bebd333d587 CQ:SW390516 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43083 Tested-by: Jenkins Server Tested-by: Hostboot CI Reviewed-by: BRIAN D. VICTOR Reviewed-by: RAHUL BATRA Reviewed-by: Jennifer A. Stofer Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43085 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: Daniel M. Crowell --- .../chips/p9/procedures/hwp/pm/p9_setup_evid.C | 223 ++++++++++++--------- 1 file changed, 126 insertions(+), 97 deletions(-) (limited to 'src/import/chips/p9/procedures/hwp/pm/p9_setup_evid.C') 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 fe046ef53..46dc285a9 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 @@ -214,112 +214,123 @@ avsInitAttributes(const fapi2::Target& i_target, DATABLOCK_GET_ATTR(ATTR_PROC_R_DISTLOSS_VCS_UOHM, i_target, attrs->r_distloss_vcs_uohm); DATABLOCK_GET_ATTR(ATTR_PROC_VRM_VOFFSET_VCS_UV, i_target, attrs->vrm_voffset_vcs_uv); - //We only wish to compute voltage setting defaults if the action - //inputed to the HWP tells us to - if(i_action == COMPUTE_VOLTAGE_SETTINGS) + do { - // query VPD if any of the voltage attributes are zero - if (!attrs->vdd_voltage_mv || - !attrs->vcs_voltage_mv || - !attrs->vdn_voltage_mv) - { - uint8_t l_poundv_bucketId = 0; - fapi2::voltageBucketData_t l_poundv_data; - // 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, - l_poundv_bucketId, - &l_poundv_data, - &l_state )); - - // 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 and correcting for applicable load line setting"); - uint32_t vpd_vdd_voltage_mv = attr_mvpd_data[POWERSAVE][VPD_PV_VDD_MV]; - attrs->vdd_voltage_mv = - ( (vpd_vdd_voltage_mv * 1000) + // uV - ( ( (attr_mvpd_data[POWERSAVE][VPD_PV_IDD_100MA] / 10) * // A - (attrs->r_loadline_vdd_uohm + attrs->r_distloss_vdd_uohm)) + // uohm -> A*uohm = uV - attrs->vrm_voffset_vdd_uv )) / 1000; // mV - - FAPI_INF("VDD VPD voltage %d mV; Corrected voltage: %d mV; IDD: %d mA; LoadLine: %d uOhm; DistLoss: %d uOhm; Offst: %d uOhm", - vpd_vdd_voltage_mv, - attrs->vdd_voltage_mv, - attr_mvpd_data[POWERSAVE][VPD_PV_IDD_100MA] * 100, - attrs->r_loadline_vdd_uohm, - attrs->r_distloss_vdd_uohm, - attrs->vrm_voffset_vdd_uv); - - 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 and correcting for applicable load line setting"); - uint32_t vpd_vcs_voltage_mv = attr_mvpd_data[POWERSAVE][VPD_PV_VCS_MV]; - attrs->vcs_voltage_mv = - ( (vpd_vcs_voltage_mv * 1000) + // uV - ( ( (attr_mvpd_data[POWERSAVE][VPD_PV_ICS_100MA] / 10) * // A - (attrs->r_loadline_vcs_uohm + attrs->r_distloss_vcs_uohm)) + // uohm -> A*uohm = uV - attrs->vrm_voffset_vcs_uv )) / 1000; // mV - - FAPI_INF("VCS VPD voltage %d mV; Corrected voltage: %d mV; IDD: %d mA; LoadLine: %d uOhm; DistLoss: %d uOhm; Offst: %d uOhm", - vpd_vcs_voltage_mv, - attrs->vcs_voltage_mv, - attr_mvpd_data[POWERSAVE][VPD_PV_ICS_100MA] * 100, - attrs->r_loadline_vcs_uohm, - attrs->r_distloss_vcs_uohm, - attrs->vrm_voffset_vcs_uv); - - 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) + //We only wish to compute voltage setting defaults if the action + //inputed to the HWP tells us to + if(i_action == COMPUTE_VOLTAGE_SETTINGS) + { + // 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("VDN boot voltage override set"); + uint8_t l_poundv_bucketId = 0; + fapi2::voltageBucketData_t l_poundv_data; + // 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, + l_poundv_bucketId, + &l_poundv_data, + &l_state )); + + if (!present_chiplets) + { + FAPI_IMP("**** WARNING : There are no EQ chiplets present which means there is no valid #V VPD"); + break; + } + + // 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 and correcting for applicable load line setting"); + uint32_t vpd_vdd_voltage_mv = attr_mvpd_data[POWERSAVE][VPD_PV_VDD_MV]; + attrs->vdd_voltage_mv = + ( (vpd_vdd_voltage_mv * 1000) + // uV + ( ( (attr_mvpd_data[POWERSAVE][VPD_PV_IDD_100MA] / 10) * // A + (attrs->r_loadline_vdd_uohm + attrs->r_distloss_vdd_uohm)) + // uohm -> A*uohm = uV + attrs->vrm_voffset_vdd_uv )) / 1000; // mV + + FAPI_INF("VDD VPD voltage %d mV; Corrected voltage: %d mV; IDD: %d mA; LoadLine: %d uOhm; DistLoss: %d uOhm; Offst: %d uOhm", + vpd_vdd_voltage_mv, + attrs->vdd_voltage_mv, + attr_mvpd_data[POWERSAVE][VPD_PV_IDD_100MA] * 100, + attrs->r_loadline_vdd_uohm, + attrs->r_distloss_vdd_uohm, + attrs->vrm_voffset_vdd_uv); + + 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 and correcting for applicable load line setting"); + uint32_t vpd_vcs_voltage_mv = attr_mvpd_data[POWERSAVE][VPD_PV_VCS_MV]; + attrs->vcs_voltage_mv = + ( (vpd_vcs_voltage_mv * 1000) + // uV + ( ( (attr_mvpd_data[POWERSAVE][VPD_PV_ICS_100MA] / 10) * // A + (attrs->r_loadline_vcs_uohm + attrs->r_distloss_vcs_uohm)) + // uohm -> A*uohm = uV + attrs->vrm_voffset_vcs_uv )) / 1000; // mV + + FAPI_INF("VCS VPD voltage %d mV; Corrected voltage: %d mV; IDD: %d mA; LoadLine: %d uOhm; DistLoss: %d uOhm; Offst: %d uOhm", + vpd_vcs_voltage_mv, + attrs->vcs_voltage_mv, + attr_mvpd_data[POWERSAVE][VPD_PV_ICS_100MA] * 100, + attrs->r_loadline_vcs_uohm, + attrs->r_distloss_vcs_uohm, + attrs->vrm_voffset_vcs_uv); + + 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 and correcting for applicable load line setting"); + uint32_t vpd_vdn_voltage_mv = attr_mvpd_data[POWERBUS][VPD_PV_VDN_MV]; + attrs->vdn_voltage_mv = + ( (vpd_vdn_voltage_mv * 1000) + // uV + ( ( (attr_mvpd_data[POWERBUS][VPD_PV_IDN_100MA] / 10) * // A + (attrs->r_loadline_vdn_uohm + attrs->r_distloss_vdn_uohm)) + // uohm -> A*uohm = uV + attrs->vrm_voffset_vdn_uv )) / 1000; // mV + + FAPI_INF("VDN VPD voltage %d mV; Corrected voltage: %d mV; IDN: %d mA; LoadLine: %d uOhm; DistLoss: %d uOhm; Offst: %d uOhm", + vpd_vdn_voltage_mv, + attrs->vdn_voltage_mv, + attr_mvpd_data[POWERBUS][VPD_PV_IDN_100MA] * 100, + attrs->r_loadline_vdn_uohm, + attrs->r_distloss_vdn_uohm, + attrs->vrm_voffset_vdn_uv); + + 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 override not set, using VPD value and correcting for applicable load line setting"); - uint32_t vpd_vdn_voltage_mv = attr_mvpd_data[POWERBUS][VPD_PV_VDN_MV]; - attrs->vdn_voltage_mv = - ( (vpd_vdn_voltage_mv * 1000) + // uV - ( ( (attr_mvpd_data[POWERBUS][VPD_PV_IDN_100MA] / 10) * // A - (attrs->r_loadline_vdn_uohm + attrs->r_distloss_vdn_uohm)) + // uohm -> A*uohm = uV - attrs->vrm_voffset_vdn_uv )) / 1000; // mV - - FAPI_INF("VDN VPD voltage %d mV; Corrected voltage: %d mV; IDN: %d mA; LoadLine: %d uOhm; DistLoss: %d uOhm; Offst: %d uOhm", - vpd_vdn_voltage_mv, - attrs->vdn_voltage_mv, - attr_mvpd_data[POWERBUS][VPD_PV_IDN_100MA] * 100, - attrs->r_loadline_vdn_uohm, - attrs->r_distloss_vdn_uohm, - attrs->vrm_voffset_vdn_uv); - - 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)"); + FAPI_INF("Using override for all boot voltages (VDD/VCS/VDN)"); } } - else - { - FAPI_INF("Using override for all boot voltages (VDD/VCS/VDN)"); - } } + while(0); // trace values to be used FAPI_INF("VDD boot voltage = %d mV (0x%x)", @@ -371,6 +382,12 @@ p9_setup_evid(const fapi2::Target& i_target, const // initialize the AVS slave on VDD bus FAPI_TRY(avsIdleFrame(i_target, attrs.vdd_bus_num, BRIDGE_NUMBER)); + if (!attrs.vdd_voltage_mv) + { + FAPI_IMP("VDD voltage value is zero,so we can't set boot voltage"); + break; + } + // Set Boot VDD Voltage FAPI_TRY(avsVoltageWrite(i_target, attrs.vdd_bus_num, @@ -400,6 +417,12 @@ p9_setup_evid(const fapi2::Target& i_target, const // VDN bus FAPI_TRY(avsIdleFrame(i_target, attrs.vdn_bus_num, BRIDGE_NUMBER)); + if (!attrs.vdn_voltage_mv) + { + FAPI_IMP("VDN voltage value is zero,so we can't set boot voltage"); + break; + } + // Set Boot VDN Voltage FAPI_TRY(avsVoltageWrite(i_target, attrs.vdn_bus_num, @@ -436,6 +459,12 @@ p9_setup_evid(const fapi2::Target& i_target, const // VCS bus FAPI_TRY(avsIdleFrame(i_target, attrs.vcs_bus_num, BRIDGE_NUMBER)); + if (!attrs.vcs_voltage_mv) + { + FAPI_IMP("VCS voltage value is zero,so we can't set boot voltage"); + break; + } + // Set Boot VCS voltage FAPI_TRY(avsVoltageWrite(i_target, attrs.vcs_bus_num, -- cgit v1.2.1