diff options
author | mbroyles <mbroyles@us.ibm.com> | 2017-12-05 08:50:55 -0600 |
---|---|---|
committer | Martha Broyles <mbroyles@us.ibm.com> | 2017-12-07 12:17:27 -0500 |
commit | 01ae49578a8e854af3c58641cd37f4c1bfeb0fd6 (patch) | |
tree | 41063b807e9154a312c3156f706bf88dac308b09 /src | |
parent | cb8e695fc6617abfcf774811a710f60b3c7a83a8 (diff) | |
download | talos-occ-01ae49578a8e854af3c58641cd37f4c1bfeb0fd6.tar.gz talos-occ-01ae49578a8e854af3c58641cd37f4c1bfeb0fd6.zip |
Use AVS bus for processor power when no APSS channel for proc power is present
Change-Id: I1bb3a2b50c75e2b14a641229f68c18701df32b49
RTC: 182014
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/50495
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com>
Reviewed-by: Andres A. Lugo-Reyes <aalugore@us.ibm.com>
Reviewed-by: William A. Bryan <wilbryan@us.ibm.com>
Diffstat (limited to 'src')
-rwxr-xr-x | src/occ_405/amec/amec_sensors_power.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/occ_405/amec/amec_sensors_power.c b/src/occ_405/amec/amec_sensors_power.c index 30a8e3b..b168c02 100755 --- a/src/occ_405/amec/amec_sensors_power.c +++ b/src/occ_405/amec/amec_sensors_power.c @@ -262,10 +262,16 @@ void amec_update_apss_sensors(void) //Update channel specific sensors based on saved pairing between function Ids and Channels. - uint32_t l_vdd = ADC_CONVERTED_VALUE(G_sysConfigData.apss_adc_map.vdd[l_proc]); - uint32_t l_vcs_vio_vpcie = ADC_CONVERTED_VALUE(G_sysConfigData.apss_adc_map.vcs_vio_vpcie[l_proc]); - temp32 = ((l_vcs_vio_vpcie + l_vdd) * l_bulk_voltage)/ADCMULT_TO_UNITS; - sensor_update(AMECSENSOR_PTR(PWRPROC), (uint16_t) temp32); + // Make sure there is a channel for processor power else proc power sensor is using AVS bus and will + // be updated in update_avsbus_power_sensors() instead + if( (G_sysConfigData.apss_adc_map.vdd[l_proc] != SYSCFG_INVALID_ADC_CHAN) || + (G_sysConfigData.apss_adc_map.vcs_vio_vpcie[l_proc] != SYSCFG_INVALID_ADC_CHAN) ) + { + uint32_t l_vdd = ADC_CONVERTED_VALUE(G_sysConfigData.apss_adc_map.vdd[l_proc]); + uint32_t l_vcs_vio_vpcie = ADC_CONVERTED_VALUE(G_sysConfigData.apss_adc_map.vcs_vio_vpcie[l_proc]); + temp32 = ((l_vcs_vio_vpcie + l_vdd) * l_bulk_voltage)/ADCMULT_TO_UNITS; + sensor_update(AMECSENSOR_PTR(PWRPROC), (uint16_t) temp32); + } // Save off the combined power from all modules for (l_idx=0; l_idx < MAX_NUM_CHIP_MODULES; l_idx++) @@ -555,9 +561,13 @@ void update_avsbus_power_sensors(const avsbus_type_e i_type) // = v(100uV) * i(10mA) / 1,000,000 const uint32_t l_power = l_chip_voltage_100uv * l_current_10ma / 1000000; sensor_update(AMECSENSOR_PTR(l_powerSensor), (uint16_t)l_power); - if(G_pwr_reading_type != PWR_READING_TYPE_APSS) + + // check if there is an APSS with processor channel that would be providing the processor power sensor + if( ( G_pwr_reading_type != PWR_READING_TYPE_APSS ) || + ( (G_sysConfigData.apss_adc_map.vdd[G_pbax_id.chip_id] == SYSCFG_INVALID_ADC_CHAN) && + (G_sysConfigData.apss_adc_map.vcs_vio_vpcie[G_pbax_id.chip_id] == SYSCFG_INVALID_ADC_CHAN) ) ) { - // no APSS, update the processor power sensor with total processor power + // no proc pwr from APSS, update the processor power sensor with AVS bus total processor power // Vdd + Vdn + fixed adder for parts not measured (i.e. Vddr, Vcs, Vio etc) sensor_t *l_sensor2 = getSensorByGsid(l_powerSensor2); const uint16_t l_proc_power = (uint16_t)l_power + l_sensor2->sample + G_sysConfigData.proc_power_adder; |