diff options
author | Shawn McCarney <shawnmm@us.ibm.com> | 2017-05-03 17:33:41 -0500 |
---|---|---|
committer | William A. Bryan <wilbryan@us.ibm.com> | 2017-05-09 14:54:59 -0400 |
commit | ff3b5a1c08389bf766de21adcd033e3c7b86af87 (patch) | |
tree | d1083cd7e4b6a7b32287b78d3bf08fe49d2745f7 /src/occ_405/cmdh | |
parent | cc9a1d2f9e8b6f59265944657ab75b7999725210 (diff) | |
download | talos-occ-ff3b5a1c08389bf766de21adcd033e3c7b86af87.tar.gz talos-occ-ff3b5a1c08389bf766de21adcd033e3c7b86af87.zip |
OCC: Non-GPU Sensors to main memory: Phase 2
Added the following new min/max fields to the sensor_t struct:
* CSM_sample_min
* CSM_sample_max
* profiler_sample_min
* profiler_sample_max
* job_s_sample_min
* job_s_sample_max
Also added the following new debug pass-through commands:
* DBUG_DUMP_AME_SENSOR - Dumps all fields (dynamic & static) for 1 sensor
* DBUG_CLEAR_AME_SENSOR - Clears min/max fields and returns updated fields
Change-Id: I95353417da73cdb67e23fcda1a03c4af6993c658
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40161
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/cmdh')
-rwxr-xr-x | src/occ_405/cmdh/cmdh_fsp_cmds.c | 112 | ||||
-rwxr-xr-x | src/occ_405/cmdh/cmdh_fsp_cmds.h | 40 |
2 files changed, 149 insertions, 3 deletions
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.c b/src/occ_405/cmdh/cmdh_fsp_cmds.c index 021fd7b..3071687 100755 --- a/src/occ_405/cmdh/cmdh_fsp_cmds.c +++ b/src/occ_405/cmdh/cmdh_fsp_cmds.c @@ -5,7 +5,7 @@ /* */ /* OpenPOWER OnChipController Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2016 */ +/* Contributors Listed Below - COPYRIGHT 2011,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -978,6 +978,108 @@ void cmdh_dbug_get_apss_data (const cmdh_fsp_cmd_t * i_cmd_ptr, o_rsp_ptr->data_length[1] = ((uint8_t *)&l_resp_data_length)[1]; } + +// Function Specification +// +// Name: cmdh_dbug_dump_ame_sensor +// +// Description: Returns all fields (static and dynamic) for one sensor +// +// End Function Specification +void cmdh_dbug_dump_ame_sensor(const cmdh_fsp_cmd_t * i_cmd_ptr, + cmdh_fsp_rsp_t * o_rsp_ptr) +{ + const cmdh_dbug_dump_ame_sensor_cmd_t * l_cmd_ptr = (cmdh_dbug_dump_ame_sensor_cmd_t*) i_cmd_ptr; + cmdh_dbug_dump_ame_sensor_rsp_t * l_rsp_ptr = (cmdh_dbug_dump_ame_sensor_rsp_t*) o_rsp_ptr; + uint8_t l_rc = ERRL_RC_SUCCESS; // Assume succeeds + uint16_t l_resp_data_length = 0; + + // Make sure command and response pointer are valid + if ((l_cmd_ptr == NULL) || (l_rsp_ptr == NULL)) + { + l_rc = ERRL_RC_INTERNAL_FAIL; + } + else + { + // Make sure sensor gsid is valid + uint16_t l_gsid = l_cmd_ptr->gsid; + if (l_gsid >= G_amec_sensor_count) + { + l_rc = ERRL_RC_INVALID_DATA; + } + else + { + // Copy static sensor fields into response struct + memcpy(&(l_rsp_ptr->sensor_info), &(G_sensor_info[l_gsid]), sizeof(sensor_info_t)); + l_resp_data_length += sizeof(sensor_info_t); + + // Copy dynamic sensor fields into response struct + memcpy(&(l_rsp_ptr->sensor), G_amec_sensor_list[l_gsid], sizeof(sensor_t)); + l_resp_data_length += sizeof(sensor_t); + } + } + + // Populate the response data header + if (l_rsp_ptr != NULL) + { + l_rsp_ptr->data_length[0] = CONVERT_UINT16_UINT8_HIGH(l_resp_data_length); + l_rsp_ptr->data_length[1] = CONVERT_UINT16_UINT8_LOW(l_resp_data_length); + } + G_rsp_status = l_rc; +} + + +// Function Specification +// +// Name: cmdh_dbug_clear_ame_sensor +// +// Description: Clears minimum and maximum fields in one sensor. +// Returns all dynamic sensor fields after the clear. +// +// End Function Specification +void cmdh_dbug_clear_ame_sensor(const cmdh_fsp_cmd_t * i_cmd_ptr, + cmdh_fsp_rsp_t * o_rsp_ptr) +{ + const cmdh_dbug_clear_ame_sensor_cmd_t * l_cmd_ptr = (cmdh_dbug_clear_ame_sensor_cmd_t*) i_cmd_ptr; + cmdh_dbug_clear_ame_sensor_rsp_t * l_rsp_ptr = (cmdh_dbug_clear_ame_sensor_rsp_t*) o_rsp_ptr; + uint8_t l_rc = ERRL_RC_SUCCESS; // Assume succeeds + uint16_t l_resp_data_length = 0; + + // Make sure command and response pointer are valid + if ((l_cmd_ptr == NULL) || (l_rsp_ptr == NULL)) + { + l_rc = ERRL_RC_INTERNAL_FAIL; + } + else + { + // Make sure sensor gsid is valid + uint16_t l_gsid = l_cmd_ptr->gsid; + if (l_gsid >= G_amec_sensor_count) + { + l_rc = ERRL_RC_INVALID_DATA; + } + else + { + // Clear specified min/max fields in sensor + AMEC_SENSOR_CLEAR_TYPE l_clear_type = (AMEC_SENSOR_CLEAR_TYPE) l_cmd_ptr->clear_type; + sensor_clear_minmax(G_amec_sensor_list[l_gsid], l_clear_type); + + // Copy dynamic sensor fields (after clear) into response struct + memcpy(&(l_rsp_ptr->sensor), G_amec_sensor_list[l_gsid], sizeof(sensor_t)); + l_resp_data_length += sizeof(sensor_t); + } + } + + // Populate the response data header + if (l_rsp_ptr != NULL) + { + l_rsp_ptr->data_length[0] = CONVERT_UINT16_UINT8_HIGH(l_resp_data_length); + l_rsp_ptr->data_length[1] = CONVERT_UINT16_UINT8_LOW(l_resp_data_length); + } + G_rsp_status = l_rc; +} + + // Function Specification // // Name: dbug_parse_cmd @@ -1090,6 +1192,14 @@ void cmdh_dbug_cmd (const cmdh_fsp_cmd_t * i_cmd_ptr, cmdh_dbug_get_apss_data(i_cmd_ptr, o_rsp_ptr); break; + case DBUG_DUMP_AME_SENSOR: + cmdh_dbug_dump_ame_sensor(i_cmd_ptr, o_rsp_ptr); + break; + + case DBUG_CLEAR_AME_SENSOR: + cmdh_dbug_clear_ame_sensor(i_cmd_ptr, o_rsp_ptr); + break; + default: l_rc = ERRL_RC_INVALID_DATA; //should NEVER get here... break; diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.h b/src/occ_405/cmdh/cmdh_fsp_cmds.h index 7529a87..b65c8cc 100755 --- a/src/occ_405/cmdh/cmdh_fsp_cmds.h +++ b/src/occ_405/cmdh/cmdh_fsp_cmds.h @@ -5,7 +5,7 @@ /* */ /* OpenPOWER OnChipController Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2016 */ +/* Contributors Listed Below - COPYRIGHT 2011,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -369,7 +369,9 @@ typedef enum DBUG_CENTAUR_SENSOR_CACHE = 0x22, DBUG_DUMP_PROC_DATA = 0x23, DBUG_GEN_CHOM_LOG = 0x24, - DBUG_DUMP_APSS_DATA = 0x25 + DBUG_DUMP_APSS_DATA = 0x25, + DBUG_DUMP_AME_SENSOR = 0x26, + DBUG_CLEAR_AME_SENSOR = 0x27 } DBUG_CMD; // Used by OCC tool to get trace, version 0. @@ -486,6 +488,40 @@ typedef struct __attribute__ ((packed)) uint8_t checksum[2]; } cmdh_dbug_apss_data_resp_t; +// DBUG_DUMP_AME_SENSOR command struct +typedef struct __attribute__ ((packed)) +{ + struct cmdh_fsp_cmd_header; // Standard command header + uint8_t sub_cmd; // Debug sub-command + uint16_t gsid; // Global Sensor ID +} cmdh_dbug_dump_ame_sensor_cmd_t; + +// DBUG_DUMP_AME_SENSOR response struct +typedef struct __attribute__ ((packed)) +{ + struct cmdh_fsp_rsp_header; // Standard response header + sensor_info_t sensor_info; // Static sensor fields + sensor_t sensor; // Dynamic sensor fields + uint8_t checksum[CMDH_FSP_CHECKSUM_SIZE]; // Checksum +} cmdh_dbug_dump_ame_sensor_rsp_t; + +// DBUG_CLEAR_AME_SENSOR command struct +typedef struct __attribute__ ((packed)) +{ + struct cmdh_fsp_cmd_header; // Standard command header + uint8_t sub_cmd; // Debug sub-command + uint16_t gsid; // Global Sensor ID + uint16_t clear_type; // Fields to clear (AMEC_SENSOR_CLEAR_TYPE) +} cmdh_dbug_clear_ame_sensor_cmd_t; + +// DBUG_CLEAR_AME_SENSOR response struct +typedef struct __attribute__ ((packed)) +{ + struct cmdh_fsp_rsp_header; // Standard response header + sensor_t sensor; // Dynamic sensor fields + uint8_t checksum[CMDH_FSP_CHECKSUM_SIZE]; // Checksum +} cmdh_dbug_clear_ame_sensor_rsp_t; + //--------------------------------------------------------- // Tunable Parameter Command //--------------------------------------------------------- |