From a84955963839b3a035dd339d3ba13e0acb88547a Mon Sep 17 00:00:00 2001 From: mbroyles Date: Wed, 12 Jul 2017 08:49:44 -0500 Subject: Increase RTL to 500us Stop waiting for APSS data when detected complete but failed Add history counts for GPEs not idle and APSS collection errors Change-Id: I2bfaf36ee0b736a958fd41c1c2145f537fc883c5 RTC: 172963 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43052 Tested-by: FSP CI Jenkins Reviewed-by: Andres A. Lugo-Reyes Reviewed-by: William A. Bryan Reviewed-by: Christopher J. Cain --- src/occ_405/dcom/dcomMasterRx.c | 4 ++-- src/occ_405/dcom/dcomMasterTx.c | 43 ++++++++++++++++++++++++++++++++++------- src/occ_405/dcom/dcomSlaveRx.c | 8 ++++---- src/occ_405/dcom/dcomSlaveTx.c | 4 ++-- 4 files changed, 44 insertions(+), 15 deletions(-) (limited to 'src/occ_405/dcom') diff --git a/src/occ_405/dcom/dcomMasterRx.c b/src/occ_405/dcom/dcomMasterRx.c index 2e26986..faa4dca 100644 --- a/src/occ_405/dcom/dcomMasterRx.c +++ b/src/occ_405/dcom/dcomMasterRx.c @@ -298,7 +298,7 @@ void task_dcom_rx_slv_outboxes( task_t *i_self) else { L_bce_not_ready_count++; - INCREMENT_ERR_HISTORY(ERR_DCOM_RX_SLV_OUTBOX); + INCREMENT_ERR_HISTORY(ERRH_DCOM_RX_SLV_OUTBOX); } } else @@ -383,7 +383,7 @@ uint32_t dcom_rx_slv_outbox_doorbell( void ) if (l_pbarc != 0) { - INCREMENT_ERR_HISTORY(ERR_DCOM_MASTER_PBAX_READ_FAIL); + INCREMENT_ERR_HISTORY(ERRH_DCOM_MASTER_PBAX_READ_FAIL); TRAC_ERR("Master PBAX Read Failure in receiving unicast slave doorbells - RC[%08X]", l_pbarc); diff --git a/src/occ_405/dcom/dcomMasterTx.c b/src/occ_405/dcom/dcomMasterTx.c index e1a46bc..a65dc31 100644 --- a/src/occ_405/dcom/dcomMasterTx.c +++ b/src/occ_405/dcom/dcomMasterTx.c @@ -89,7 +89,7 @@ uint32_t dcom_build_slv_inbox(void) // interrupt context. if(G_pbax_rc) { - INCREMENT_ERR_HISTORY(ERR_DCOM_MASTER_PBAX_SEND_FAIL); + INCREMENT_ERR_HISTORY(ERRH_DCOM_MASTER_PBAX_SEND_FAIL); if (!L_traced) { @@ -232,6 +232,7 @@ void task_dcom_tx_slv_inbox( task_t *i_self) uint32_t l_orc_ext = OCC_NO_EXTENDED_RC; uint64_t l_start = ssx_timebase_get(); bool l_pwr_meas = FALSE; + bool l_pwr_meas_complete_invalid = FALSE; bool l_request_reset = FALSE; bool l_ssx_failure = FALSE; // Use a static local bool to track whether the BCE request used @@ -250,8 +251,9 @@ void task_dcom_tx_slv_inbox( task_t *i_self) } l_pwr_meas = G_ApssPwrMeasCompleted; + l_pwr_meas_complete_invalid = G_ApssPwrMeasDoneInvalid; - // Did APSS power complete? + // Did APSS power complete AND valid? if( l_pwr_meas == TRUE ) { #if !defined(DEBUG_APSS_SEQ) && defined(DCOM_DEBUG) @@ -405,13 +407,42 @@ void task_dcom_tx_slv_inbox( task_t *i_self) else { L_bce_not_ready_count++; - INCREMENT_ERR_HISTORY(ERR_DCOM_TX_SLV_INBOX); + INCREMENT_ERR_HISTORY(ERRH_DCOM_TX_SLV_INBOX); } // Moved the break statement here in case we decide not to // schedule the BCE request. break; } + // Is APSS power collection done but failed? Stop waiting since no valid data will be coming + else if(l_pwr_meas_complete_invalid == TRUE) + { + //Failure occurred, step up the FAIL_COUNT + APSS_FAIL(); + + if (G_apss_fail_updown_count >= APSS_DATA_FAIL_MAX) + { + if (FALSE == isSafeStateRequested()) + { + /* @ + * @errortype + * @moduleid DCOM_MID_TASK_TX_SLV_INBOX + * @reasoncode APSS_HARD_FAILURE + * @userdata1 N/A + * @userdata4 ERC_APSS_NO_VALID_DATA + * @devdesc No valid APSS data (hard time-out) + */ + TRAC_ERR("No valid apss data: #complete errors = %i #invalid = %i", + G_error_history[ERRH_APSS_COMPLETE_ERROR], + G_error_history[ERRH_INVALID_APSS_DATA]); + l_orc = APSS_HARD_FAILURE; + l_orc_ext = ERC_APSS_NO_VALID_DATA; + l_request_reset = TRUE; + } + } + + break; + } else { // check time and break out if we reached limit @@ -421,7 +452,7 @@ void task_dcom_tx_slv_inbox( task_t *i_self) } else { - INCREMENT_ERR_HISTORY(ERR_DCOM_APSS_COMPLETE_TIMEOUT); + INCREMENT_ERR_HISTORY(ERRH_APSS_COMPLETE_TIMEOUT); //Failure occurred, step up the FAIL_COUNT APSS_FAIL(); @@ -430,9 +461,6 @@ void task_dcom_tx_slv_inbox( task_t *i_self) { if (FALSE == isSafeStateRequested()) { - TRAC_ERR("task_dcom_tx_slv_inbox: APSS data collection failure exceeded threshold. fail_count=%i, threshold:%i", - G_apss_fail_updown_count, APSS_DATA_FAIL_MAX); - /* @ * @errortype * @moduleid DCOM_MID_TASK_TX_SLV_INBOX @@ -450,6 +478,7 @@ void task_dcom_tx_slv_inbox( task_t *i_self) l_request_reset = TRUE; } } + break; } } diff --git a/src/occ_405/dcom/dcomSlaveRx.c b/src/occ_405/dcom/dcomSlaveRx.c index a4b6e2d..7b103ab 100644 --- a/src/occ_405/dcom/dcomSlaveRx.c +++ b/src/occ_405/dcom/dcomSlaveRx.c @@ -278,7 +278,7 @@ void task_dcom_rx_slv_inbox( task_t *i_self) else { L_bce_not_ready_count++; - INCREMENT_ERR_HISTORY(ERR_DCOM_RX_SLV_INBOX); + INCREMENT_ERR_HISTORY(ERRH_DCOM_RX_SLV_INBOX); } } else @@ -372,7 +372,7 @@ uint32_t dcom_rx_slv_inbox_doorbell( void ) // We got an error reading from the PBAX, return to caller if ( l_pbarc != 0 ) { - INCREMENT_ERR_HISTORY(ERR_DCOM_SLAVE_PBAX_READ_FAIL); + INCREMENT_ERR_HISTORY(ERRH_DCOM_SLAVE_PBAX_READ_FAIL); G_dcomTime.slave.doorbellErrorFlags |= DCOM_DOORBELL_HW_ERR; // Failure occurred TRAC_ERR("Slave PBAX Read Failure in receiving multicast doorbell from master - RC[%08X]", l_pbarc); @@ -515,8 +515,8 @@ void task_dcom_wait_for_master( task_t *i_self) if (L_no_master_doorbell_cnt == APSS_DATA_FAIL_PMAX_RAIL) { - // Now only trace every 50th occurrence - L_trace_every_count = 50; + // Now only trace every 1000th occurrence + L_trace_every_count = 1000; // Inform AMEC that Pmax_rail needs to change G_apss_lower_pmax_rail = TRUE; diff --git a/src/occ_405/dcom/dcomSlaveTx.c b/src/occ_405/dcom/dcomSlaveTx.c index 33ef166..837608d 100755 --- a/src/occ_405/dcom/dcomSlaveTx.c +++ b/src/occ_405/dcom/dcomSlaveTx.c @@ -163,7 +163,7 @@ void task_dcom_tx_slv_outbox( task_t *i_self) if(G_slave_pbax_rc) { TRAC_ERR("task_dcom_tx_slv_outbox: PBAX Send Failure in transimitting doorbell - RC[%08X]", G_slave_pbax_rc); - INCREMENT_ERR_HISTORY(ERR_DCOM_SLAVE_PBAX_SEND_FAIL); + INCREMENT_ERR_HISTORY(ERRH_DCOM_SLAVE_PBAX_SEND_FAIL); } // Build/setup outbox @@ -304,7 +304,7 @@ void task_dcom_tx_slv_outbox( task_t *i_self) else { L_bce_not_ready_count++; - INCREMENT_ERR_HISTORY(ERR_DCOM_TX_SLV_OUTBOX); + INCREMENT_ERR_HISTORY(ERRH_DCOM_TX_SLV_OUTBOX); } } while (0); -- cgit v1.2.1