diff options
author | Chris Cain <cjcain@us.ibm.com> | 2017-02-15 14:24:23 -0600 |
---|---|---|
committer | Christopher J. Cain <cjcain@us.ibm.com> | 2017-02-15 17:29:43 -0500 |
commit | 6ff7b2615b6eb6c19f64babf7a724923c12c34b3 (patch) | |
tree | 120bd0e30ea65763912150fc178bd76832de959f /src/occ_405/sensor | |
parent | 7d221393954c02379f488a38d3e97c33f46178cd (diff) | |
download | talos-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/occ_405/sensor')
-rwxr-xr-x | src/occ_405/sensor/sensor_enum.h | 25 | ||||
-rwxr-xr-x | src/occ_405/sensor/sensor_info.c | 61 | ||||
-rwxr-xr-x | src/occ_405/sensor/sensor_table.c | 35 |
3 files changed, 95 insertions, 26 deletions
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), // ------------------------------------------------------ |