summaryrefslogtreecommitdiffstats
path: root/src/usr/errl
diff options
context:
space:
mode:
authorRoland Veloz <rveloz@us.ibm.com>2017-08-30 17:32:48 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-09-18 15:33:08 -0400
commit0ab063c088f59890c409b7d00e0bf6afcf07dc16 (patch)
treeaed9b66e9b0873d86e5a3ae6f26869123327d0cd /src/usr/errl
parent7c816980c3829cce89f7a18a65dc70c1876ad813 (diff)
downloadtalos-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.C80
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;
OpenPOWER on IntegriCloud