summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/include/usr/errl/errlentry.H4
-rw-r--r--src/usr/errl/errlentry.C5
-rw-r--r--src/usr/errl/errlmanager.C43
3 files changed, 44 insertions, 8 deletions
diff --git a/src/include/usr/errl/errlentry.H b/src/include/usr/errl/errlentry.H
index ea5fdf660..aae693c12 100644
--- a/src/include/usr/errl/errlentry.H
+++ b/src/include/usr/errl/errlentry.H
@@ -574,10 +574,10 @@ public:
const HWAS::callOutPriority i_priority);
/**
- * @brief Import flatened error log
+ * @brief Import flattened error log
*
* @param[in] i_buffer, pointer to flat data
- * @param[in] i_len length of flat data
+ * @param[in] i_len length of flattened data
* @return Status 0==SUCCESS
*/
uint64_t unflatten( const void * i_buffer, uint64_t i_len);
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