diff options
author | Prachi Gupta <pragupta@us.ibm.com> | 2017-06-14 12:05:23 -0500 |
---|---|---|
committer | Matthew A. Ploetz <maploetz@us.ibm.com> | 2017-06-30 09:55:49 -0400 |
commit | d25c0aa86167d8b61c406bfca80e22372c6f1e38 (patch) | |
tree | ea57000688fe2b27f2196dfc0bb8b55079b98fa6 /src | |
parent | d0a8f18502ab3d62238aa4945068cd7c79d75ebc (diff) | |
download | talos-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')
-rw-r--r-- | src/include/usr/sbeio/sbe_ffdc_parser.H | 7 | ||||
-rw-r--r-- | src/include/usr/xscom/piberror.H | 6 | ||||
-rw-r--r-- | src/usr/fsiscom/fsiscom.C | 2 | ||||
-rw-r--r-- | src/usr/sbeio/sbe_ffdc_parser.C | 46 | ||||
-rw-r--r-- | src/usr/sbeio/sbe_fifodd.C | 18 |
5 files changed, 75 insertions, 4 deletions
diff --git a/src/include/usr/sbeio/sbe_ffdc_parser.H b/src/include/usr/sbeio/sbe_ffdc_parser.H index 5ca5dbcc8..a18d8a1ad 100644 --- a/src/include/usr/sbeio/sbe_ffdc_parser.H +++ b/src/include/usr/sbeio/sbe_ffdc_parser.H @@ -26,6 +26,8 @@ #ifndef __SBEFFDC_H #define __SBEFFDC_H +#include <xscom/piberror.H> + /** * @file sbe_ffdc_parser.H * @brief SBE FFDC package parser @@ -94,6 +96,11 @@ class SbeFFDCParser */ uint32_t getPackageLength(uint8_t i_index); + /** + * @brief: converts fapi2 rc to pib rc + * @param[in]: i_index index in the ffdc package + */ + PIB::PibError getPibRc (uint8_t i_index); private: /** diff --git a/src/include/usr/xscom/piberror.H b/src/include/usr/xscom/piberror.H index 5640c6ce1..ede858f9b 100644 --- a/src/include/usr/xscom/piberror.H +++ b/src/include/usr/xscom/piberror.H @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013,2014 */ +/* Contributors Listed Below - COPYRIGHT 2013,2017 */ +/* [+] International Business Machines Corp. */ +/* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ /* you may not use this file except in compliance with the License. */ @@ -31,7 +33,7 @@ namespace PIB /** * @brief Enumerations for the each PIB error possbility */ - enum + enum PibError { PIB_NO_ERROR = 0,//0b000, PIB_RESOURCE_OCCUPIED = 1,//0b001, diff --git a/src/usr/fsiscom/fsiscom.C b/src/usr/fsiscom/fsiscom.C index 270727064..3db2e691f 100644 --- a/src/usr/fsiscom/fsiscom.C +++ b/src/usr/fsiscom/fsiscom.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2016 */ +/* Contributors Listed Below - COPYRIGHT 2011,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ 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); |