diff options
author | Chris Cain <cjcain@us.ibm.com> | 2017-10-06 12:13:22 -0500 |
---|---|---|
committer | William A. Bryan <wilbryan@us.ibm.com> | 2017-10-19 16:07:25 -0400 |
commit | c07a7207c8b1a2d74cf4cc55120eb8073ee07d96 (patch) | |
tree | da5a7d8afac5b9e318ab5674a10cdf4f8937c990 /src/occ_405/amec | |
parent | e00c5e2fad7d87e2a83076a45935bc114fabfe5b (diff) | |
download | talos-occ-c07a7207c8b1a2d74cf4cc55120eb8073ee07d96.tar.gz talos-occ-c07a7207c8b1a2d74cf4cc55120eb8073ee07d96.zip |
Read VRM Vdd Temperatures
Change-Id: I428417a8e94e2b3f8892998ef280e454c46405ed
RTC: 180433
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48131
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
Reviewed-by: William A. Bryan <wilbryan@us.ibm.com>
Diffstat (limited to 'src/occ_405/amec')
-rwxr-xr-x | src/occ_405/amec/amec_health.c | 15 | ||||
-rwxr-xr-x | src/occ_405/amec/amec_health.h | 4 | ||||
-rwxr-xr-x | src/occ_405/amec/amec_sensors_power.c | 46 |
3 files changed, 38 insertions, 27 deletions
diff --git a/src/occ_405/amec/amec_health.c b/src/occ_405/amec/amec_health.c index 12c348d..fcc9698 100755 --- a/src/occ_405/amec/amec_health.c +++ b/src/occ_405/amec/amec_health.c @@ -5,7 +5,7 @@ /* */ /* OpenPOWER OnChipController Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2016 */ +/* Contributors Listed Below - COPYRIGHT 2011,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -1010,7 +1010,7 @@ void amec_health_check_proc_timeout() // exceeded the error temperature sent in data format 0x13. // // End Function Specification -void amec_health_check_vrm_vdd_temp() +void amec_health_check_vrm_vdd_temp(const sensor_t *i_sensor) { /*------------------------------------------------------------------------*/ /* Local Variables */ @@ -1018,7 +1018,6 @@ void amec_health_check_vrm_vdd_temp() uint16_t l_ot_error; static uint32_t L_error_count = 0; static BOOLEAN L_ot_error_logged = FALSE; - sensor_t *l_sensor; errlHndl_t l_err = NULL; /*------------------------------------------------------------------------*/ @@ -1026,12 +1025,10 @@ void amec_health_check_vrm_vdd_temp() /*------------------------------------------------------------------------*/ do { - // Get TEMPVDD sensor - l_sensor = getSensorByGsid(TEMPVDD); l_ot_error = g_amec->thermalvdd.ot_error; // Check to see if we exceeded our error temperature - if (l_sensor->sample > l_ot_error) + if (i_sensor->sample > l_ot_error) { // Increment the error counter for this FRU L_error_count++; @@ -1048,7 +1045,7 @@ void amec_health_check_vrm_vdd_temp() L_ot_error_logged = TRUE; TRAC_ERR("amec_health_check_vrm_vdd_temp: VRM vdd has exceeded OT error! temp[%u] ot_error[%u]", - l_sensor->sample, + i_sensor->sample, l_ot_error); // Log an OT error @@ -1069,7 +1066,7 @@ void amec_health_check_vrm_vdd_temp() NULL, DEFAULT_TRACE_SIZE, 0, - l_sensor->sample_max); + i_sensor->sample_max); // Callout the Ambient procedure addCalloutToErrl(l_err, @@ -1093,7 +1090,7 @@ void amec_health_check_vrm_vdd_temp() if (L_error_count >= AMEC_HEALTH_ERROR_TIMER) { TRAC_INFO("amec_health_check_vrm_vdd_temp: VRM Vdd temp [%u] now below error temp [%u] after error_count [%u]", - l_sensor->sample, l_ot_error, L_error_count); + i_sensor->sample, l_ot_error, L_error_count); } // Reset the error counter for this FRU diff --git a/src/occ_405/amec/amec_health.h b/src/occ_405/amec/amec_health.h index 7992f26..9199bb7 100755 --- a/src/occ_405/amec/amec_health.h +++ b/src/occ_405/amec/amec_health.h @@ -5,7 +5,7 @@ /* */ /* OpenPOWER OnChipController Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2015 */ +/* Contributors Listed Below - COPYRIGHT 2011,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -51,7 +51,7 @@ void amec_mem_mark_logged(uint8_t i_cent, uint8_t i_dimm, uint8_t* i_clog_bitmap, uint8_t* i_dlog_bitmap); -void amec_health_check_vrm_vdd_temp(void); +void amec_health_check_vrm_vdd_temp(const sensor_t *i_sensor); void amec_health_check_vrm_vdd_temp_timeout(void); #endif diff --git a/src/occ_405/amec/amec_sensors_power.c b/src/occ_405/amec/amec_sensors_power.c index b58a970..55429b1 100755 --- a/src/occ_405/amec/amec_sensors_power.c +++ b/src/occ_405/amec/amec_sensors_power.c @@ -591,12 +591,12 @@ void amec_update_avsbus_sensors(void) AVSBUS_STATE_INITIATE_READ = 1, AVSBUS_STATE_PROCESS_CURRENT = 2, AVSBUS_STATE_PROCESS_VOLTAGE = 3, - AVSBUS_STATE_PROCESS_STATUS = 4 + AVSBUS_STATE_PROCESS_STATUS = 4, + AVSBUS_STATE_PROCESS_TEMPERATURE= 5 } L_avsbus_state = AVSBUS_STATE_INITIATE_READ; - // Number of Curr/Volt readings between Status readings -#define NUM_VRM_READINGS_PER_STATUS 2 - static unsigned int L_readingCount = 0; + // Flag to select either temperature or status to read on 3rd tick + static bool L_read_temp = true; if (isSafeStateRequested()) { @@ -626,31 +626,45 @@ void amec_update_avsbus_sensors(void) // Process the voltage readings process_avsbus_voltage(); - if ((G_vrm_thermal_monitoring == FALSE) || (++L_readingCount < NUM_VRM_READINGS_PER_STATUS)) + // Initiate read of temperature or error status (OT/OC) + if (L_read_temp) { - // Initiate read of currents - initiate_avsbus_reads(AVSBUS_CURRENT); - L_avsbus_state = AVSBUS_STATE_PROCESS_CURRENT; + // Initiate AVS Bus read for Vdd temperature + avsbus_read_start(AVSBUS_VDD, AVSBUS_TEMPERATURE); + L_avsbus_state = AVSBUS_STATE_PROCESS_TEMPERATURE; } else { - // Periodically read status for VR FAN (VRM OT WARNING) initiate_avsbus_read_status(); L_avsbus_state = AVSBUS_STATE_PROCESS_STATUS; - L_readingCount = 0; } + // Toggle between reading temperature and status + L_read_temp = !L_read_temp; break; case AVSBUS_STATE_PROCESS_STATUS: - // Process the status { - // Update sensor with the OT status (0 / 1) + // Process the status uint16_t otStatus = process_avsbus_status(); - sensor_update(AMECSENSOR_PTR(VRMPROCOT), otStatus); + if (G_vrm_thermal_monitoring) + { + // Update sensor with the OT status (0 / 1) + sensor_update(AMECSENSOR_PTR(VRMPROCOT), otStatus); + } + // Back to reading currents + initiate_avsbus_reads(AVSBUS_CURRENT); + L_avsbus_state = AVSBUS_STATE_PROCESS_CURRENT; + } + break; + + case AVSBUS_STATE_PROCESS_TEMPERATURE: + { + // Read and process Vdd temperature + avsbus_read(AVSBUS_VDD, AVSBUS_TEMPERATURE); + // Back to reading currents + initiate_avsbus_reads(AVSBUS_CURRENT); + L_avsbus_state = AVSBUS_STATE_PROCESS_CURRENT; } - // Back to reading currents - initiate_avsbus_reads(AVSBUS_CURRENT); - L_avsbus_state = AVSBUS_STATE_PROCESS_CURRENT; break; case AVSBUS_STATE_DISABLED: |