summaryrefslogtreecommitdiffstats
path: root/src/usr/sbeio
diff options
context:
space:
mode:
authorPrachi Gupta <pragupta@us.ibm.com>2017-06-14 12:05:23 -0500
committerMatthew A. Ploetz <maploetz@us.ibm.com>2017-06-30 09:55:49 -0400
commitd25c0aa86167d8b61c406bfca80e22372c6f1e38 (patch)
treeea57000688fe2b27f2196dfc0bb8b55079b98fa6 /src/usr/sbeio
parentd0a8f18502ab3d62238aa4945068cd7c79d75ebc (diff)
downloadtalos-hostboot-d25c0aa86167d8b61c406bfca80e22372c6f1e38.tar.gz
talos-hostboot-d25c0aa86167d8b61c406bfca80e22372c6f1e38.zip
handle pibrc correctly from sbe fifo
Change-Id: I3f0ba875a47fdd00758c65b7982f300f0e05cd14 RTC: 170433 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/41847 Reviewed-by: Martin Gloff <mgloff@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Matthew A. Ploetz <maploetz@us.ibm.com>
Diffstat (limited to 'src/usr/sbeio')
-rw-r--r--src/usr/sbeio/sbe_ffdc_parser.C46
-rw-r--r--src/usr/sbeio/sbe_fifodd.C18
2 files changed, 63 insertions, 1 deletions
diff --git a/src/usr/sbeio/sbe_ffdc_parser.C b/src/usr/sbeio/sbe_ffdc_parser.C
index 08cbc5feb..b742c8cb8 100644
--- a/src/usr/sbeio/sbe_ffdc_parser.C
+++ b/src/usr/sbeio/sbe_ffdc_parser.C
@@ -30,6 +30,7 @@
#include <errl/errlmanager.H>
#include <util/utilbyte.H>
#include <sbeio/sbe_ffdc_parser.H>
+#include <fapi2.H>
/**
* @file sbe_ffdc_pader.C
@@ -257,4 +258,49 @@ void SbeFFDCParser::addFFDCPackage(void * i_ffdcPackage,
iv_ffdcPackages.push_back(l_ffdcPkg);
}
+PIB::PibError SbeFFDCParser::getPibRc(uint8_t i_index)
+{
+ //get the rc for this ffdc package
+ auto l_fapiRc = getPackageRC(i_index);
+ PIB::PibError l_pibRc = PIB::PIB_NO_ERROR;
+
+ //check if it is a fapi2::PIBRC
+ //if yes, convert to PIBERROR value
+ switch(l_fapiRc)
+ {
+ case fapi2::RC_SBE_PIB_XSCOM_ERROR:
+ l_pibRc = PIB::PIB_RESOURCE_OCCUPIED;
+ break;
+
+ case fapi2::RC_SBE_PIB_OFFLINE_ERROR:
+ l_pibRc = PIB::PIB_CHIPLET_OFFLINE;
+ break;
+
+ case fapi2::RC_SBE_PIB_PARTIAL_ERROR:
+ l_pibRc = PIB::PIB_PARTIAL_GOOD;
+ break;
+
+ case fapi2::RC_SBE_PIB_ADDRESS_ERROR:
+ l_pibRc = PIB::PIB_INVALID_ADDRESS;
+ break;
+
+ case fapi2::RC_SBE_PIB_CLOCK_ERROR:
+ l_pibRc = PIB::PIB_CLOCK_ERROR;
+ break;
+
+ case fapi2::RC_SBE_PIB_PARITY_ERROR:
+ l_pibRc = PIB::PIB_PARITY_ERROR;
+ break;
+
+ case fapi2::RC_SBE_PIB_TIMEOUT_ERROR:
+ l_pibRc = PIB::PIB_TIMEOUT;
+ break;
+
+ case fapi2::FAPI2_RC_SUCCESS:
+ l_pibRc = PIB::PIB_NO_ERROR;
+ break;
+ }
+ SBE_TRACF("getPibRc for index=%d, fapiRc=0x%x pibRc:%0x", i_index, l_fapiRc, l_pibRc);
+ return l_pibRc;
+}
}
diff --git a/src/usr/sbeio/sbe_fifodd.C b/src/usr/sbeio/sbe_fifodd.C
index 32f2326b8..43342b790 100644
--- a/src/usr/sbeio/sbe_fifodd.C
+++ b/src/usr/sbeio/sbe_fifodd.C
@@ -43,6 +43,7 @@
#include <kernel/pagemgr.H>
#include <fapi2.H>
#include <sbeio/sbe_sp_intf.H>
+#include <xscom/piberror.H>
extern trace_desc_t* g_trac_sbeio;
@@ -346,6 +347,11 @@ errlHndl_t SbeFifo::readResponse(TARGETING::Target * i_target,
// has been sent. If not EOT, then data ready to receive.
uint32_t l_status = 0;
errl = waitDnFifoReady(i_target,l_status);
+ if (errl)
+ {
+ SBE_TRACF("readResponse: waitDnFifoReady returned an error");
+ break;
+ }
if (l_status & DNFIFO_STATUS_DEQUEUED_EOT_FLAG)
{
@@ -582,6 +588,15 @@ errlHndl_t SbeFifo::readResponse(TARGETING::Target * i_target,
ERRORLOG::errlCommit( sbe_errl, SBEIO_COMP_ID );
}
}
+ PIB::PibError l_pibRc = l_ffdc_parser->getPibRc(i);
+ if (l_pibRc != PIB::PIB_NO_ERROR)
+ {
+ //this is pibrc, call addFruCallouts to log the error
+ auto l_fifoReq =
+ (SbeFifo::fifoGetScomRequest*)i_pFifoRequest;
+ PIB::addFruCallouts
+ (i_target, l_pibRc, l_fifoReq->address, errl);
+ }
}
errl->addProcedureCallout(HWAS::EPUB_PRC_HB_CODE,
@@ -650,6 +665,7 @@ errlHndl_t SbeFifo::waitDnFifoReady(TARGETING::Target * i_target,
* @moduleid SBEIO_FIFO
* @reasoncode SBEIO_FIFO_DOWNSTREAM_TIMEOUT
* @userdata1 Timeout in NS
+ * @userdata2 FIFO Status
* @devdesc Timeout waiting for downstream FIFO to have
* data to receive
*/
@@ -658,7 +674,7 @@ errlHndl_t SbeFifo::waitDnFifoReady(TARGETING::Target * i_target,
SBEIO_FIFO,
SBEIO_FIFO_DOWNSTREAM_TIMEOUT,
MAX_UP_FIFO_TIMEOUT_NS,
- 0);
+ o_status);
errl->addProcedureCallout(HWAS::EPUB_PRC_HB_CODE,
HWAS::SRCI_PRIORITY_HIGH);
OpenPOWER on IntegriCloud