summaryrefslogtreecommitdiffstats
path: root/src/usr/sbeio/sbe_psudd.C
diff options
context:
space:
mode:
authorElizabeth Liner <eliner@us.ibm.com>2018-01-29 10:30:32 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-02-14 14:46:19 -0500
commitddfe08755562f0bd6b2ec445972f4b2c751a5f80 (patch)
tree90d8a2c16dc59efc5c14144c1517d6441fa6ab6a /src/usr/sbeio/sbe_psudd.C
parent328e7f781d6d90858c52b24da1289e4f9f455e3e (diff)
downloadtalos-hostboot-ddfe08755562f0bd6b2ec445972f4b2c751a5f80.tar.gz
talos-hostboot-ddfe08755562f0bd6b2ec445972f4b2c751a5f80.zip
Fixing SBE PSU error messages
When we added support for SBE rebooting, an error was incorrectly removed - the error when there is a correct PSU timeout that is not associated with the SBE. This commit adds that error back in. Change-Id: Ie289f5ff5312d0b1415a98531fd4a8b94cef37ae Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/52844 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/sbeio/sbe_psudd.C')
-rw-r--r--src/usr/sbeio/sbe_psudd.C67
1 files changed, 59 insertions, 8 deletions
diff --git a/src/usr/sbeio/sbe_psudd.C b/src/usr/sbeio/sbe_psudd.C
index 01fcb535e..df312ea7a 100644
--- a/src/usr/sbeio/sbe_psudd.C
+++ b/src/usr/sbeio/sbe_psudd.C
@@ -542,8 +542,7 @@ errlHndl_t SbePsu::pollForPsuComplete(TARGETING::Target * i_target,
if(!(l_resp->primaryStatus & SBE_PRI_FFDC_ERROR))
{
- // Create an informational error
-
+ SBE_TRACF("Error: PSU Timeout and no FFDC present");
/*@
* @errortype
* @moduleid SBEIO_PSU
@@ -565,8 +564,9 @@ errlHndl_t SbePsu::pollForPsuComplete(TARGETING::Target * i_target,
TARGETING::get_huid(i_target)),
i_pPsuRequest->mbxReg0);
- // If the FFDC is empty, we need to check the state of the SBE
- // and then, handle the SBE value, and potentionally try
+ // If the FFDC is empty, this error could be because the SBE
+ // isn't booted correctly. We need to check the state of the
+ // SBE, handle the SBE value, and potentionally try
// to restart the SBE
SbeRetryHandler l_SBEobj = SbeRetryHandler(
SbeRetryHandler::SBE_MODE_OF_OPERATION::
@@ -581,13 +581,64 @@ errlHndl_t SbePsu::pollForPsuComplete(TARGETING::Target * i_target,
l_errl->plid(l_SBEobj.getPLID());
l_errl->setSev(ERRL_SEV_UNRECOVERABLE);
}
+ }
+ else
+ {
+ // If the FFDC is not empty, then this is correctly identified
+ // as a PSU error, and isn't related to the SBE.
+ SBE_TRACF("Error: Timeout waiting for PSU command");
+ /*@
+ * @errortype
+ * @moduleid SBEIO_PSU
+ * @reasoncode SBEIO_PSU_RESPONSE_TIMEOUT
+ * @userdata1[00:15] Primary Status in mbox4
+ * @userdata1[16:31] Secondary Status
+ * @userdata1[32:63] Processor Target
+ * @userdata2 Failing Request
+ * @devdesc Timeout waiting for PSU command to complete
+ * @custdesc Firmware error communicating with boot device
+ */
+ l_errl = new ErrlEntry(ERRL_SEV_PREDICTIVE,
+ SBEIO_PSU,
+ SBEIO_PSU_RESPONSE_TIMEOUT,
+ TWO_UINT32_TO_UINT64(
+ TWO_UINT16_TO_UINT32(
+ l_resp->primaryStatus,
+ l_resp->secondaryStatus),
+ TARGETING::get_huid(i_target)),
+ i_pPsuRequest->mbxReg0);
- // log the failing proc as FFDC
- ErrlUserDetailsTarget(i_target).addToLog(l_errl);
- l_respRegsFFDC.addToLog(l_errl);
- l_errl->collectTrace(SBEIO_COMP_NAME);
+ void * l_ffdcPkg = findFFDCBufferByTarget(i_target);
+ if(l_ffdcPkg != NULL)
+ {
+ SbeFFDCParser * l_ffdc_parser = new SbeFFDCParser();
+ l_ffdc_parser->parseFFDCData(l_ffdcPkg);
+ uint8_t l_pkgs = l_ffdc_parser->getTotalPackages();
+ for(uint8_t i=0; i < l_pkgs; i++)
+ {
+ l_errl->addFFDC( SBEIO_COMP_ID,
+ l_ffdc_parser->getFFDCPackage(i),
+ l_ffdc_parser->getPackageLength(i),
+ 0,
+ SBEIO_UDT_PARAMETERS,
+ false );
+ }
+ delete l_ffdc_parser;
+ l_ffdc_parser = nullptr;
+ }
+
+
+ l_errl->addHwCallout( i_target,
+ HWAS::SRCI_PRIORITY_HIGH,
+ HWAS::NO_DECONFIG,
+ HWAS::GARD_NULL );
}
+ // log the failing proc as FFDC
+ ErrlUserDetailsTarget(i_target).addToLog(l_errl);
+ l_respRegsFFDC.addToLog(l_errl);
+ l_errl->collectTrace(SBEIO_COMP_NAME);
+
MAGIC_INST_GET_SBE_TRACES(
i_target->getAttr<TARGETING::ATTR_POSITION>(),
SBEIO_PSU_RESPONSE_TIMEOUT);
OpenPOWER on IntegriCloud