summaryrefslogtreecommitdiffstats
path: root/src/occ_gpe0/apss_read.c
diff options
context:
space:
mode:
authorDoug Gilbert <dgilbert@us.ibm.com>2017-10-13 12:37:57 -0500
committerWilliam A. Bryan <wilbryan@us.ibm.com>2017-10-19 12:34:58 -0400
commit619a19c8bfc710697696bda561d20b777696711a (patch)
tree974368dd07814f3e15f7a599b0b16f31d39831b1 /src/occ_gpe0/apss_read.c
parent1522d76c9df97e9bb9e994afff455e013b6f56fa (diff)
downloadtalos-occ-619a19c8bfc710697696bda561d20b777696711a.tar.gz
talos-occ-619a19c8bfc710697696bda561d20b777696711a.zip
Timebase overflow issue in gpe0
Change-Id: I555873ef13b5094f3499085f8aafb40ce4cc4320 CQ: SW403677 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48464 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Martha Broyles <mbroyles@us.ibm.com> Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com> Reviewed-by: William A. Bryan <wilbryan@us.ibm.com>
Diffstat (limited to 'src/occ_gpe0/apss_read.c')
-rw-r--r--src/occ_gpe0/apss_read.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/occ_gpe0/apss_read.c b/src/occ_gpe0/apss_read.c
index c6065bb..b04a134 100644
--- a/src/occ_gpe0/apss_read.c
+++ b/src/occ_gpe0/apss_read.c
@@ -32,8 +32,16 @@
#include <apss_structs.h>
#include "gpe_util.h"
+#define MAX_EXECUTION_TIMER (PK_INTERVAL_SCALE((uint32_t)PK_MICROSECONDS(250)))
+
extern uint8_t G_apss_mode;
extern gpe_shared_data_t * G_gpe_shared_data;
+
+
+uint32_t g_max_apss_start __attribute__((section(".sbss.debug"))) = 0;
+uint32_t g_max_apss_cont __attribute__((section(".sbss.debug"))) = 0;
+uint32_t g_max_apss_comp __attribute__((section(".sbss.debug"))) = 0;
+
/*
* Function Specifications:
*
@@ -58,6 +66,9 @@ void apss_start_pwr_meas_read(ipc_msg_t* cmd, void* arg)
#ifdef DEBUG_APSS_SEQ
PK_TRACE("apss_start_pwr_meas_read: enter");
#endif
+ uint32_t end_time = 0;
+ uint32_t diff_time = 0;
+ uint32_t start_time = pk_timebase32_get();
int rc;
uint64_t regValue; // a pointer to hold the putscom_abs register value
@@ -172,6 +183,21 @@ void apss_start_pwr_meas_read(ipc_msg_t* cmd, void* arg)
#ifdef DEBUG_APSS_SEQ
PK_TRACE("apss_start_pwr_meas_read: calling ipc_send_rsp()");
#endif
+ end_time = pk_timebase32_get();
+
+ diff_time = end_time - start_time;
+
+ if(diff_time > g_max_apss_start)
+ {
+ g_max_apss_start = diff_time;
+
+ if(diff_time > MAX_EXECUTION_TIMER)
+ {
+ PK_TRACE("apss_start_pwr_meas_read took longer than expected. Delta OTBR: %x",
+ diff_time);
+ }
+ }
+
// send back a response, IPC success even if ffdc/rc are non zeros
rc = ipc_send_rsp(cmd, IPC_RC_SUCCESS);
@@ -206,6 +232,10 @@ void apss_continue_pwr_meas_read(ipc_msg_t* cmd, void* arg)
// the ipc arguments are passed through the ipc_msg_t structure, has a pointer
// to the G_gpe_continue_pwr_meas_read_args
+ uint32_t end_time = 0;
+ uint32_t diff_time = 0;
+ uint32_t start_time = pk_timebase32_get();
+
uint64_t regValue = 0;
int rc;
ipc_async_cmd_t *async_cmd = (ipc_async_cmd_t*)cmd;
@@ -318,6 +348,21 @@ void apss_continue_pwr_meas_read(ipc_msg_t* cmd, void* arg)
PK_TRACE("apss_continue_pwr_meas_read: calling ipc_send_rsp()");
#endif
+ end_time = pk_timebase32_get();
+
+ diff_time = end_time - start_time;
+
+ if(diff_time > g_max_apss_cont)
+ {
+ g_max_apss_cont = diff_time;
+
+ if(diff_time > MAX_EXECUTION_TIMER)
+ {
+ PK_TRACE("apss_continue took longer than expected. Delta OTBR: %x",
+ diff_time);
+ }
+ }
+
// send back a response, IPC success (even if ffdc/rc are non zeros)
rc = ipc_send_rsp(cmd, IPC_RC_SUCCESS);
if(rc)
@@ -354,6 +399,10 @@ void apss_complete_pwr_meas_read(ipc_msg_t* cmd, void* arg)
#ifdef DEBUG_APSS_SEQ
PK_TRACE("apss_complete_pwr_meas_read: enter");
#endif
+ uint32_t end_time = 0;
+ uint32_t diff_time = 0;
+ uint32_t start_time = pk_timebase32_get();
+
int rc;
ipc_async_cmd_t *async_cmd = (ipc_async_cmd_t*)cmd;
@@ -404,6 +453,20 @@ void apss_complete_pwr_meas_read(ipc_msg_t* cmd, void* arg)
#ifdef DEBUG_APSS_SEQ
PK_TRACE("apss_complete_pwr_meas_read: calling ipc_send_rsp()");
#endif
+ end_time = pk_timebase32_get();
+
+ diff_time = end_time - start_time;
+
+ if(diff_time > g_max_apss_comp)
+ {
+ g_max_apss_comp = diff_time;
+
+ if(diff_time > MAX_EXECUTION_TIMER)
+ {
+ PK_TRACE("apss_complete took longer than expected. Delta OTBR: %x",
+ diff_time);
+ }
+ }
// send back a response, IPC success (even if ffdc/rc are non zeros)
rc = ipc_send_rsp(cmd, IPC_RC_SUCCESS);
OpenPOWER on IntegriCloud