aboutsummaryrefslogtreecommitdiff
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
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>
-rw-r--r--hw/fsp/fsp-leds.c63
-rw-r--r--include/fsp.h21
2 files changed, 84 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 */
diff --git a/include/fsp.h b/include/fsp.h
index 53d03f9..0464da4 100644
--- a/include/fsp.h
+++ b/include/fsp.h
@@ -453,6 +453,27 @@
#define FSP_RSP_GET_LED_STATE 0x00da9100
#define FSP_CMD_SET_LED_STATE 0x00da1104 /* Set Service Indicator State */
#define FSP_RSP_SET_LED_STATE 0x00da9100
+#define FSP_CMD_GET_MTMS_LIST 0x00da1105 /* Get MTMS and config ID list */
+#define FSP_RSP_GET_MTMS_LIST 0x00da9100
+#define FSP_CMD_SET_ENCL_MTMS 0x00da1106 /* Set MTMS */
+#define FSP_RSP_SET_ENCL_MTMS 0x00da9100
+#define FSP_CMD_SET_ENCL_CNFG 0x00da1107 /* Set config ID */
+#define FSP_RSP_SET_ENCL_CNFG 0x00da9100
+#define FSP_CMD_CLR_INCT_ENCL 0x00da1108 /* Clear inactive address */
+#define FSP_RSP_CLR_INCT_ENCL 0x00da9100
+#define FSP_CMD_RET_MTMS_BUFFER 0x00da1109 /* Return MTMS buffer */
+#define FSP_RSP_RET_MTMS_BUFFER 0x00da9100
+#define FSP_CMD_ENCL_MCODE_INIT 0x00da110A /* Mcode update (Initiate download) */
+#define FSP_RSP_ENCL_MCODE_INIT 0x00da9100
+#define FSP_CMD_ENCL_MCODE_INTR 0x00da110B /* Mcode update (Interrupt download) */
+#define FSP_RSP_ENCL_MCODE_INTR 0x00da9100
+#define FSP_CMD_ENCL_POWR_TRACE 0x00da110D /* Enclosure power network trace */
+#define FSP_RSP_ENCL_POWR_TRACE 0x00da9100
+#define FSP_CMD_RET_ENCL_TRACE_BUFFER 0x00da110E /* Return power trace buffer */
+#define FSP_RSP_RET_ENCL_TRACE_BUFFER 0x00da9100
+#define FSP_CMD_GET_SPCN_LOOP_STATUS 0x00da110F /* Get SPCN loop status */
+#define FSP_RSP_GET_SPCN_LOOP_STATUS 0x00da9100
+#define FSP_CMD_INITIATE_LAMP_TEST 0x00da1300 /* Initiate LAMP test */
/*
* Class 0xE0