summaryrefslogtreecommitdiffstats
path: root/src/sbefw
diff options
context:
space:
mode:
Diffstat (limited to 'src/sbefw')
-rw-r--r--src/sbefw/app/power/sbecmdcntrldmt.C4
-rw-r--r--src/sbefw/core/ipl.C7
-rw-r--r--src/sbefw/core/sbeFFDC.C9
-rw-r--r--src/sbefw/core/sbeFFDC.H10
-rw-r--r--src/sbefw/core/sbe_sp_intf.H1
5 files changed, 28 insertions, 3 deletions
diff --git a/src/sbefw/app/power/sbecmdcntrldmt.C b/src/sbefw/app/power/sbecmdcntrldmt.C
index 0afe21b0..6b00094f 100644
--- a/src/sbefw/app/power/sbecmdcntrldmt.C
+++ b/src/sbefw/app/power/sbecmdcntrldmt.C
@@ -45,6 +45,7 @@
#include "p9_block_wakeup_intr.H"
#include "sbeTimerSvc.H"
#include "sbeglobals.H"
+#include "sbeFFDC.H"
using namespace fapi2;
@@ -82,7 +83,8 @@ void sbeDmtPkExpiryCallback(void *)
pk_halt();
}
- (void)SbeRegAccess::theSbeRegAccess().updateAsyncFFDCBit(true);
+ captureAsyncFFDC(SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_DMT_TIMEOUT);
#undef SBE_FUNC
}
diff --git a/src/sbefw/core/ipl.C b/src/sbefw/core/ipl.C
index d331af59..02e2b2f3 100644
--- a/src/sbefw/core/ipl.C
+++ b/src/sbefw/core/ipl.C
@@ -24,6 +24,8 @@
/* IBM_PROLOG_END_TAG */
#include "fapi2.H"
#include "sberegaccess.H"
+#include "sbe_sp_intf.H"
+#include "sbeFFDC.H"
#include "ipl.H"
@@ -109,8 +111,9 @@ void sbeDoContinuousIpl()
SBE_ERROR(SBE_FUNC"Failed istep execution in plck mode: "
"Major: %d, Minor: %d",
istepTableEntry->istepMajorNum, step);
- (void)SbeRegAccess::theSbeRegAccess().updateAsyncFFDCBit(
- true);
+
+ captureAsyncFFDC(SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_GENERIC_FAILURE_IN_EXECUTION);
// exit outer loop as well
entry = istepTable.len;
break;
diff --git a/src/sbefw/core/sbeFFDC.C b/src/sbefw/core/sbeFFDC.C
index 6f73eb9c..b83b54dc 100644
--- a/src/sbefw/core/sbeFFDC.C
+++ b/src/sbefw/core/sbeFFDC.C
@@ -31,6 +31,15 @@
#include "sbeglobals.H"
#include "sbecmdcntrldmt.H"
+void captureAsyncFFDC(uint32_t primRc, uint32_t secRc)
+{
+ SBE_GLOBAL->failedPrimStatus = primRc;
+ SBE_GLOBAL->failedSecStatus = secRc;
+
+ // Set async ffdc bit
+ (void)SbeRegAccess::theSbeRegAccess().updateAsyncFFDCBit(true);
+}
+
void SbeFFDCPackage::updateUserDataHeader(uint32_t i_fieldsConfig)
{
// Set failed command information
diff --git a/src/sbefw/core/sbeFFDC.H b/src/sbefw/core/sbeFFDC.H
index 71a44859..019194ab 100644
--- a/src/sbefw/core/sbeFFDC.H
+++ b/src/sbefw/core/sbeFFDC.H
@@ -37,6 +37,16 @@
//PIBMEM attribute dump
extern G_sbe_attrs_t G_sbe_attrs;
+/*
+ * @brief - Capture Async failure FFDC
+ *
+ * @param[in] primRc Primary failure rc
+ * @param[in] secRc Secondary failure rc
+ *
+ */
+void captureAsyncFFDC(uint32_t primRc,
+ uint32_t secRc);
+
//Configuration of user data blobs present in SBE FFDC
//Data is sent in the order defined here
//Definition - Identifier
diff --git a/src/sbefw/core/sbe_sp_intf.H b/src/sbefw/core/sbe_sp_intf.H
index 50afe17f..45c293d7 100644
--- a/src/sbefw/core/sbe_sp_intf.H
+++ b/src/sbefw/core/sbe_sp_intf.H
@@ -219,6 +219,7 @@ enum sbeSecondaryResponse
SBE_SEC_INPUT_BUFFER_OVERFLOW = 0x18,
SBE_SEC_INVALID_PARAMS = 0x19,
SBE_SEC_BLACKLISTED_CHIPOP_ACCESS = 0x20,
+ SBE_SEC_DMT_TIMEOUT = 0x21,
};
/**
OpenPOWER on IntegriCloud