From 6ff7b2615b6eb6c19f64babf7a724923c12c34b3 Mon Sep 17 00:00:00 2001 From: Chris Cain Date: Wed, 15 Feb 2017 14:24:23 -0600 Subject: [PATCH] Add individual DIMM temperature sensor support Change-Id: If5b024f031d4b266603720d126fce88bf2362e1a Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/36528 Tested-by: FSP CI Jenkins Reviewed-by: Martha Broyles Reviewed-by: William A. Bryan Reviewed-by: Christopher J. Cain --- src/occ_405/amec/amec_amester.c | 17 ------- src/occ_405/amec/amec_analytics.c | 13 +----- src/occ_405/amec/amec_controller.c | 4 +- src/occ_405/amec/amec_health.c | 2 +- src/occ_405/amec/amec_sensors_centaur.c | 2 +- src/occ_405/amec/amec_sys.h | 7 ++- src/occ_405/dcom/dcom.h | 5 +- src/occ_405/dimm/dimm.c | 46 +++++++------------ src/occ_405/dimm/dimm.h | 5 ++ src/occ_405/sensor/sensor_enum.h | 25 ++++++++-- src/occ_405/sensor/sensor_info.c | 61 ++++++++++++++++++++----- src/occ_405/sensor/sensor_table.c | 35 ++++++++++---- src/occ_405/thread/chom.c | 4 +- 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 e70b7e1e..90107ca8 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 c806292d..80bb2ce7 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 1ee51691..5bc858c8 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 0495a929..0f0edf73 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 3e050f9e..6871a56c 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 e2335cd1..7fd0f957 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 c7e0b4bf..2b443647 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 496814bc..da48681f 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 15ea5d6f..db674ccd 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 9b70941c..1e2b4d93 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 a664f69c..484c6b36 100755 --- a/src/occ_405/sensor/sensor_info.c +++ b/src/occ_405/sensor/sensor_info.c @@ -26,11 +26,12 @@ #include // STATIC_ASSERT macro #include // 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% @@ -157,6 +158,44 @@ .sensor = { units, type, location, number, frequency, scaleFactor },} +// 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. @@ -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 3761b4ae..65033956 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 44c17af9..979d44d2 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;