diff options
author | Sunil.Kumar <skumar8j@in.ibm.com> | 2016-11-28 03:45:22 -0600 |
---|---|---|
committer | Sachin Gupta <sgupta2m@in.ibm.com> | 2017-01-19 01:14:16 -0500 |
commit | 76b294bed6cd3aff8f8f74df8e0d2a09ca153e75 (patch) | |
tree | 2948ff38b7c12e169fef7cb19f178c2cd89e93dd /src/sbefw/sbecmdgeneric.C | |
parent | f7622cfdaafd77c57b93ade0d144c623eaec043f (diff) | |
download | talos-sbe-76b294bed6cd3aff8f8f74df8e0d2a09ca153e75.tar.gz talos-sbe-76b294bed6cd3aff8f8f74df8e0d2a09ca153e75.zip |
RTC 149074 Async Response of PSU operation from SBE
Change-Id: Ifb6be2cb5edd2e1abeb5766a54bc44439c67e8dd
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33045
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Shakeeb A. Pasha B K <shakeebbk@in.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Diffstat (limited to 'src/sbefw/sbecmdgeneric.C')
-rw-r--r-- | src/sbefw/sbecmdgeneric.C | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/src/sbefw/sbecmdgeneric.C b/src/sbefw/sbecmdgeneric.C index cf8579c5..444548ee 100644 --- a/src/sbefw/sbecmdgeneric.C +++ b/src/sbefw/sbecmdgeneric.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER sbe Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2016 */ +/* Contributors Listed Below - COPYRIGHT 2015,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -138,7 +138,7 @@ uint32_t sbeGetCapabilities (uint8_t *i_pArg) uint32_t sbeGetFfdc (uint8_t *i_pArg) { #define SBE_FUNC "sbeGetFfdc " - SBE_DEBUG(SBE_FUNC); + SBE_ENTER(SBE_FUNC); uint32_t rc = SBE_SEC_OPERATION_SUCCESSFUL; uint32_t len = 0; sbeRespGenHdr_t respHdr; @@ -156,11 +156,45 @@ uint32_t sbeGetFfdc (uint8_t *i_pArg) } SbeFFDCPackage sbeFfdcPack; - len = 0; + sbeResponseFfdc_t l_ffdc ; + l_ffdc.setRc(g_FfdcData.fapiRc); + SBE_INFO(SBE_FUNC"FAPI RC is %x", g_FfdcData.fapiRc); + // If no ffdc , exit; + if( (l_ffdc.getRc() != FAPI2_RC_SUCCESS)) + { + // making sure ffdc length is multiples of uint32_t + assert((g_FfdcData.ffdcLength % sizeof(uint32_t)) == 0); + uint32_t ffdcDataLenInWords = g_FfdcData.ffdcLength + / sizeof(uint32_t); + // Set failed command information + // Sequence Id is 0 by default for Fifo interface + // @TODO via RTC : 149074 + // primary and secondary status should be picked + // from the globals. + l_ffdc.setCmdInfo(0, respHdr.cmdClass, respHdr.command); + // Add HWP specific ffdc data length + l_ffdc.lenInWords += ffdcDataLenInWords; + len = sizeof(sbeResponseFfdc_t)/sizeof(uint32_t); + rc = sbeDownFifoEnq_mult ( len, ( uint32_t *) &l_ffdc); + if (rc) + { + break; + } + //Send HWP internal Data + rc = sbeDownFifoEnq_mult ( ffdcDataLenInWords, + ( uint32_t *) &g_FfdcData.ffdcData); + if (rc) + { + break; + } + + } //Send the FFDC data over FIFO. // @TODO via RTC : 149074 // primary and secondary status should be picked // from the globals. + // Check for Primary and Secondary Status from Globals and then send + // internal FFDC. rc = sbeFfdcPack.sendOverFIFO(respHdr, SBE_FFDC_ALL_DUMP, len, |