summaryrefslogtreecommitdiffstats
path: root/src/occ_405/cmdh
diff options
context:
space:
mode:
authorShawn McCarney <shawnmm@us.ibm.com>2017-05-03 17:33:41 -0500
committerWilliam A. Bryan <wilbryan@us.ibm.com>2017-05-09 14:54:59 -0400
commitff3b5a1c08389bf766de21adcd033e3c7b86af87 (patch)
treed1083cd7e4b6a7b32287b78d3bf08fe49d2745f7 /src/occ_405/cmdh
parentcc9a1d2f9e8b6f59265944657ab75b7999725210 (diff)
downloadtalos-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-xsrc/occ_405/cmdh/cmdh_fsp_cmds.c112
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds.h40
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
//---------------------------------------------------------
OpenPOWER on IntegriCloud