diff options
Diffstat (limited to 'src/usr/isteps/pm')
-rw-r--r-- | src/usr/isteps/pm/runtime/rt_pm.C | 139 | ||||
-rw-r--r-- | src/usr/isteps/pm/runtime/test/firmwareRequestTest.H | 11 |
2 files changed, 58 insertions, 92 deletions
diff --git a/src/usr/isteps/pm/runtime/rt_pm.C b/src/usr/isteps/pm/runtime/rt_pm.C index 33d2014d1..ecddab2a2 100644 --- a/src/usr/isteps/pm/runtime/rt_pm.C +++ b/src/usr/isteps/pm/runtime/rt_pm.C @@ -28,16 +28,19 @@ #include <errl/errlmanager.H> #include <errno.h> #include <sys/misc.h> + #include <trace/interface.H> #include <util/utillidmgr.H> #include <pm/pm_common.H> #include <isteps/pm/pm_common_ext.H> -#include <runtime/interface.h> +#include <runtime/interface.h> // g_hostInterfaces +#include <runtime/rt_fwreq_helper.H> // firmware_request_helper #include <runtime/rt_targeting.H> #include <runtime/runtime_reasoncodes.H> + #include <initservice/isteps_trace.H> // targeting support @@ -49,6 +52,7 @@ using namespace TARGETING; using namespace RUNTIME; +using namespace ERRORLOG; namespace ISTEPS_TRACE { @@ -342,6 +346,7 @@ namespace RTPM "/firmware_request interface not linked"); /*@ * @errortype + * @severity ERRL_SEV_INFORMATIONAL * @moduleid MOD_PM_RT_HCODE_UPDATE * @reasoncode RC_PM_RT_INTERFACE_ERR * @userdata1[0:31] Target HUID @@ -350,14 +355,13 @@ namespace RTPM * @devdesc HCODE scom update runtime * interface not linked. */ - l_err= new ERRORLOG::ErrlEntry( - ERRORLOG::ERRL_SEV_INFORMATIONAL, - MOD_PM_RT_HCODE_UPDATE, - RC_PM_RT_INTERFACE_ERR, - TWO_UINT32_TO_UINT64( - TARGETING::get_huid(i_target), - i_section), - i_rel_scom_addr); + l_err= new ErrlEntry(ERRL_SEV_INFORMATIONAL, + MOD_PM_RT_HCODE_UPDATE, + RC_PM_RT_INTERFACE_ERR, + TWO_UINT32_TO_UINT64( + TARGETING::get_huid(i_target), + i_section), + i_rel_scom_addr); break; } @@ -411,32 +415,37 @@ namespace RTPM TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, ERR_MRK"hcode_update: " "HCODE scom update failed. " - "rc 0x%X target 0x%llX chipId 0x%llX section 0x%X " - "operation 0x%X scomAddr 0x%llX scomData 0x%llX", + "rc: 0x%X, target: 0x%llX, chipId: 0x%llX, " + "section: 0x%X, operation: 0x%X, scomAddr: 0x%llX, " + "scomData: 0x%llX", rc, get_huid(i_target), l_chipId, i_section, i_operation, l_scomAddr, i_scom_data); - // convert rc to error log /*@ * @errortype + * @severity ERRL_SEV_INFORMATIONAL * @moduleid MOD_PM_RT_HCODE_UPDATE * @reasoncode RC_PM_RT_HCODE_UPDATE_ERR * @userdata1 Hypervisor return code * @userdata2 SCOM address * @devdesc HCODE SCOM update error */ - l_err=new ERRORLOG::ErrlEntry( - ERRORLOG::ERRL_SEV_INFORMATIONAL, - MOD_PM_RT_HCODE_UPDATE, - RC_PM_RT_HCODE_UPDATE_ERR, - rc, - l_scomAddr); + l_err = new ErrlEntry( ERRL_SEV_INFORMATIONAL, + MOD_PM_RT_HCODE_UPDATE, + RC_PM_RT_HCODE_UPDATE_ERR, + rc, + l_scomAddr); break; } } else if (g_hostInterfaces->firmware_request != nullptr) { + // Create the firmware_request request struct to send data hostInterfaces::hbrt_fw_msg l_req_fw_msg; + uint64_t l_req_fw_msg_size = sizeof(l_req_fw_msg); + memset(&l_req_fw_msg, 0, l_req_fw_msg_size); + + // Populate the firmware_request request struct with given data l_req_fw_msg.io_type = hostInterfaces::HBRT_FW_MSG_TYPE_REQ_HCODE_UPDATE; l_req_fw_msg.req_hcode_update.i_chipId = l_chipId; @@ -445,82 +454,35 @@ namespace RTPM l_req_fw_msg.req_hcode_update.i_scomAddr = l_scomAddr; l_req_fw_msg.req_hcode_update.i_scomData = i_scom_data; + // Trace out firmware request info + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + INFO_MRK"HCODE update firmware request info: " + "io_type:%d, chipId:0x%llX, section:0x%X, " + "operation:0x%X, scomAddr:0x%llX, scomData:0x%llX", + l_req_fw_msg.io_type, + l_req_fw_msg.req_hcode_update.i_chipId, + l_req_fw_msg.req_hcode_update.i_section, + l_req_fw_msg.req_hcode_update.i_operation, + l_req_fw_msg.req_hcode_update.i_scomAddr, + l_req_fw_msg.req_hcode_update.i_scomData); + + // Create the firmware_request response struct to receive data hostInterfaces::hbrt_fw_msg l_resp_fw_msg; uint64_t l_resp_fw_msg_size = sizeof(l_resp_fw_msg); - rc = g_hostInterfaces->firmware_request(sizeof(l_req_fw_msg), - &l_req_fw_msg, &l_resp_fw_msg_size, &l_resp_fw_msg); - if(rc) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - ERR_MRK"firmware request: " - "firmware request for hcode scom update failed. " - "rc 0x%X target 0x%llX chipId 0x%llX section 0x%X " - "operation 0x%X scomAddr 0x%llX scomData 0x%llX", - rc, get_huid(i_target), l_chipId, i_section, - i_operation, l_scomAddr, i_scom_data); + memset(&l_resp_fw_msg, 0, l_resp_fw_msg_size); - // convert rc to error log - /*@ - * @errortype - * @moduleid MOD_PM_RT_FIRMWARE_REQUEST - * @reasoncode RC_PM_RT_HCODE_UPDATE_ERR - * @userdata1[0:31] Firmware Request return code - * @userdata1[32:63] SCOM address - * @userdata2[0:31] Generic response code - if it exists - * @userdata2[32:63] Firmware Response type - * @devdesc Firmware Request for - * HCODE SCOM update error - */ - // - // Pack the generic response code if the response - // is of type "RESP_GENERIC" - // else just send the response type alone - uint64_t l_userData2 = 0; - if (l_resp_fw_msg_size >= - hostInterfaces::HBRT_FW_MSG_BASE_SIZE) - { - // just assign the response type for now - l_userData2 = l_resp_fw_msg.io_type; - - // Pack the response code if it is available - if ((l_resp_fw_msg_size >= - (hostInterfaces::HBRT_FW_MSG_BASE_SIZE + - sizeof(l_resp_fw_msg.resp_generic))) && - hostInterfaces::HBRT_FW_MSG_TYPE_RESP_GENERIC == - l_resp_fw_msg.io_type) - { - l_userData2 = TWO_UINT32_TO_UINT64 - (l_resp_fw_msg.resp_generic.o_status, - l_resp_fw_msg.io_type); - } - } - - l_err=new ERRORLOG::ErrlEntry( - ERRORLOG::ERRL_SEV_INFORMATIONAL, - MOD_PM_RT_FIRMWARE_REQUEST, - RC_PM_RT_HCODE_UPDATE_ERR, - TWO_UINT32_TO_UINT64(rc, l_scomAddr), - l_userData2); - - if (l_resp_fw_msg_size > 0) - { - l_err->addFFDC( ISTEP_COMP_ID, - &l_resp_fw_msg, - l_resp_fw_msg_size, - 0, 0, false ); - } - - if (sizeof(l_req_fw_msg) > 0) - { - l_err->addFFDC( ISTEP_COMP_ID, - &l_req_fw_msg, - sizeof(l_req_fw_msg), - 0, 0, false ); - } + // Make the firmware_request call + l_err = firmware_request_helper(l_req_fw_msg_size, + &l_req_fw_msg, + &l_resp_fw_msg_size, + &l_resp_fw_msg); + if (l_err) + { + // If error, break out of encompassing while loop break; } - } + } // END else if (g_hostInterfaces->firmware_request != nullptr) // Disable special wakeup l_err = handleSpecialWakeup(i_target,false); @@ -572,3 +534,4 @@ namespace RTPM registerPm g_registerPm; }; + diff --git a/src/usr/isteps/pm/runtime/test/firmwareRequestTest.H b/src/usr/isteps/pm/runtime/test/firmwareRequestTest.H index 01085dbae..2e2abe25e 100644 --- a/src/usr/isteps/pm/runtime/test/firmwareRequestTest.H +++ b/src/usr/isteps/pm/runtime/test/firmwareRequestTest.H @@ -187,7 +187,8 @@ class FirmwareRequestTest : public CxxTest::TestSuite hostInterfaces::hbrt_fw_msg l_req_fw_msg; l_req_fw_msg.generic_msg.initialize(); - if (l_req_fw_msg.generic_msg.magic != GFMM_MAGIC_NUMBER) + if (l_req_fw_msg.generic_msg.magic != + GenericFspMboxMessage_t::MAGIC_NUMBER) { TS_FAIL("FirmwareRequestTest::testFirmwareRequestHbrtToFsp: " "magic was not properly initialized"); @@ -200,7 +201,8 @@ class FirmwareRequestTest : public CxxTest::TestSuite "dataSize was not properly initialized"); } - if (l_req_fw_msg.generic_msg.structVer != GFMM_VERSION) + if (l_req_fw_msg.generic_msg.structVer != + GenericFspMboxMessage_t::STRUCT_VERSION_LATEST) { TS_FAIL("FirmwareRequestTest::testFirmwareRequestHbrtToFsp: " "structVer was not properly initialized"); @@ -220,8 +222,9 @@ class FirmwareRequestTest : public CxxTest::TestSuite l_req_fw_msg.generic_msg.seqnum = 0x300; l_req_fw_msg.generic_msg.msgq = 0x400; l_req_fw_msg.generic_msg.msgType = 0x500; - l_req_fw_msg.generic_msg.__req = GFMM_REQUEST; - l_req_fw_msg.generic_msg.__onlyError = GFMM_ERROR_ONLY; + l_req_fw_msg.generic_msg.__req = GenericFspMboxMessage_t::REQUEST; + l_req_fw_msg.generic_msg.__onlyError = + GenericFspMboxMessage_t::ERROR_ONLY; uint32_t l_plid = 0x600; uint32_t l_huid = 0x700; l_req_fw_msg.generic_msg.data = |