diff options
author | Richard J. Knight <rjknight@us.ibm.com> | 2018-09-07 10:23:17 -0500 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2018-09-10 10:05:06 -0500 |
commit | c16e0b97bd2226d63a93a2dec286a5d3f49f71e7 (patch) | |
tree | 87499f8a6851464fa69157fc3e719a75d394601c /src/usr/sbeio | |
parent | f629523b932bd6096460f845446e2ebb3c76908d (diff) | |
download | talos-hostboot-c16e0b97bd2226d63a93a2dec286a5d3f49f71e7.tar.gz talos-hostboot-c16e0b97bd2226d63a93a2dec286a5d3f49f71e7.zip |
get FAPI_POS for all valid target types passed in SBE FIFO ffdc
-In some cases the the SBE will return a proc target type as
part of the SBE FFDC buffer, the current code only considers
non-proc types when converting the FFDC buffer contents to a target.
This commit will correctly convert all valid target types
passed back in the FFDC buffer.
Change-Id: If9f3542f18b72652d3353b6f167a264fcba21352
CQ:SW444855
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/65832
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Reviewed-by: Dean Sanner <dsanner@us.ibm.com>
Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/65835
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/sbeio')
-rw-r--r-- | src/usr/sbeio/common/sbe_retry_handler.C | 52 |
1 files changed, 44 insertions, 8 deletions
diff --git a/src/usr/sbeio/common/sbe_retry_handler.C b/src/usr/sbeio/common/sbe_retry_handler.C index 4410d089d..25f05311d 100644 --- a/src/usr/sbeio/common/sbe_retry_handler.C +++ b/src/usr/sbeio/common/sbe_retry_handler.C @@ -63,6 +63,9 @@ #include <secureboot/service.H> #include <devicefw/driverif.H> +#include <plat_utils.H> +#include <set_sbe_error.H> + extern trace_desc_t* g_trac_sbeio; @@ -78,6 +81,7 @@ extern trace_desc_t* g_trac_sbeio; TRACDBIN(g_trac_sbeio,"sbe_retry_handler.C: " printf_string,##args) using namespace ERRORLOG; +using namespace fapi2; namespace SBEIO { @@ -979,14 +983,6 @@ void SbeRetryHandler::sbe_get_ffdc_handler(TARGETING::Target * i_target) // Process each FFDC package for(auto i=0; i<l_pkgs; i++) { - // Add each package to the log - l_errl->addFFDC( SBEIO_COMP_ID, - l_ffdc_parser->getFFDCPackage(i), - l_ffdc_parser->getPackageLength(i), - 0, - SBEIO_UDT_PARAMETERS, - false ); - // Get the RC from the FFDC package uint32_t l_rc = l_ffdc_parser->getPackageRC(i); @@ -994,6 +990,46 @@ void SbeRetryHandler::sbe_get_ffdc_handler(TARGETING::Target * i_target) P9_EXTRACT_SBE_RC::RETURN_ACTION l_action = static_cast<P9_EXTRACT_SBE_RC::RETURN_ACTION>(action_for_ffdc_rc(l_rc)); + //See if HWP error, create another error log with callouts + if (l_rc != fapi2::FAPI2_RC_PLAT_ERR_SEE_DATA) + { + fapi2::ReturnCode l_fapiRc; + ffdc_package l_package = {nullptr, 0, 0}; + if(!l_ffdc_parser->getFFDCPackage(i, l_package)) + { + continue; + } + + //Put FFDC into sbeFfdc_t struct and + //call FAPI_SET_SBE_ERROR + fapi2::sbeFfdc_t l_sbeFfdc; + l_sbeFfdc.size = l_package.size; + l_sbeFfdc.data = reinterpret_cast<uint64_t>( + l_package.ffdcPtr); + + uint32_t l_pos = i_target->getAttr<TARGETING::ATTR_FAPI_POS>(); + FAPI_SET_SBE_ERROR(l_fapiRc, l_rc, &l_sbeFfdc, l_pos); + errlHndl_t l_sbeHwpfErr = rcToErrl(l_fapiRc); + if(l_sbeHwpfErr) + { + // Set the PLID of the error log to master PLID + // if the master PLID is set + updatePlids(l_sbeHwpfErr); + + ERRORLOG::errlCommit( l_sbeHwpfErr, SBEIO_COMP_ID ); + } + } + else + { + // Add each package to the log + l_errl->addFFDC( SBEIO_COMP_ID, + l_ffdc_parser->getFFDCPackage(i), + l_ffdc_parser->getPackageLength(i), + 0, + SBEIO_UDT_PARAMETERS, + false ); + } + if(l_action != NO_ACTION_FOUND_FOR_THIS_RC) { // Set the action associated with the RC that we found |