diff options
Diffstat (limited to 'src/sbefw')
-rw-r--r-- | src/sbefw/app/power/sbecmdcntrldmt.C | 4 | ||||
-rw-r--r-- | src/sbefw/core/ipl.C | 7 | ||||
-rw-r--r-- | src/sbefw/core/sbeFFDC.C | 9 | ||||
-rw-r--r-- | src/sbefw/core/sbeFFDC.H | 10 | ||||
-rw-r--r-- | src/sbefw/core/sbe_sp_intf.H | 1 |
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, }; /** |