summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChris Cain <cjcain@us.ibm.com>2017-02-15 14:24:23 -0600
committerChristopher J. Cain <cjcain@us.ibm.com>2017-02-15 17:29:43 -0500
commit6ff7b2615b6eb6c19f64babf7a724923c12c34b3 (patch)
tree120bd0e30ea65763912150fc178bd76832de959f /src
parent7d221393954c02379f488a38d3e97c33f46178cd (diff)
downloadtalos-occ-6ff7b2615b6eb6c19f64babf7a724923c12c34b3.tar.gz
talos-occ-6ff7b2615b6eb6c19f64babf7a724923c12c34b3.zip
Add individual DIMM temperature sensor support
Change-Id: If5b024f031d4b266603720d126fce88bf2362e1a Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/36528 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> Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com>
Diffstat (limited to 'src')
-rwxr-xr-xsrc/occ_405/amec/amec_amester.c17
-rwxr-xr-xsrc/occ_405/amec/amec_analytics.c13
-rw-r--r--src/occ_405/amec/amec_controller.c4
-rwxr-xr-xsrc/occ_405/amec/amec_health.c2
-rw-r--r--src/occ_405/amec/amec_sensors_centaur.c2
-rwxr-xr-xsrc/occ_405/amec/amec_sys.h7
-rwxr-xr-xsrc/occ_405/dcom/dcom.h5
-rwxr-xr-xsrc/occ_405/dimm/dimm.c46
-rw-r--r--src/occ_405/dimm/dimm.h5
-rwxr-xr-xsrc/occ_405/sensor/sensor_enum.h25
-rwxr-xr-xsrc/occ_405/sensor/sensor_info.c61
-rwxr-xr-xsrc/occ_405/sensor/sensor_table.c35
-rwxr-xr-xsrc/occ_405/thread/chom.c4
13 files changed, 130 insertions, 96 deletions
diff --git a/src/occ_405/amec/amec_amester.c b/src/occ_405/amec/amec_amester.c
index e70b7e1..90107ca 100755
--- a/src/occ_405/amec/amec_amester.c
+++ b/src/occ_405/amec/amec_amester.c
@@ -754,23 +754,6 @@ uint8_t amester_manual_throttle( const IPMIMsg_t * i_msg,
}
- case 24: // parameter 24: set ambient and fan speed sensors
- {
- // Set ambient temperature (8 bits)
- temp16=(uint16_t)i_msg->au8CmdData_ptr[2];
- sensor_update(AMECSENSOR_PTR(TEMPAMBIENT), temp16);
- // Set average fan speed (16 bits)
- temp16=((uint16_t)i_msg->au8CmdData_ptr[3]<<8)+(uint16_t)i_msg->au8CmdData_ptr[4];
- sensor_update(AMECSENSOR_PTR(FANSPEEDAVG), temp16);
- o_resp[0]=i_msg->au8CmdData_ptr[2];
- o_resp[1]=i_msg->au8CmdData_ptr[3];
- o_resp[2]=i_msg->au8CmdData_ptr[3];
- *io_resp_length=3;
- l_rc = COMPCODE_NORMAL;
- break;
- }
-
-
case 29: // parameter 29: Control vector recording modes and stream rates.
{
g_amec->stream_vector_rate=255; // First step is to set an invalid rate so no recording done at all
diff --git a/src/occ_405/amec/amec_analytics.c b/src/occ_405/amec/amec_analytics.c
index c806292..80bb2ce 100755
--- a/src/occ_405/amec/amec_analytics.c
+++ b/src/occ_405/amec/amec_analytics.c
@@ -437,11 +437,6 @@ void amec_analytics_main(void)
// Now, update Group 45 analytics packed array
switch (g_amec->analytics_thermal_offset)
{
- case 0:
- tempreg = (g_amec->sys.tempambient.sample) << 8; // upper byte
- tempreg = tempreg | 0x8000; // Turn on MSBit for temporal frame sync
- break;
-
case 1:
if (g_amec->mst_ips_parms.active == 0)
{
@@ -459,12 +454,8 @@ void amec_analytics_main(void)
tempreg=(g_amec->mst_ips_parms.active)<<8; // upper byte
break;
- case 3:
- tempreg = (g_amec->fan.fanspeedavg.sample / 100) << 8; // upper byte (100 RPM resolution)
- break;
-
case 4:
- tempreg = (g_amec->proc[0].temp16msdimm.sample) << 8; // upper byte
+ tempreg = (g_amec->proc[0].tempdimmthrm.sample) << 8; // upper byte
break;
case 5:
@@ -472,7 +463,7 @@ void amec_analytics_main(void)
break;
case 6:
- // tempreg=(g_amec->proc[2].temp16msdimm.sample)<<8; // upper byte
+ // tempreg=(g_amec->proc[2].tempdimmthrm.sample)<<8; // upper byte
tempreg = 0;
break;
diff --git a/src/occ_405/amec/amec_controller.c b/src/occ_405/amec/amec_controller.c
index 1ee5169..5bc858c 100644
--- a/src/occ_405/amec/amec_controller.c
+++ b/src/occ_405/amec/amec_controller.c
@@ -176,8 +176,8 @@ void amec_controller_dimm_thermal()
/*------------------------------------------------------------------------*/
/* Code */
/*------------------------------------------------------------------------*/
- // Get TEMP16MSDIMM sensor value
- l_sensor = getSensorByGsid(TEMP16MSDIMM);
+ // Get TEMPDIMMTHRM sensor value
+ l_sensor = getSensorByGsid(TEMPDIMMTHRM);
if(G_dimm_temp_expired_bitmap.bigword)
{
diff --git a/src/occ_405/amec/amec_health.c b/src/occ_405/amec/amec_health.c
index 0495a92..0f0edf7 100755
--- a/src/occ_405/amec/amec_health.c
+++ b/src/occ_405/amec/amec_health.c
@@ -165,7 +165,7 @@ void amec_health_check_dimm_temp()
}
l_ot_error = g_amec->thermaldimm.ot_error;
- l_sensor = getSensorByGsid(TEMP16MSDIMM);
+ l_sensor = getSensorByGsid(TEMPDIMMTHRM);
l_cur_temp = l_sensor->sample;
l_max_temp = l_sensor->sample_max;
TRAC_ERR("amec_health_check_dimm_temp: DIMM reached error temp[%d]. cur_max[%d], hist_max[%d]",
diff --git a/src/occ_405/amec/amec_sensors_centaur.c b/src/occ_405/amec/amec_sensors_centaur.c
index 3e050f9..6871a56 100644
--- a/src/occ_405/amec/amec_sensors_centaur.c
+++ b/src/occ_405/amec/amec_sensors_centaur.c
@@ -415,7 +415,7 @@ void amec_update_centaur_temp_sensors(void)
l_hot = g_amec->proc[0].memctl[k].centaur.tempdimmax.sample;
}
}
- sensor_update(&g_amec->proc[0].temp16msdimm,l_hot);
+ sensor_update(&g_amec->proc[0].tempdimmthrm,l_hot);
AMEC_DBG("HotDimm=%d\n",l_hot);
}
diff --git a/src/occ_405/amec/amec_sys.h b/src/occ_405/amec/amec_sys.h
index e2335cd..7fd0f95 100755
--- a/src/occ_405/amec/amec_sys.h
+++ b/src/occ_405/amec/amec_sys.h
@@ -95,7 +95,6 @@ typedef struct
typedef struct
{
// Sensors
- sensor_t fanspeedavg;
sensor_t pwr250usfan;
} amec_fans_t;
@@ -358,8 +357,6 @@ typedef struct
typedef struct
{
// System Sensors
- sensor_t tempambient;
- sensor_t altitude;
sensor_t pwr250us;
sensor_t pwr250usgpu;
sensor_t pwrapssch[MAX_APSS_ADC_CHANNELS];
@@ -468,8 +465,10 @@ typedef struct
// Memory Summary Sensors
sensor_t temp2mscent;
- sensor_t temp16msdimm;
+ sensor_t tempdimmthrm;
sensor_t memsp2ms_tls;
+ // Nimbus DIMM Sensors
+ sensor_t tempdimm[NUM_DIMM_PORTS*NUM_DIMMS_PER_I2CPORT];
sensor_t curvdn;
sensor_t pwrvdd;
diff --git a/src/occ_405/dcom/dcom.h b/src/occ_405/dcom/dcom.h
index c7e0b4b..2b44364 100755
--- a/src/occ_405/dcom/dcom.h
+++ b/src/occ_405/dcom/dcom.h
@@ -134,8 +134,7 @@ typedef struct __attribute__ ((packed))
// From APSS Power Measurement
uint16_t adc[MAX_APSS_ADC_CHANNELS]; // [2] - 32 bytes
uint16_t gpio[MAX_APSS_GPIO_PORTS]; // [34] - 4 bytes
- uint16_t ambient_temp; // [38] - 2 bytes
- uint16_t altitude; // [40] - 2 bytes
+ uint32_t reserved2; // [38] - 4 bytes
uint8_t tod[ TOD_SIZE ]; // [42] - 6 bytes
// Manufacturing parameters
@@ -207,7 +206,7 @@ typedef struct __attribute__ ((packed))
uint16_t pwrpx250usp0cy[MAX_CORES]; // [260]
uint16_t todclock[NUM_TOD_SENSORS]; // [308]
uint16_t temp2mscent; // [314]
- uint16_t temp16msdimm; // [316]
+ uint16_t tempdimmthrm; // [316]
uint16_t util4msp0; // [318]
uint16_t ips4msp0; // [320]
uint16_t nutil3sp0cy[MAX_CORES]; // [322]
diff --git a/src/occ_405/dimm/dimm.c b/src/occ_405/dimm/dimm.c
index 496814b..da48681 100755
--- a/src/occ_405/dimm/dimm.c
+++ b/src/occ_405/dimm/dimm.c
@@ -50,18 +50,14 @@ extern bool G_mem_monitoring_allowed;
extern memory_control_task_t G_memory_control_task;
uint8_t G_dimm_state = DIMM_STATE_INIT; // Curret state of DIMM state machine
-uint8_t G_maxDimmPorts = NUM_DIMM_PORTS;
+// G_maxDimmPort is the maximum I2C port number (1 indicates port 0 and 1 are valid)
+uint8_t G_maxDimmPort = NUM_DIMM_PORTS - 1;
bool G_dimm_i2c_reset_required = false;
uint32_t G_dimm_i2c_reset_cause = 0;
#define MAX_CONSECUTIVE_DIMM_RESETS 1
-// On Nimbus, we are using the centaur number as the I2C port (keep same structure)
-// There can be 8 DIMMs under a Centaur and 8 DIMMs per I2C port (max of 2 ports)
-// DIMM code assumed that NUM_DIMMS_PER_I2CPORT == NUM_DIMMS_PER_CENTAUR
-#define NUM_DIMMS_PER_I2CPORT 8
-
typedef struct {
bool disabled;
uint8_t errorCount;
@@ -72,6 +68,8 @@ dimmData_t G_dimm[NUM_DIMM_PORTS][NUM_DIMMS_PER_I2CPORT] = {{{false,0}}};
#define MAX_TICK_COUNT_WAIT 2
#define DIMM_AND_PORT ((G_dimm_sm_args.i2cPort<<8) | G_dimm_sm_args.dimm)
+#define DIMM_INDEX(port,dimm) ((port*NUM_DIMMS_PER_I2CPORT)+dimm)
+
// GPE Requests
GpeRequest G_dimm_sm_request;
@@ -193,7 +191,7 @@ void memory_nimbus_init()
* @reasoncode SSX_GENERIC_FAILURE
* @userdata1 l_rc_gpe - Return code of failing function
* @userdata2 0
- * @userdata4 ERC_CENTAUR_GPE_REQUEST_CREATE_FAILURE
+ * @userdata4 OCC_NO_EXTENDED_RC
* @devdesc Failed to initialize GPE1 DIMM IPC job
*/
l_err = createErrl(
@@ -217,34 +215,21 @@ void memory_nimbus_init()
void update_hottest_dimm()
{
// Find/save the hottest DIMM temperature for the last set of readings
- uint8_t hottest = 0, hottest_loc = 0;
+ uint8_t hottest = 0;
int pIndex, dIndex;
- for (pIndex = 0; pIndex < G_maxDimmPorts; ++pIndex)
+ for (pIndex = 0; pIndex < NUM_DIMM_PORTS; ++pIndex)
{
for (dIndex = 0; dIndex < NUM_DIMMS_PER_I2CPORT; ++dIndex)
{
if (g_amec->proc[0].memctl[pIndex].centaur.dimm_temps[dIndex].cur_temp > hottest)
{
hottest = g_amec->proc[0].memctl[pIndex].centaur.dimm_temps[dIndex].cur_temp;
- hottest_loc = (pIndex*8) + dIndex;
}
}
}
- DIMM_DBG("update_hottest_dimm: hottest DIMM temp for this sample: %dC (loc=%d)", hottest, hottest_loc);
- if(hottest > g_amec->proc[0].memctl[0].centaur.tempdimmax.sample_max)
- {
- // Save hottest DIMM location ever sampled. There is no location for the temp16msdimm
- // sensor, so just store it in memctl[0] location.
- DIMM_DBG("update_hottest_dimm: Hottest DIMM ever sampled was DIMM%d %dC (prior %dC)",
- hottest_loc, hottest, g_amec->proc[0].memctl[0].centaur.tempdimmax.sample_max);
- // Store the hottest DIMM location in locdimmax sensor
- sensor_update(&g_amec->proc[0].memctl[0].centaur.locdimmax, hottest_loc);
- }
- // Store the hottest DIMM temp in tempdimmax sensor
- sensor_update(&g_amec->proc[0].memctl[0].centaur.tempdimmax, hottest);
- // Store the hottest DIMM temp in temp16msdimm sensor
- sensor_update(&g_amec->proc[0].temp16msdimm, hottest);
+ // Store the hottest DIMM temp sensor
+ sensor_update(AMECSENSOR_PTR(TEMPDIMMTHRM), hottest);
}
@@ -324,7 +309,7 @@ void mark_dimm_failed()
G_sysConfigData.dimm_huids[port][dimm],
ERRL_CALLOUT_PRIORITY_HIGH);
//Mark DIMM as logged so we don't log it again
- amec_mem_mark_logged(port, dimm,
+ amec_mem_mark_logged(0, dimm,
&G_cent_timeout_logged_bitmap,
&G_dimm_timeout_logged_bitmap.bytes[port]);
commitErrl(&l_err);
@@ -507,7 +492,7 @@ uint8_t dimm_reset_sm()
case DIMM_STATE_RESET_SLAVE_P0_COMPLETE:
if (schedule_dimm_req(DIMM_STATE_RESET_SLAVE_P0_COMPLETE, L_new_dimm_args))
{
- if (G_maxDimmPorts > 1)
+ if (G_maxDimmPort > 0)
{
nextState = DIMM_STATE_RESET_SLAVE_P1;
}
@@ -718,6 +703,9 @@ void process_dimm_temp()
}
l_fru->cur_temp = l_dimm_temp;
+ // Store DIMM temp in sensor
+ sensor_update(&g_amec->proc[0].tempdimm[DIMM_INDEX(port, dimm)], l_dimm_temp);
+
G_dimm[port][dimm].errorCount = 0;
} // end process_dimm_temp()
@@ -843,10 +831,10 @@ void task_dimm_sm(struct task *i_self)
{
case DIMM_STATE_INIT:
// Save max I2C ports
- if (G_maxDimmPorts != G_dimm_sm_args.maxPorts)
+ if (G_maxDimmPort != G_dimm_sm_args.maxPorts)
{
- G_maxDimmPorts = G_dimm_sm_args.maxPorts;
- DIMM_DBG("task_dimm_sm: updating DIMM Max I2C Ports to %d", G_maxDimmPorts);
+ G_maxDimmPort = G_dimm_sm_args.maxPorts;
+ DIMM_DBG("task_dimm_sm: updating DIMM Max I2C Port to %d", G_maxDimmPort);
}
break;
diff --git a/src/occ_405/dimm/dimm.h b/src/occ_405/dimm/dimm.h
index 15ea5d6..db674cc 100644
--- a/src/occ_405/dimm/dimm.h
+++ b/src/occ_405/dimm/dimm.h
@@ -56,6 +56,11 @@ extern uint16_t G_configured_mbas;
#define NUM_DIMM_PORTS 2
+// On Nimbus, we are using the centaur number as the I2C port (keep same structure)
+// There can be 8 DIMMs under a Centaur and 8 DIMMs per I2C port (max of 2 ports)
+// DIMM code assumed that NUM_DIMMS_PER_I2CPORT == NUM_DIMMS_PER_CENTAUR
+#define NUM_DIMMS_PER_I2CPORT 8
+
#define DIMM_TICK (CURRENT_TICK % MAX_NUM_TICKS)
diff --git a/src/occ_405/sensor/sensor_enum.h b/src/occ_405/sensor/sensor_enum.h
index 9b70941..1e2b4d9 100755
--- a/src/occ_405/sensor/sensor_enum.h
+++ b/src/occ_405/sensor/sensor_enum.h
@@ -76,14 +76,11 @@ enum e_gsid
// ------------------------------------------------------
// System Sensors
// ------------------------------------------------------
- TEMPAMBIENT, // Ambient Temp of System (from APSS)
- ALTITUDE, // Altitude of System (from APSS)
PWR250US, // System DC Power (from APSS)
PWR250USFAN, // Fan Power (from APSS)
PWR250USIO, // IO Subsystem Power (from APSS)
PWR250USSTORE, // Storage Subsys Power (from APSS)
PWRGPU, // GPU Subsystem Power (from APSS) e.g. Nvidia GPU
- FANSPEEDAVG, // Average Fan Speed (from DPSS)
PWRAPSSCH0, // These PWRAPSSCH sensors are used to report the power
PWRAPSSCH1, // provided by each of the 16 APSS channels.
PWRAPSSCH2,
@@ -495,6 +492,8 @@ enum e_gsid
MWR2MSP0M6,
MWR2MSP0M7,
+ // TODO: RTC 163359 - Determine if we want to store individual DIMM temps for CENTAUR
+ // or continue to use max DIMM temp/location under each CENTAUR.
TEMPDIMMAXP0M0,
TEMPDIMMAXP0M1,
TEMPDIMMAXP0M2,
@@ -513,6 +512,24 @@ enum e_gsid
LOCDIMMAXP0M6,
LOCDIMMAXP0M7,
+ // Individual DIMM temperatures (NIMBUS)
+ TEMPDIMM00,
+ TEMPDIMM01,
+ TEMPDIMM02,
+ TEMPDIMM03,
+ TEMPDIMM04,
+ TEMPDIMM05,
+ TEMPDIMM06,
+ TEMPDIMM07,
+ TEMPDIMM08,
+ TEMPDIMM09,
+ TEMPDIMM10,
+ TEMPDIMM11,
+ TEMPDIMM12,
+ TEMPDIMM13,
+ TEMPDIMM14,
+ TEMPDIMM15,
+
// ------------------------------------------------------
// Centaur Sensors - 8 MemC/Proc - 1 Cent/MemC - 2 PP/Cent
// ------------------------------------------------------
@@ -705,7 +722,7 @@ enum e_gsid
MLP2P0M7,
TEMP2MSCENT,
- TEMP16MSDIMM,
+ TEMPDIMMTHRM,
MEMSP2MS,
// ------------------------------------------------------
diff --git a/src/occ_405/sensor/sensor_info.c b/src/occ_405/sensor/sensor_info.c
index a664f69..484c6b3 100755
--- a/src/occ_405/sensor/sensor_info.c
+++ b/src/occ_405/sensor/sensor_info.c
@@ -26,11 +26,12 @@
#include <occ_common.h> // STATIC_ASSERT macro
#include <sensor.h> // For Sensor defines
-#define AMEEFP_250US_IN_HZ AMEFP(4,3) // 4000 Hz
-#define AMEEFP_500US_IN_HZ AMEFP(2,3) // 2000 Hz
-#define AMEEFP_1MS_IN_HZ AMEFP(1,3) // 1000 Hz
-#define AMEEFP_2MS_IN_HZ AMEFP(5,2) // 500 Hz
-#define AMEEFP_4MS_IN_HZ AMEFP(25,1) // 250 Hz
+#define AMEEFP_250US_IN_HZ AMEFP(4,3) // 4000 Hz
+#define AMEEFP_500US_IN_HZ AMEFP(2,3) // 2000 Hz
+#define AMEEFP_1MS_IN_HZ AMEFP(1,3) // 1000 Hz
+#define AMEEFP_2MS_IN_HZ AMEFP(5,2) // 500 Hz
+#define AMEEFP_4MS_IN_HZ AMEFP(25,1) // 250 Hz
+#define AMEEFP_32MS_IN_HZ AMEFP(3125,-2) // 31.25 Hz
#define AMEEFP_3S_IN_HZ AMEFP(333,-3) // 0.333 Hz
#define AMEFP_SCALE_0_16384 AMEFP(610352,-8) // scalar so that digital 16384=100%
@@ -158,6 +159,44 @@
// This will create a set of 16 sensor entries into the sensor list table.
+// (one for each DIMM...) The base name of the sensor enum must be passed
+// and this macro will take care of the paste & stringify operations.
+#define SENS_DIMM_ENTRY_SET(sensor_name, units, type, location, number, frequency, scaleFactor) \
+ [SENSOR_W_NUM(sensor_name,00)] = {.name = SENSOR_STRING(sensor_name ## 00), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,01)] = {.name = SENSOR_STRING(sensor_name ## 01), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,02)] = {.name = SENSOR_STRING(sensor_name ## 02), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,03)] = {.name = SENSOR_STRING(sensor_name ## 03), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,04)] = {.name = SENSOR_STRING(sensor_name ## 04), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,05)] = {.name = SENSOR_STRING(sensor_name ## 05), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,06)] = {.name = SENSOR_STRING(sensor_name ## 06), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,07)] = {.name = SENSOR_STRING(sensor_name ## 07), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,08)] = {.name = SENSOR_STRING(sensor_name ## 08), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,09)] = {.name = SENSOR_STRING(sensor_name ## 09), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,10)] = {.name = SENSOR_STRING(sensor_name ## 10), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,11)] = {.name = SENSOR_STRING(sensor_name ## 11), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,12)] = {.name = SENSOR_STRING(sensor_name ## 12), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,13)] = {.name = SENSOR_STRING(sensor_name ## 13), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,14)] = {.name = SENSOR_STRING(sensor_name ## 14), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}, \
+ [SENSOR_W_NUM(sensor_name,15)] = {.name = SENSOR_STRING(sensor_name ## 15), \
+ .sensor = { units, type, location, number, frequency, scaleFactor },}
+
+
+// This will create a set of 16 sensor entries into the sensor list table.
// (one for each centaur...) The base name of the sensor enum must be passed
// and this macro will take care of the paste & stringify operations.
#define SEN_CENTR_ENTRY_SET(sensor_name, units, type, location, number, frequency, scaleFactor) \
@@ -229,14 +268,11 @@ const sensor_info_t G_sensor_info[] =
SENSOR_INFO_T_ENTRY( RTLtickdur, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
/* ==SystemSensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( TEMPAMBIENT, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( ALTITUDE, "m\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
SENSOR_INFO_T_ENTRY( PWR250US, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
SENSOR_INFO_T_ENTRY( PWR250USFAN, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
SENSOR_INFO_T_ENTRY( PWR250USIO, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
SENSOR_INFO_T_ENTRY( PWR250USSTORE, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
SENSOR_INFO_T_ENTRY( PWRGPU, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( FANSPEEDAVG, "RPM\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
SENSOR_INFO_T_ENTRY( PWRAPSSCH0, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
SENSOR_INFO_T_ENTRY( PWRAPSSCH1, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
SENSOR_INFO_T_ENTRY( PWRAPSSCH2, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
@@ -312,8 +348,9 @@ const sensor_info_t G_sensor_info[] =
SENS_MEMC_ENTRY_SET( MWR2MSP0M, "GBs\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 128, -5) ),
SENS_MEMC_ENTRY_SET( MIRC2MSP0M, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
SENS_MEMC_ENTRY_SET( MLP2P0M, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENS_MEMC_ENTRY_SET( TEMPDIMMAXP0M, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_MEMC_ENTRY_SET( LOCDIMMAXP0M, "loc\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
+ SENS_DIMM_ENTRY_SET( TEMPDIMM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_32MS_IN_HZ, AMEFP( 1, 0) ),
+ SENS_MEMC_ENTRY_SET( TEMPDIMMAXP0M, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_UNKNOWN, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
+ SENS_MEMC_ENTRY_SET( LOCDIMMAXP0M, "loc\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_UNKNOWN, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
/* ==CentaurSensors== NameString Units Type Location Number Freq ScaleFactor */
SEN_CENTR_ENTRY_SET( MAC2MSP0M, "rps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
@@ -329,8 +366,8 @@ const sensor_info_t G_sensor_info[] =
/* ==MemSummarySensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( TEMP2MSCENT, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( TEMP16MSDIMM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( TEMP2MSCENT, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_UNKNOWN, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( TEMPDIMMTHRM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_32MS_IN_HZ, AMEFP( 1, 0) ),
SENSOR_INFO_T_ENTRY( MEMSP2MS, "%\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
/* ==PartSummarySensors== NameString Units Type Location Number Freq ScaleFactor */
diff --git a/src/occ_405/sensor/sensor_table.c b/src/occ_405/sensor/sensor_table.c
index 3761b4a..6503395 100755
--- a/src/occ_405/sensor/sensor_table.c
+++ b/src/occ_405/sensor/sensor_table.c
@@ -94,6 +94,26 @@ extern amec_sys_t g_amec_sys;
[SENSOR_W_NUM(sensor, 6)] = ptrbase[6].ptrmember, \
[SENSOR_W_NUM(sensor, 7)] = ptrbase[7].ptrmember
+// Will define a set of "memory controller sensor pointers" by passing in
+// base sensor nameand ptr to [0] entry of array of 8 memcontroller sensors
+#define DIMM_SENSOR_PTRS(sensor,ptrbase,ptrmember) \
+ [SENSOR_W_NUM(sensor, 00)] = ptrbase.ptrmember[ 0], \
+ [SENSOR_W_NUM(sensor, 01)] = ptrbase.ptrmember[ 1], \
+ [SENSOR_W_NUM(sensor, 02)] = ptrbase.ptrmember[ 2], \
+ [SENSOR_W_NUM(sensor, 03)] = ptrbase.ptrmember[ 3], \
+ [SENSOR_W_NUM(sensor, 04)] = ptrbase.ptrmember[ 4], \
+ [SENSOR_W_NUM(sensor, 05)] = ptrbase.ptrmember[ 5], \
+ [SENSOR_W_NUM(sensor, 06)] = ptrbase.ptrmember[ 6], \
+ [SENSOR_W_NUM(sensor, 07)] = ptrbase.ptrmember[ 7], \
+ [SENSOR_W_NUM(sensor, 08)] = ptrbase.ptrmember[ 8], \
+ [SENSOR_W_NUM(sensor, 09)] = ptrbase.ptrmember[ 9], \
+ [SENSOR_W_NUM(sensor, 10)] = ptrbase.ptrmember[10], \
+ [SENSOR_W_NUM(sensor, 11)] = ptrbase.ptrmember[11], \
+ [SENSOR_W_NUM(sensor, 12)] = ptrbase.ptrmember[12], \
+ [SENSOR_W_NUM(sensor, 13)] = ptrbase.ptrmember[13], \
+ [SENSOR_W_NUM(sensor, 14)] = ptrbase.ptrmember[14], \
+ [SENSOR_W_NUM(sensor, 15)] = ptrbase.ptrmember[15]
+
// Will define a set of "centaur_port_pair sensor pointers" by passing in
// base sensor nameand ptr to [0] entry of array of 16 memcontroller sensors
#define PORTPAIR_SENSOR_PTRS(sensor,ptrbase,ptrmember,ptrsnsr) \
@@ -294,14 +314,11 @@ const sensor_ptr_t G_amec_sensor_list[] =
// ------------------------------------------------------
// System Sensors
// ------------------------------------------------------
- SENSOR_PTR( TEMPAMBIENT, &g_amec_sys.sys.tempambient),
- SENSOR_PTR( ALTITUDE, &g_amec_sys.sys.altitude),
SENSOR_PTR( PWR250US, &g_amec_sys.sys.pwr250us),
SENSOR_PTR( PWR250USFAN, &g_amec_sys.fan.pwr250usfan),
SENSOR_PTR( PWR250USIO, &g_amec_sys.io.pwr250usio),
SENSOR_PTR( PWR250USSTORE, &g_amec_sys.storage.pwr250usstore),
SENSOR_PTR( PWRGPU, &g_amec_sys.sys.pwr250usgpu),
- SENSOR_PTR( FANSPEEDAVG, &g_amec_sys.fan.fanspeedavg),
SENSOR_PTR( PWRAPSSCH0, &g_amec_sys.sys.pwrapssch[0]),
SENSOR_PTR( PWRAPSSCH1, &g_amec_sys.sys.pwrapssch[1]),
SENSOR_PTR( PWRAPSSCH2, &g_amec_sys.sys.pwrapssch[2]),
@@ -378,6 +395,7 @@ const sensor_ptr_t G_amec_sensor_list[] =
MEMCONTROL_SENSOR_PTRS(MWR2MSP0M, &g_amec_sys.proc[0].memctl, mwr2ms),
MEMCONTROL_SENSOR_PTRS(MIRC2MSP0M, &g_amec_sys.proc[0].memctl, centaur.mirc2ms),
MEMCONTROL_SENSOR_PTRS(MLP2P0M, &g_amec_sys.proc[0].memctl, centaur.mlp2ms),
+ DIMM_SENSOR_PTRS(TEMPDIMM, &g_amec_sys.proc[0], tempdimm),
MEMCONTROL_SENSOR_PTRS(TEMPDIMMAXP0M, &g_amec_sys.proc[0].memctl, centaur.tempdimmax),
MEMCONTROL_SENSOR_PTRS(LOCDIMMAXP0M, &g_amec_sys.proc[0].memctl, centaur.locdimmax),
@@ -393,9 +411,9 @@ const sensor_ptr_t G_amec_sensor_list[] =
PORTPAIR_SENSOR_PTRS(M4WR2MSP0M, &g_amec_sys.proc[0].memctl, centaur.portpair, m4wr2ms),
- SENSOR_PTR( TEMP2MSCENT, &g_amec_sys.proc[0].temp2mscent),
- SENSOR_PTR( TEMP16MSDIMM, &g_amec_sys.proc[0].temp16msdimm),
- SENSOR_PTR( MEMSP2MS, &g_amec_sys.proc[0].memsp2ms_tls),
+ SENSOR_PTR(TEMP2MSCENT, &g_amec_sys.proc[0].temp2mscent),
+ SENSOR_PTR(TEMPDIMMTHRM, &g_amec_sys.proc[0].tempdimmthrm),
+ SENSOR_PTR(MEMSP2MS, &g_amec_sys.proc[0].memsp2ms_tls),
// ------------------------------------------------------
// Regulator Sensors
@@ -470,14 +488,11 @@ const minisensor_ptr_t G_amec_mini_sensor_list[] INIT_SECTION =
// ------------------------------------------------------
// System Sensors
// ------------------------------------------------------
- MINI_SENSOR_PTR( TEMPAMBIENT, NULL),
- MINI_SENSOR_PTR( ALTITUDE, NULL),
MINI_SENSOR_PTR( PWR250US, NULL),
MINI_SENSOR_PTR( PWR250USFAN, NULL),
MINI_SENSOR_PTR( PWR250USIO, NULL),
MINI_SENSOR_PTR( PWR250USSTORE, NULL),
MINI_SENSOR_PTR( PWRGPU, NULL),
- MINI_SENSOR_PTR( FANSPEEDAVG, NULL),
// ------------------------------------------------------
// Chip Sensors
@@ -551,7 +566,7 @@ const minisensor_ptr_t G_amec_mini_sensor_list[] INIT_SECTION =
PORTPAIR_MINI_SENSOR_PTRS_NULL(M4WR2MSP0M),
MINI_SENSOR_PTR( TEMP2MSCENT, &G_dcom_slv_outbox_tx.temp2mscent),
- MINI_SENSOR_PTR( TEMP16MSDIMM, &G_dcom_slv_outbox_tx.temp16msdimm),
+ MINI_SENSOR_PTR( TEMPDIMMTHRM, &G_dcom_slv_outbox_tx.tempdimmthrm),
MINI_SENSOR_PTR( MEMSP2MS, NULL),
// ------------------------------------------------------
diff --git a/src/occ_405/thread/chom.c b/src/occ_405/thread/chom.c
index 44c17af..979d44d 100755
--- a/src/occ_405/thread/chom.c
+++ b/src/occ_405/thread/chom.c
@@ -248,9 +248,9 @@ void chom_update_sensors()
l_max_cent_temp = G_dcom_slv_outbox_rx[i].temp2mscent;
}
- if (G_dcom_slv_outbox_rx[i].temp16msdimm > l_max_dimm_temp)
+ if (G_dcom_slv_outbox_rx[i].tempdimmthrm > l_max_dimm_temp)
{
- l_max_dimm_temp = G_dcom_slv_outbox_rx[i].temp16msdimm;
+ l_max_dimm_temp = G_dcom_slv_outbox_rx[i].tempdimmthrm;
}
}
g_chom->sensorData[0].sensor[CHOMTEMPPROC].sample = l_max_core_temp;
OpenPOWER on IntegriCloud