diff options
author | Sachin Gupta <sgupta2m@in.ibm.com> | 2016-10-19 15:13:59 -0500 |
---|---|---|
committer | AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com> | 2016-10-19 23:47:45 -0400 |
commit | 4fd0b4043008eec84068fa106fcb64be1104080f (patch) | |
tree | c323a3dfdf9b5d855689ffc31793ef998255c1b6 /src/sbefw | |
parent | c15ebbd7b56b504c8f68de26b268a1682ad5b0d1 (diff) | |
download | talos-sbe-4fd0b4043008eec84068fa106fcb64be1104080f.tar.gz talos-sbe-4fd0b4043008eec84068fa106fcb64be1104080f.zip |
Fix for FIFO empty condition
Change-Id: Ia80e76b141c5f4493f979d3aa81f83ff9dca4850
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/31512
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Dean Sanner <dsanner@us.ibm.com>
Reviewed-by: AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>
Diffstat (limited to 'src/sbefw')
-rw-r--r-- | src/sbefw/sbeFifoMsgUtils.C | 19 | ||||
-rw-r--r-- | src/sbefw/sbe_sp_intf.H | 1 | ||||
-rw-r--r-- | src/sbefw/sbefifo.H | 6 |
3 files changed, 20 insertions, 6 deletions
diff --git a/src/sbefw/sbeFifoMsgUtils.C b/src/sbefw/sbeFifoMsgUtils.C index 75489cae..26515077 100644 --- a/src/sbefw/sbeFifoMsgUtils.C +++ b/src/sbefw/sbeFifoMsgUtils.C @@ -100,8 +100,8 @@ uint32_t sbeUpFifoDeq_mult (uint32_t &io_len, } SBE_DEBUG(SBE_FUNC"sbeUpFifoDeq, " - "l_data.fifo_data=[0x%08X],", - l_data.fifo_data); + "fifo_data:0x%08X, status:0x%08X", + l_data.fifo_data, l_data.status); // If FIFO reset is requested if(l_data.statusOrReserved.req_upfifo_reset) @@ -149,10 +149,19 @@ uint32_t sbeUpFifoDeq_mult (uint32_t &io_len, break; } - // if Upstream FIFO is empty, - if ( ( l_data.statusOrReserved.fifo_empty) && - ( !l_data.statusOrReserved.valid_flag)) + // Check valid flag + if ( !l_data.statusOrReserved.valid_flag ) { + if( l_data.statusOrReserved.parity_err ) + { + SBE_ERROR(SBE_FUNC"Parity error while reading FIFO." + " FIFO status: 0x%08X"); + l_rc = SBE_SEC_FIFO_PARITY_ERROR; + break; + } + // We can reach here because FIFO was empty. We can not trust + // empty flag because empty flag tells the status of FIFO after + // operation not at the time of operation pk_sleep(PK_MILLISECONDS(FIFO_WAIT_SLEEP_TIME)); continue; } diff --git a/src/sbefw/sbe_sp_intf.H b/src/sbefw/sbe_sp_intf.H index d66b9c8a..f3563f7a 100644 --- a/src/sbefw/sbe_sp_intf.H +++ b/src/sbefw/sbe_sp_intf.H @@ -209,6 +209,7 @@ enum sbeSecondaryResponse SBE_SEC_UNEXPECTED_EOT_EXCESS_DATA = 0x0F, SBE_SEC_HW_OP_TIMEOUT = 0x10, SBE_SEC_PCB_PIB_ERR = 0x11, + SBE_SEC_FIFO_PARITY_ERROR = 0x12, }; /** diff --git a/src/sbefw/sbefifo.H b/src/sbefw/sbefifo.H index e624f390..6a4332e9 100644 --- a/src/sbefw/sbefifo.H +++ b/src/sbefw/sbefifo.H @@ -98,7 +98,11 @@ typedef struct // The following status field is applicable only for // upstream FIFO access and will remain reserved for // downstream FIFO access - sbe_upfifo_status_t statusOrReserved; + union + { + sbe_upfifo_status_t statusOrReserved; + uint32_t status; + }; } sbeFifoEntry_t ; |