diff options
author | Mamatha <mamatha4@linux.vnet.ibm.com> | 2016-01-27 14:19:44 +0530 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2016-04-06 04:57:31 +1000 |
commit | 0b009d42513752adc9e68b58760b1593f35048b7 (patch) | |
tree | 6aad6a2195bc8544ac110c50524dddc0fe518dfc | |
parent | 2636009a779160fa0f67cc0ccf19fe0fb0737115 (diff) | |
download | skiboot-0b009d42513752adc9e68b58760b1593f35048b7.zip skiboot-0b009d42513752adc9e68b58760b1593f35048b7.tar.gz skiboot-0b009d42513752adc9e68b58760b1593f35048b7.tar.bz2 |
OPAL:Handle mbox response with bad status:0x24 during FSP termination
Problem Description:
During FSP termination/reset, FSP received mbox command from OPAL for
"Fetching platform management function data". As FSP is in termination
state DMAE operation failed to write memory data to hypervisor,
so FSP sent mbox command with response status as 0x24 to OPAL and
OPAL committed a predictive log with SRC BB822411 and sent back
response status as 0xFE, which FSP IPMI will not understand the
failure at the Host and IPMI will log the error.
Fix:This patch is to fix when OPAL receives a bad response from FSP 0x24
due to DMAE error, commit informational log and return response status
as SUCCESS and for all other bad status response commit predictive log.
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Reviewed-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r-- | hw/fsp/fsp-ipmi.c | 16 | ||||
-rw-r--r-- | include/errorlog.h | 2 |
2 files changed, 15 insertions, 3 deletions
diff --git a/hw/fsp/fsp-ipmi.c b/hw/fsp/fsp-ipmi.c index 750d144..f803f17 100644 --- a/hw/fsp/fsp-ipmi.c +++ b/hw/fsp/fsp-ipmi.c @@ -50,6 +50,10 @@ DEFINE_LOG_ENTRY(OPAL_RC_IPMI_RESP, OPAL_PLATFORM_ERR_EVT, OPAL_IPMI, OPAL_PLATFORM_FIRMWARE, OPAL_PREDICTIVE_ERR_GENERAL, OPAL_NA); +DEFINE_LOG_ENTRY(OPAL_RC_IPMI_DMA_ERROR_RESP, OPAL_PLATFORM_ERR_EVT, OPAL_IPMI, + OPAL_PLATFORM_FIRMWARE, OPAL_INFO, + OPAL_NA); + struct fsp_ipmi_msg { struct list_node link; struct ipmi_msg ipmi_msg; @@ -281,13 +285,19 @@ static bool fsp_ipmi_read_response(struct fsp_msg *msg) assert(msg->data.words[1] == PSI_DMA_PLAT_RESP_BUF); if (status != FSP_STATUS_SUCCESS) { - log_simple_error(&e_info(OPAL_RC_IPMI_RESP), "IPMI: Response " - "with bad status:0x%02x\n", status); + if(status == FSP_STATUS_DMA_ERROR) + log_simple_error(&e_info(OPAL_RC_IPMI_DMA_ERROR_RESP), "IPMI: Received " + "DMA ERROR response from FSP, this may be due to FSP " + "is in termination state:0x%02x\n", status); + else + log_simple_error(&e_info(OPAL_RC_IPMI_RESP), "IPMI: FSP response " + "received with bad status:0x%02x\n", status); + fsp_ipmi_cmd_done(ipmi_msg->cmd, IPMI_NETFN_RETURN_CODE(ipmi_msg->netfn), IPMI_ERR_UNSPECIFIED); return fsp_ipmi_send_response(FSP_RSP_PLAT_DATA | - FSP_STATUS_GENERIC_ERROR); + FSP_STATUS_SUCCESS); } /* KCS response message format */ diff --git a/include/errorlog.h b/include/errorlog.h index 33d2de2..ed90dab 100644 --- a/include/errorlog.h +++ b/include/errorlog.h @@ -322,6 +322,8 @@ enum opal_reasoncode { /* IPMI */ OPAL_RC_IPMI_REQ = OPAL_IP | 0x10, OPAL_RC_IPMI_RESP = OPAL_IP | 0x11, + OPAL_RC_IPMI_DMA_ERROR_RESP + = OPAL_IP | 0x12, /* Platform error */ OPAL_RC_ABNORMAL_REBOOT = OPAL_CE | 0x10, |