summaryrefslogtreecommitdiffstats
path: root/src/occ_405/amec
diff options
context:
space:
mode:
authorChris Cain <cjcain@us.ibm.com>2017-10-06 12:13:22 -0500
committerWilliam A. Bryan <wilbryan@us.ibm.com>2017-10-19 16:07:25 -0400
commitc07a7207c8b1a2d74cf4cc55120eb8073ee07d96 (patch)
treeda5a7d8afac5b9e318ab5674a10cdf4f8937c990 /src/occ_405/amec
parente00c5e2fad7d87e2a83076a45935bc114fabfe5b (diff)
downloadtalos-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-xsrc/occ_405/amec/amec_health.c15
-rwxr-xr-xsrc/occ_405/amec/amec_health.h4
-rwxr-xr-xsrc/occ_405/amec/amec_sensors_power.c46
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:
OpenPOWER on IntegriCloud