summaryrefslogtreecommitdiffstats
path: root/src/usr/errl
diff options
context:
space:
mode:
authorBrian Horton <brianh@linux.ibm.com>2014-12-04 13:56:52 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-01-16 14:03:14 -0600
commitfc7f56da0dd87cfb82433efb1f89a204914aface (patch)
tree3e70aa28c9c43ced1fcc3856344dc23b2f78c5ca /src/usr/errl
parent5236a087c01445bf80b7883e7cb9bd50540ce138 (diff)
downloadtalos-hostboot-fc7f56da0dd87cfb82433efb1f89a204914aface.tar.gz
talos-hostboot-fc7f56da0dd87cfb82433efb1f89a204914aface.zip
Send un-ACK'ed error logs in PNOR down to the BMC
when the errlmanager thread starts, it looks at all error logs in PNOR; any that were not ACK'ed during the previous IPL (meaning they were not confirmed as to have been processed by the BMC) will be put into the queue to be sent down once BMC contact has been setup. Change-Id: Ifef5a797eb53a1f28deefc90177dd958648e0210 RTC: 116461 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/14738 Tested-by: Jenkins Server Reviewed-by: STEPHEN M. CPREK <smcprek@us.ibm.com> Reviewed-by: Elizabeth Liner <eliner@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/errl')
-rw-r--r--src/usr/errl/errlentry.C5
-rw-r--r--src/usr/errl/errlmanager.C43
2 files changed, 42 insertions, 6 deletions
diff --git a/src/usr/errl/errlentry.C b/src/usr/errl/errlentry.C
index 4e978eb59..c8e1ac282 100644
--- a/src/usr/errl/errlentry.C
+++ b/src/usr/errl/errlentry.C
@@ -5,9 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2011,2014 */
-/* [+] International Business Machines Corp. */
+/* Contributors Listed Below - COPYRIGHT 2011,2015 */
/* [+] Google Inc. */
+/* [+] International Business Machines Corp. */
/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
@@ -1351,6 +1351,7 @@ uint64_t ErrlEntry::flatten( void * o_pBuffer,
{
// some section was too big and didn't get flatten - update the
// section count in the PH section and re-flatten it.
+ // count is the PH, UH, PS, and the optionals.
iv_Private.iv_sctns = 3 + l_sectionCount;
l_cb = iv_Private.flatten( pPHBuffer, l_sizeRemaining );
if( 0 == l_cb )
diff --git a/src/usr/errl/errlmanager.C b/src/usr/errl/errlmanager.C
index 3408aaf99..24209326c 100644
--- a/src/usr/errl/errlmanager.C
+++ b/src/usr/errl/errlmanager.C
@@ -932,13 +932,48 @@ void ErrlManager::setupPnorInfo()
// save will increment correctly
iv_pnorOpenSlot = i;
}
- // also check if it's ACKed or not. and ACK it.
- // for FSP system, this shouldn't ever happen.
- // for non-FSP systems, this clears out all 'last IPL' logs
+ // also check if it's ACKed or not
if (!isSlotACKed(i))
{
- TRACFCOMP( g_trac_errl, INFO_MRK"setupPnorInfo slot %d eid %.8X was not ACKed.",
+ TRACFCOMP( g_trac_errl,
+ INFO_MRK"setupPnorInfo slot %d eid %.8X was not ACKed.",
i, l_id);
+
+#ifdef CONFIG_BMC_IPMI
+ // for IPMI systems, unflatten to send down to the BMC
+ err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE, 0,0);
+ char *l_errlAddr = iv_pnorAddr + (PNOR_ERROR_LENGTH * i);
+ uint64_t rc = err->unflatten(l_errlAddr, PNOR_ERROR_LENGTH);
+ if (rc != 0)
+ {
+ // unflatten didn't work, nothing we can do
+ TRACFCOMP( g_trac_errl,
+ ERR_MRK"setupPnorInfo unflatten failed on slot %d eid %.8X.",
+ i, l_id);
+ }
+ else
+ {
+ if (iv_isIpmiEnabled)
+ {
+ // convert to SEL/eSEL and send to BMC over IPMI
+ sendErrLogToBmc(err);
+ delete err;
+ }
+ else
+ {
+ TRACFCOMP( g_trac_errl,
+ INFO_MRK"setupPnorInfo pushing slot %d eid %.8X to iv_errList.",
+ i, l_id);
+ // Pair with IPMI flag to add to the errlList
+ // so that it'll get sent down when IPMI is up
+ ErrlFlagPair_t l_pair(err, IPMI_FLAG);
+ iv_errlList.push_back(l_pair);
+ }
+ }
+#else
+ // for FSP system, this shouldn't ever happen.
+#endif
setACKInFlattened(i);
} // not ACKed
} // not empty
OpenPOWER on IntegriCloud