aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMamatha <mamatha4@linux.vnet.ibm.com>2016-01-27 14:19:44 +0530
committerStewart Smith <stewart@linux.vnet.ibm.com>2016-04-06 04:57:31 +1000
commit0b009d42513752adc9e68b58760b1593f35048b7 (patch)
tree6aad6a2195bc8544ac110c50524dddc0fe518dfc
parent2636009a779160fa0f67cc0ccf19fe0fb0737115 (diff)
downloadskiboot-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.c16
-rw-r--r--include/errorlog.h2
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,