aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorAnshuman Khandual <khandual@linux.vnet.ibm.com>2014-10-13 16:48:45 +0530
committerStewart Smith <stewart@linux.vnet.ibm.com>2014-10-15 14:34:18 +1100
commitae839f895a5ab94d1475a70368fb10428a10bb4b (patch)
tree00c7aa1b591e9f4e8c49c6da82631ee42fe804d6 /hw
parentedcf6bc3f3af2c07b1e57ee5d0168f3b3f492871 (diff)
downloadskiboot-ae839f895a5ab94d1475a70368fb10428a10bb4b.zip
skiboot-ae839f895a5ab94d1475a70368fb10428a10bb4b.tar.gz
skiboot-ae839f895a5ab94d1475a70368fb10428a10bb4b.tar.bz2
led: Handle all the FSP_MCLASS_INDICATOR class sub commands
Right now if any non-LED FSP_MCLASS_INDICATOR class sub command is received, we print it as an invalid sub command like the following which then eventually gets reported as an unhandled FSP message. [163022636453,5] FSPLED: Invalid FSP async sub command da1105 [163022638116,3] FSP: Unhandled message da1105 This patch defines the complete list of FSP_MCLASS_INDICATOR sub commands and handle them in the registered FSP async command client by sending a generic error acknowledgement to the FSP. Reported-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com> Reviewed-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/fsp/fsp-leds.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/hw/fsp/fsp-leds.c b/hw/fsp/fsp-leds.c
index 05f12d8..4eea8d6 100644
--- a/hw/fsp/fsp-leds.c
+++ b/hw/fsp/fsp-leds.c
@@ -741,6 +741,8 @@ void fsp_set_led_state(struct fsp_msg *msg)
/* Handle received indicator message from FSP */
static bool fsp_indicator_message(u32 cmd_sub_mod, struct fsp_msg *msg)
{
+ u32 cmd;
+
/* LED support not available yet */
if (!led_support) {
log_simple_error(&e_info(OPAL_RC_LED_SUPPORT),
@@ -770,12 +772,73 @@ static bool fsp_indicator_message(u32 cmd_sub_mod, struct fsp_msg *msg)
"FSP_CMD_SET_LED_STATE command received\n");
fsp_set_led_state(msg);
return true;
+ /*
+ * FSP async sub commands which have not been implemented.
+ * For these async sub commands, print for the log and ack
+ * the field service processor with a generic error.
+ */
+ case FSP_CMD_GET_MTMS_LIST:
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_GET_MTMS_LIST command received\n");
+ cmd = FSP_RSP_GET_MTMS_LIST;
+ break;
+ case FSP_CMD_RET_MTMS_BUFFER:
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_RET_MTMS_BUFFER command received\n");
+ cmd = FSP_RSP_RET_MTMS_BUFFER;
+ break;
+ case FSP_CMD_SET_ENCL_MTMS:
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_SET_MTMS command received\n");
+ cmd = FSP_RSP_SET_ENCL_MTMS;
+ break;
+ case FSP_CMD_CLR_INCT_ENCL:
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_CLR_INCT_ENCL command received\n");
+ cmd = FSP_RSP_CLR_INCT_ENCL;
+ break;
+ case FSP_CMD_ENCL_MCODE_INIT:
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_ENCL_MCODE_INIT command received\n");
+ cmd = FSP_RSP_ENCL_MCODE_INIT;
+ break;
+ case FSP_CMD_ENCL_MCODE_INTR:
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_ENCL_MCODE_INTR command received\n");
+ cmd = FSP_RSP_ENCL_MCODE_INTR;
+ break;
+ case FSP_CMD_ENCL_POWR_TRACE:
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_ENCL_POWR_TRACE command received\n");
+ cmd = FSP_RSP_ENCL_POWR_TRACE;
+ break;
+ case FSP_CMD_RET_ENCL_TRACE_BUFFER:
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_RET_ENCL_TRACE_BUFFER \
+ command received\n");
+ cmd = FSP_RSP_RET_ENCL_TRACE_BUFFER;
+ break;
+ case FSP_CMD_GET_SPCN_LOOP_STATUS:
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_GET_SPCN_LOOP_STATUS \
+ command received\n");
+ cmd = FSP_RSP_GET_SPCN_LOOP_STATUS;
+ break;
+ case FSP_CMD_INITIATE_LAMP_TEST:
+ /* XXX: FSP ACK not required for this sub command */
+ prlog(PR_TRACE, PREFIX
+ "FSP_CMD_INITIATE_LAMP_TEST \
+ command received\n");
+ return true;
default:
prlog(PR_WARNING, PREFIX
"Invalid FSP async sub command %06x\n",
cmd_sub_mod);
return false;
}
+ cmd |= FSP_STATUS_GENERIC_ERROR;
+ fsp_queue_msg(fsp_mkmsg(cmd, 0), fsp_freemsg);
+ return true;
}
/* Indicator class client */