summaryrefslogtreecommitdiffstats
path: root/src/usr/testcore
diff options
context:
space:
mode:
authorRoland Veloz <rveloz@us.ibm.com>2017-11-21 15:02:53 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-12-20 17:47:12 -0500
commit8e6bd68539af8394a3f96dab15464edc151794bb (patch)
tree03e3f07d0599bc0e60b54e4e3aa4d4c38b333f37 /src/usr/testcore
parent5cd50322982059a6b71d5957e22f6f85da17404e (diff)
downloadtalos-hostboot-8e6bd68539af8394a3f96dab15464edc151794bb.tar.gz
talos-hostboot-8e6bd68539af8394a3f96dab15464edc151794bb.zip
Updated the GenericFspMboxMessage_t struct
The GenericFspMboxMessage_t struct has been expanded to provide a lot more data than before. The highlights are that it now carries the data size, an error only flag, a sequence number and a magic number to identify the message. An initialize method has been provided to set some of these to default values. In addition the message types are consolidated into one enum. All enums have a prefix of GFMM to avoid name collisions. The sequence number is an auto incrementing number so we can keep track if the messages are received out of order. Change-Id: Ic0f1c2546ff1ce14f163d1da55646ed089216d19 RTC: 182267 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/49960 Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/testcore')
-rw-r--r--src/usr/testcore/rtloader/loader.H129
1 files changed, 92 insertions, 37 deletions
diff --git a/src/usr/testcore/rtloader/loader.H b/src/usr/testcore/rtloader/loader.H
index 62e251370..973afd158 100644
--- a/src/usr/testcore/rtloader/loader.H
+++ b/src/usr/testcore/rtloader/loader.H
@@ -194,7 +194,8 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
if (cv_hb_data_addr != 0)
{
// unmap virtual memory
- TRACFCOMP( g_trac_hbrt, "tearDown(): unmap hb_data virt addr %p",
+ TRACFCOMP(g_trac_hbrt,
+ "tearDown(): unmap hb_data virt addr %p",
reinterpret_cast<void*>(cv_hb_data_addr));
int l_rc = mm_block_unmap(
@@ -212,7 +213,8 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
}
else
{
- TRACFCOMP( g_trac_hbrt, "tearDown(): skipping unmap hb_data virt addr");
+ TRACFCOMP( g_trac_hbrt,
+ "tearDown(): skipping unmap hb_data virt addr");
}
}
@@ -399,7 +401,8 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
static uint64_t rt_get_hb_data(uint32_t i_instance)
{
- TRACFCOMP( g_trac_hbrt, ENTER_MRK"rt_get_hb_data> i_instance=%d", i_instance );
+ TRACFCOMP( g_trac_hbrt,
+ ENTER_MRK"rt_get_hb_data> i_instance=%d", i_instance );
uint64_t l_totalSize = 0;
uint64_t l_vAddr = 0;
@@ -510,7 +513,8 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
l_err = PNOR::getSectionInfo(l_id, l_info);
if (l_err)
{
- TRACFCOMP(g_trac_hbrt, "rt_pnor_read: getSectionInfo errored");
+ TRACFCOMP(g_trac_hbrt,
+ "rt_pnor_read: getSectionInfo errored");
break;
}
@@ -532,7 +536,8 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
" deviceRead: offset:0x%X, flashAddr:0x%X, size:0x%X",
i_offset, l_flashAddr, l_bytes_to_read);
- l_err = DeviceFW::deviceRead (pnor_target, o_data, l_bytes_to_read,
+ l_err = DeviceFW::deviceRead (pnor_target, o_data,
+ l_bytes_to_read,
DEVICE_PNOR_ADDRESS(i_proc, l_flashAddr));
if (l_err)
{
@@ -582,7 +587,8 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
l_err = PNOR::getSectionInfo(l_id, l_info);
if (l_err)
{
- TRACFCOMP(g_trac_hbrt, "rt_pnor_write: getSectionInfo errored");
+ TRACFCOMP(g_trac_hbrt,
+ "rt_pnor_write: getSectionInfo errored");
break;
}
@@ -601,7 +607,8 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
DEVICE_PNOR_ADDRESS(i_proc, l_flashAddr));
if (l_err)
{
- TRACFCOMP(g_trac_hbrt, "rt_pnor_write: deviceWrite errored");
+ TRACFCOMP(g_trac_hbrt,
+ "rt_pnor_write: deviceWrite errored");
break;
}
} while (0);
@@ -716,7 +723,7 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
static int rt_firmware_request(uint64_t i_reqLen, void *i_req,
uint64_t* o_respLen, void *o_resp )
{
- int retVal = 0;
+ size_t retVal = 0;
do
{
if (i_req == nullptr ||
@@ -732,13 +739,6 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
hostInterfaces::hbrt_fw_msg* l_resp_fw_msg =
(hostInterfaces::hbrt_fw_msg*) o_resp;
- if (*o_respLen < (hostInterfaces::HBRT_FW_MSG_BASE_SIZE +
- sizeof(l_resp_fw_msg->resp_generic)))
- {
- retVal = -EINVAL;
- break;
- }
-
if (hostInterfaces::HBRT_FW_MSG_TYPE_REQ_HCODE_UPDATE
== l_req_fw_msg->io_type)
{
@@ -749,6 +749,13 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
break;
}
+ if (*o_respLen < (hostInterfaces::HBRT_FW_MSG_BASE_SIZE +
+ sizeof(l_resp_fw_msg->resp_generic)))
+ {
+ retVal = -EINVAL;
+ break;
+ }
+
TRACFCOMP(g_trac_hbrt,
"rt_firmware_request for HCODE SCOM update: "
"type:%d, chipId:0x%X, section:%d, "
@@ -786,6 +793,12 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
break;
}
+ if (*o_respLen < (hostInterfaces::HBRT_FW_MSG_BASE_SIZE +
+ sizeof(l_resp_fw_msg->resp_generic)))
+ {
+ retVal = -EINVAL;
+ break;
+ }
TRACFCOMP(g_trac_hbrt,
"rt_firmware_request for error log: "
@@ -803,41 +816,86 @@ class RuntimeLoaderTest : public CxxTest::TestSuite
retVal = 0; // just return 0 for testing
}
- else if (hostInterfaces::HBRT_FW_MSG_HBRT_FSP
+ else if (hostInterfaces::HBRT_FW_MSG_HBRT_FSP_REQ
== l_req_fw_msg->io_type)
{
if (i_reqLen < (hostInterfaces::HBRT_FW_MSG_BASE_SIZE +
- sizeof(l_req_fw_msg->generic_message)))
+ sizeof(l_req_fw_msg->generic_msg)))
{
retVal = -EINVAL;
break;
}
+ if (*o_respLen < (hostInterfaces::HBRT_FW_MSG_BASE_SIZE +
+ sizeof(l_resp_fw_msg->generic_msg)))
+ {
+ retVal = -EINVAL;
+ break;
+ }
+
+ uint32_t* l_data =
+ (uint32_t*) &(l_req_fw_msg->generic_msg.data);
TRACFCOMP(g_trac_hbrt,
- "rt_firmware_request for VPD Write Msg: "
- "type:0x%.8X, msgq:0x%.8X, VPD type:0x%.8X, data:0x%X",
+ "rt_firmware_request for VPD Write Msg request: "
+ "type:%d, magic:0x%.8X, dataSize:%d, structVer:0x%.8X, "
+ "seqnum:%d, msgq:0x%.8X, msgType:0x%.8X, __req:%d, "
+ "__onlyError:%d, data:0x%.8X, plid:0x%.8X, huid:0x%.8X",
l_req_fw_msg->io_type,
- l_req_fw_msg->generic_message.msgq,
- l_req_fw_msg->generic_message.msgType,
- l_req_fw_msg->generic_message.data);
-
- l_resp_fw_msg->io_type =
- hostInterfaces::HBRT_FW_MSG_HBRT_FSP_RESP;
+ l_req_fw_msg->generic_msg.magic,
+ l_req_fw_msg->generic_msg.dataSize,
+ l_req_fw_msg->generic_msg.structVer,
+ l_req_fw_msg->generic_msg.seqnum,
+ l_req_fw_msg->generic_msg.msgq,
+ l_req_fw_msg->generic_msg.msgType,
+ l_req_fw_msg->generic_msg.__req,
+ l_req_fw_msg->generic_msg.__onlyError,
+ l_req_fw_msg->generic_msg.data,
+ l_data[0],
+ l_data[1]);
// random testing data
- l_resp_fw_msg->generic_message_resp.msgq = 0x800;
- l_resp_fw_msg->generic_message_resp.msgType = 0x900;
- l_resp_fw_msg->generic_message_resp.errPlid = 0xA00;
- retVal = 0;
+ struct
+ {
+ uint32_t plid;
+ uint32_t huid;
+ } l_resp_data;
+ l_resp_fw_msg->io_type =
+ hostInterfaces::HBRT_FW_MSG_HBRT_FSP_RESP;
+ l_resp_fw_msg->generic_msg.magic = 0x10;
+ l_resp_fw_msg->generic_msg.dataSize =
+ sizeof(l_resp_fw_msg->generic_msg);
+ l_resp_fw_msg->generic_msg.structVer = 0x2;
+ l_resp_fw_msg->generic_msg.seqnum = 0x30;
+ l_resp_fw_msg->generic_msg.msgq = 0x40;
+ l_resp_fw_msg->generic_msg.msgType = 0x50;
+ l_resp_fw_msg->generic_msg.__req = GFMM_RESPONSE;
+ l_resp_fw_msg->generic_msg.__onlyError =
+ GFMM_NOT_ERROR_ONLY;
+ l_resp_data.plid = 0x60;
+ l_resp_data.huid = 0x70;
+ memcpy(&(l_resp_fw_msg->generic_msg.data),
+ &(l_resp_data),
+ sizeof(l_resp_fw_msg->generic_msg.data));
+ retVal = 5;
TRACFCOMP(g_trac_hbrt,
"rt_firmware_request for VPD Write Msg response: "
- "type:0x%.8X, msgq:0x%.8X, msgType:0x%.8X,"
- " errPlid:0x%X, retVal=%d",
+ "type:%d, magic:0x%.8X, dataSize:%d, structVer:0x%.8X, "
+ "seqnum:%d, msgq:0x%.8X, msgType:0x%.8X, __req:%d, "
+ "__onlyError:%d, data:0x%.8X, plid:0x%.8X, huid:0x%.8X, "
+ "retVal=%d",
l_resp_fw_msg->io_type,
- l_resp_fw_msg->generic_message_resp.msgq,
- l_resp_fw_msg->generic_message_resp.msgType,
- l_resp_fw_msg->generic_message_resp.errPlid,
+ l_resp_fw_msg->generic_msg.magic,
+ l_resp_fw_msg->generic_msg.dataSize,
+ l_resp_fw_msg->generic_msg.structVer,
+ l_resp_fw_msg->generic_msg.seqnum,
+ l_resp_fw_msg->generic_msg.msgq,
+ l_resp_fw_msg->generic_msg.msgType,
+ l_resp_fw_msg->generic_msg.__req,
+ l_resp_fw_msg->generic_msg.__onlyError,
+ l_resp_fw_msg->generic_msg.data,
+ l_resp_fw_msg->generic_msg.data >> 32,
+ 0x0000FFFF & l_resp_fw_msg->generic_msg.data,
retVal);
}
else
@@ -864,7 +922,4 @@ uint64_t RuntimeLoaderTest::cv_hb_data_addr = 0;
uint64_t RuntimeLoaderTest::cv_comm_addr = 0;
uint64_t RuntimeLoaderTest::cv_comm_phys_addr = 0;
-
-
-
#endif
OpenPOWER on IntegriCloud