diff options
| author | Roland Veloz <rveloz@us.ibm.com> | 2017-11-21 15:02:53 -0600 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-12-20 17:47:12 -0500 |
| commit | 8e6bd68539af8394a3f96dab15464edc151794bb (patch) | |
| tree | 03e3f07d0599bc0e60b54e4e3aa4d4c38b333f37 /src/include | |
| parent | 5cd50322982059a6b71d5957e22f6f85da17404e (diff) | |
| download | talos-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/include')
| -rw-r--r-- | src/include/runtime/generic_hbrt_fsp_message.H | 105 | ||||
| -rw-r--r-- | src/include/runtime/interface.h | 18 | ||||
| -rw-r--r-- | src/include/usr/runtime/runtime_reasoncodes.H | 6 |
3 files changed, 98 insertions, 31 deletions
diff --git a/src/include/runtime/generic_hbrt_fsp_message.H b/src/include/runtime/generic_hbrt_fsp_message.H index 742270e66..1eebb7b09 100644 --- a/src/include/runtime/generic_hbrt_fsp_message.H +++ b/src/include/runtime/generic_hbrt_fsp_message.H @@ -34,40 +34,105 @@ * FSP/HWSV team to send and receive data. */ + +/** + * Values for the GenericFspMboxMessage_t::magic + * and GenericFspMboxMessage_t::structVer data members + */ +const uint32_t GFMM_MAGIC_NUMBER = 0x4746464D; // `GFFM` +const uint16_t GFMM_VERSION = 1; + +/** + * Values for the GenericFspMboxMessage_t::__req flag + */ +enum GENERIC_FSP_MBOX_MESSAGE_FLOW +{ + GFMM_RESPONSE = 0, + GFMM_REQUEST = 1, +}; + /** - * This struct sends an MBox message to the FSP + * Values for the GenericFspMboxMessage_t::__onlyError flag + */ +enum GENERIC_FSP_MBOX_MESSAGE_ERROR_FLAG +{ + GFMM_NOT_ERROR_ONLY = 0, + GFMM_ERROR_ONLY = 1, +}; + +/** + * The different message types for the GenericFspMboxMessage_t + */ +enum GENERIC_FSP_MBOX_MESSAGE_MSG_TYPE +{ + GFMM_MSG_TOD_BACKUP_RESET = 0x0001, + GFMM_MSG_TOD_BACKUP_RESET_INFORM_PHYP = 0x0002, + GFMM_MSG_TOD_TOPOLOGY_DATA = 0x0003, + GFMM_MSG_SBE_ERROR = 0x000000E1, + GFMM_MSG_SBE_RECOVERY_SUCCESS = 0x000000E2, + GFMM_MSG_SBE_RECOVERY_FAILED = 0x000000E3, +}; + +/** + * This generates a sequence ID that the GenericFspMboxMessage_t + * consumes. + */ +struct SeqId_t +{ +public: + static uint16_t getNextSeqId(); + static uint16_t getCurrentSeqId(); + +private: + static uint16_t GFMM_SEQ_ID; +}; + +/** + * This struct sends/receives an MBox message to the FSP */ struct GenericFspMboxMessage_t { - uint32_t msgq; // Example: MBOX::FSP_VPD_MSGQ - uint32_t msgType; // Example: VPD_MSG_TYPE:VPD_WRITE_PROC + uint32_t magic; // ='GFMM' + uint32_t dataSize; // total number of bytes in the entire message, + // includes structure plus data buffer, + // minimum is sizeof(GenericFspMboxMessage_t) + uint8_t structVer; // =1, allow for future modifications + uint8_t reserved; // unused, just for alignment and expansion + uint16_t seqnum; // incremented for each new request, bit0=1 indicates + // the request came from the FSP, i.e. 0x0000->0x7FFF + // are from HBRT, 0x8000->0xFFFF are from HWSV. + uint32_t msgq; // Example: MBOX::FSP_VPD_MSGQ + uint32_t msgType; // Example: VPD_MSG_TYPE:VPD_WRITE_PROC struct // flags { - uint32_t __reserved__async:1; - uint32_t __reserved__pseudosync:1; - uint32_t __reserved__unused:30; + uint32_t __req:1; // 1=this is a request, 0=this is a response + uint32_t __async:1; // =0 for now, future async req/resp support + uint32_t __onlyError:1; // 1=this is a response that only contains a + // single 32-bit plid in the first 4 bytes of + // the data payload + uint32_t __unused:29; // reserved for future }; uint64_t data; // generic member that can be used // to do casting to other types: // MyDataType_t* mydatatype = // (MyDataType_t*)&(l_generic_msg.data); -} PACKED ; -/** - * This struct receives the response message from the FSP - */ -struct GenericFspRspMessage_t -{ - uint32_t msgq; // Example: MBOX::FSP_VPD_MSGQ - uint32_t msgType; // Example: VPD_MSG_TYPE:VPD_WRITE_PROC - struct // flags + // A method to set the local vars to a default state + void initialize() { - uint32_t __reserved__async:1; - uint32_t __reserved__pseudosync:1; - uint32_t __reserved__unused:30; + magic = GFMM_MAGIC_NUMBER; + dataSize = sizeof(GenericFspMboxMessage_t); + structVer = GFMM_VERSION; + reserved = 0; + seqnum = SeqId_t::getNextSeqId(); + msgq = 0; + msgType = 0; + __req = GFMM_RESPONSE; + __async = 0; + __onlyError = GFMM_NOT_ERROR_ONLY; + __unused = 0; + data = 0; }; - uint32_t errPlid; // error log id } PACKED ; - #endif // __RUNTIME__GENERIC_HBRT_FSP_MESSAGE_H diff --git a/src/include/runtime/interface.h b/src/include/runtime/interface.h index 7258826ca..8aad5d5fb 100644 --- a/src/include/runtime/interface.h +++ b/src/include/runtime/interface.h @@ -503,7 +503,7 @@ typedef struct hostInterfaces HBRT_FW_MSG_TYPE_RESP_NOP = 1, HBRT_FW_MSG_TYPE_RESP_GENERIC = 2, HBRT_FW_MSG_TYPE_REQ_HCODE_UPDATE = 3, - HBRT_FW_MSG_HBRT_FSP = 4, + HBRT_FW_MSG_HBRT_FSP_REQ = 4, HBRT_FW_MSG_TYPE_ERROR_LOG = 5, HBRT_FW_MSG_HBRT_FSP_RESP = 6, }; @@ -550,21 +550,17 @@ typedef struct hostInterfaces } __attribute__ ((packed)) error_log; // This struct is sent from HBRT with - // io_type set to HBRT_FW_MSG_HBRT_FSP - // This struct sends an MBox message to the FSP - struct GenericFspMboxMessage_t generic_message; - - // This struct is sent from FSP with - // io_type set to HBRT_FW_MSG_HBRT_FSP_RESP - // This struct receives a message from the FSP - struct GenericFspRspMessage_t generic_message_resp; - + // io_type set to HBRT_FW_MSG_HBRT_FSP_REQ or + // HBRT_FW_MSG_HBRT_FSP_RESP + // This struct sends/receives an MBox message to the FSP + struct GenericFspMboxMessage_t generic_msg; }; // end union }; // end struct hbrt_fw_msg // Created a static constexpr to return the base size of hbrt_fw_msg // Can't do #define - sizeof not allowed to be used in #defines - static constexpr size_t HBRT_FW_MSG_BASE_SIZE = sizeof(uint64_t); + static constexpr size_t HBRT_FW_MSG_BASE_SIZE = + sizeof(hbrt_fw_msg::io_type); /** * @brief Send a request to firmware, and receive a response diff --git a/src/include/usr/runtime/runtime_reasoncodes.H b/src/include/usr/runtime/runtime_reasoncodes.H index 4ce07c0c2..5b38a8b08 100644 --- a/src/include/usr/runtime/runtime_reasoncodes.H +++ b/src/include/usr/runtime/runtime_reasoncodes.H @@ -60,6 +60,7 @@ namespace RUNTIME MOD_FILL_RSVMEM_HBDATA = 0x20, /**< populate_hbruntime.C */ MOD_ATTR_RUNTIME_CHECK_PREP_FAIL = 0x21, /**< populate_hbruntime.C */ MOD_PM_RT_FIRMWARE_REQUEST = 0x22, /**< rt_pm.C */ + MOD_RT_FIRMWARE_NOTIFY = 0x23, /**< rt_fwnotify.C */ }; enum RuntimeReasonCode @@ -114,6 +115,11 @@ namespace RUNTIME RC_TPM_HDAT_BAD_NUM_I2C = RUNTIME_COMP_ID | 0x2F, RC_INVALID_LID = RUNTIME_COMP_ID | 0x30, RC_PREVER_INVALID_SIZE = RUNTIME_COMP_ID | 0x31, + RC_FW_NOTIFY_RT_INVALID_MSG = RUNTIME_COMP_ID | 0x32, + RC_FW_NOTIFY_RT_INVALID_MSG_TYPE = RUNTIME_COMP_ID | 0x33, + RC_FW_REQUEST_RT_NULL_PTR = RUNTIME_COMP_ID | 0x34, + RC_SBE_RT_INVALID_HUID = RUNTIME_COMP_ID | 0x35, + RC_SBE_RT_RECOVERY_ERR = RUNTIME_COMP_ID | 0x36, }; enum UserDetailsTypes |

