diff options
author | Roland Veloz <rveloz@us.ibm.com> | 2017-08-30 17:32:48 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-09-18 15:33:08 -0400 |
commit | 0ab063c088f59890c409b7d00e0bf6afcf07dc16 (patch) | |
tree | aed9b66e9b0873d86e5a3ae6f26869123327d0cd /src/usr/errl | |
parent | 7c816980c3829cce89f7a18a65dc70c1876ad813 (diff) | |
download | talos-hostboot-0ab063c088f59890c409b7d00e0bf6afcf07dc16.tar.gz talos-hostboot-0ab063c088f59890c409b7d00e0bf6afcf07dc16.zip |
Added code to send an Error Log to FSP via the firmware_request
Change-Id: I6ce94d9cbf62fa7d2afe53b83b6bc5588a39a5d6
RTC:178947
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45442
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: ILYA SMIRNOV <ismirno@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/errl')
-rw-r--r-- | src/usr/errl/runtime/rt_errlmanager.C | 80 |
1 files changed, 66 insertions, 14 deletions
diff --git a/src/usr/errl/runtime/rt_errlmanager.C b/src/usr/errl/runtime/rt_errlmanager.C index f690fded5..cea88de64 100644 --- a/src/usr/errl/runtime/rt_errlmanager.C +++ b/src/usr/errl/runtime/rt_errlmanager.C @@ -172,23 +172,76 @@ void ErrlManager::sendMboxMsg ( errlHndl_t& io_err ) INFO_MRK"Send msg to FSP for errlogId [0x%08x]", io_err->plid() ); - uint32_t l_msgSize = io_err->flattenedSize(); - uint8_t * temp_buff = new uint8_t [l_msgSize ]; - io_err->flatten ( temp_buff, l_msgSize ); - - if(g_hostInterfaces && g_hostInterfaces->sendErrorLog) + if(g_hostInterfaces) { - int rc = g_hostInterfaces->sendErrorLog(io_err->plid(), - l_msgSize, - temp_buff); + uint32_t l_msgSize = io_err->flattenedSize(); + if (g_hostInterfaces->sendErrorLog) + { + uint8_t * temp_buff = new uint8_t [l_msgSize ]; + io_err->flatten ( temp_buff, l_msgSize ); + + size_t rc = g_hostInterfaces->sendErrorLog(io_err->plid(), + l_msgSize, + temp_buff); + + if(rc) + { + TRACFCOMP(g_trac_errl, ERR_MRK + "Failed sending error log to FSP via " + "sendErrorLog. rc: %d. plid: 0x%08x", + rc, + io_err->plid() ); + } - if(rc) + delete [] temp_buff; + } + else if (g_hostInterfaces->firmware_request) + { + // Get an accurate size of memory actually + // needed to transport the data + size_t l_req_fw_msg_size = + hostInterfaces::HBRT_FW_MSG_BASE_SIZE + + sizeof(hostInterfaces::hbrt_fw_msg::error_log) + + l_msgSize; + + // Create the firmware_request structure + // to carry the error log data + hostInterfaces::hbrt_fw_msg *l_req_fw_msg = + (hostInterfaces::hbrt_fw_msg *)malloc(l_req_fw_msg_size); + + memset(l_req_fw_msg, 0, l_req_fw_msg_size); + + // Populate the firmware_request structure with given data + l_req_fw_msg->io_type = + hostInterfaces::HBRT_FW_MSG_TYPE_ERROR_LOG; + l_req_fw_msg->error_log.i_plid = io_err->plid(); + l_req_fw_msg->error_log.i_errlSize = l_msgSize; + io_err->flatten (&(l_req_fw_msg->error_log.i_data), l_msgSize); + + hostInterfaces::hbrt_fw_msg l_resp_fw_msg; + uint64_t l_resp_fw_msg_size = sizeof(l_resp_fw_msg); + size_t rc = g_hostInterfaces-> + firmware_request(l_req_fw_msg_size, l_req_fw_msg, + &l_resp_fw_msg_size, &l_resp_fw_msg); + + if(rc) + { + TRACFCOMP(g_trac_errl, ERR_MRK + "Failed sending error log to FSP " + "via firmware_request. rc: %d. plid: 0x%08x", + rc, + io_err->plid() ); + } + + free(l_req_fw_msg); + } + else { TRACFCOMP(g_trac_errl, ERR_MRK - "Failed sending error log to FSP. rc: %d. " - "plid: 0x%08x", - rc, - io_err->plid() ); + "Host interfaces sendErrorLog and firmware_request " + "not initialized, error log not sent. plid: 0x%08x", + io_err->plid() + ); } } else @@ -199,7 +252,6 @@ void ErrlManager::sendMboxMsg ( errlHndl_t& io_err ) io_err->plid() ); } - delete [] temp_buff; #endif delete io_err; io_err = NULL; |