summaryrefslogtreecommitdiffstats
path: root/src
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
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')
-rw-r--r--src/include/usr/sbeio/sbe_ffdc_parser.H7
-rw-r--r--src/include/usr/xscom/piberror.H6
-rw-r--r--src/usr/fsiscom/fsiscom.C2
-rw-r--r--src/usr/sbeio/sbe_ffdc_parser.C46
-rw-r--r--src/usr/sbeio/sbe_fifodd.C18
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);
OpenPOWER on IntegriCloud