summaryrefslogtreecommitdiffstats
path: root/src/usr/htmgt
diff options
context:
space:
mode:
authorChris Cain <cjcain@us.ibm.com>2017-05-17 10:11:10 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-05-18 09:22:09 -0400
commitd02273fb506c99bb2951453feae27f6acc863a2f (patch)
treefb653d53ed012fb132278ce70007bc7bc8126616 /src/usr/htmgt
parent31f5557096bd4f02b917be575211946d2698fb26 (diff)
downloadtalos-hostboot-d02273fb506c99bb2951453feae27f6acc863a2f.tar.gz
talos-hostboot-d02273fb506c99bb2951453feae27f6acc863a2f.zip
Allow MFG, AME, and debug commands to be sent via HTMGT
Change-Id: I3c098bc42620aa92002b7160742906406048c8c2 RTC: 172167 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40629 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Martha Broyles <mbroyles@us.ibm.com> Reviewed-by: Sheldon R. Bailey <baileysh@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/htmgt')
-rw-r--r--src/usr/htmgt/htmgt_occcmd.C200
-rw-r--r--src/usr/htmgt/htmgt_occcmd.H3
-rw-r--r--src/usr/htmgt/htmgt_utility.C3
3 files changed, 95 insertions, 111 deletions
diff --git a/src/usr/htmgt/htmgt_occcmd.C b/src/usr/htmgt/htmgt_occcmd.C
index 9e1bf3022..4fdd518b7 100644
--- a/src/usr/htmgt/htmgt_occcmd.C
+++ b/src/usr/htmgt/htmgt_occcmd.C
@@ -79,11 +79,18 @@ namespace HTMGT
0x0000, TO_20SEC, 0x0090, OCC_TRACE_EXTENDED},
{OCC_CMD_RESET_PREP, 0x80, OCC_CHECK_RSP_LENGTH_GREATER,
0x0000, TO_20SEC, 0x0190, OCC_TRACE_ALWAYS},
+ {OCC_CMD_DEBUG_PASS_THROUGH, 0xF0, OCC_CHECK_RSP_LENGTH_NONE,
+ 0x0000, TO_20SEC, RD_MAX, OCC_TRACE_EXTENDED},
+ {OCC_CMD_AME_PASS_THROUGH, 0xF0, OCC_CHECK_RSP_LENGTH_NONE,
+ 0x0000, TO_20SEC, RD_MAX, OCC_TRACE_EXTENDED},
{OCC_CMD_GET_FIELD_DEBUG_DATA, 0x80, OCC_CHECK_RSP_LENGTH_GREATER,
0x0001, TO_20SEC, RD_MAX, OCC_TRACE_NEVER},
+ {OCC_CMD_MFG_TEST, 0xF0, OCC_CHECK_RSP_LENGTH_NONE,
+ 0x0001, TO_20SEC, RD_MAX, OCC_TRACE_ALWAYS},
- {OCC_CMD_END_OF_TABLE, 0x00, OCC_CHECK_RSP_LENGTH_EQUALS,
- 0x0000, 0x0000, 0x0000, OCC_TRACE_NEVER}
+ // If command not found, use this last entry
+ {OCC_CMD_END_OF_TABLE, 0xE0, OCC_CHECK_RSP_LENGTH_NONE,
+ 0x0000, TO_20SEC, RD_MAX, OCC_TRACE_NEVER}
};
@@ -131,11 +138,6 @@ namespace HTMGT
{
uint8_t l_index = 0;
- // TODO RTC 124739 - convert to use lower_bound
- //= find(&cv_occCommandTable[0],
- // &cv_occCommandTable[OCC_CMDTABLE_SIZE-1],
- // i_cmd);
-
while ((cv_occCommandTable[l_index].cmdType != OCC_CMD_END_OF_TABLE) &&
(cv_occCommandTable[l_index].cmdType != i_cmd))
{
@@ -244,28 +246,25 @@ namespace HTMGT
const uint8_t l_instance = iv_Occ->iv_instance;
const uint8_t l_cmd_index = getCmdIndex(iv_OccCmd.cmdType);
- if (OCC_CMD_END_OF_TABLE != cv_occCommandTable[l_cmd_index].cmdType)
+ switch(cv_occCommandTable[l_cmd_index].traceCmd)
{
- switch(cv_occCommandTable[l_cmd_index].traceCmd)
- {
- case OCC_TRACE_ALWAYS:
- // Always trace command
- break;
-
- case OCC_TRACE_EXTENDED:
- // Trace command when tracing enabled
- o_cmdWasTraced = (G_debug_trace & DEBUG_TRACE_OCCCMD);
- break;
-
- case OCC_TRACE_NEVER:
- // Never trace these cmds (unless full tracing enabled)
- o_cmdWasTraced = (G_debug_trace&DEBUG_TRACE_OCCCMD_FULL);
- break;
-
- default:
- // Do nothing
- break;
- }
+ case OCC_TRACE_ALWAYS:
+ // Always trace command
+ break;
+
+ case OCC_TRACE_EXTENDED:
+ // Trace command when tracing enabled
+ o_cmdWasTraced = (G_debug_trace & DEBUG_TRACE_OCCCMD);
+ break;
+
+ case OCC_TRACE_NEVER:
+ // Never trace these cmds (unless full tracing enabled)
+ o_cmdWasTraced = (G_debug_trace&DEBUG_TRACE_OCCCMD_FULL);
+ break;
+
+ default:
+ // Do nothing
+ break;
}
if (o_cmdWasTraced)
@@ -448,105 +447,84 @@ namespace HTMGT
errlHndl_t OccCmd::sendOccCmd()
{
errlHndl_t l_errlHndl = NULL;
- uint8_t l_cmd_index = 0;
iv_OccRsp.returnStatus = OCC_COMMAND_IN_PROGRESS;
if (iv_Occ != NULL)
{
const occStateId l_occState = iv_Occ->iv_state;
- l_cmd_index = getCmdIndex(iv_OccCmd.cmdType);
- if (OCC_CMD_END_OF_TABLE!=cv_occCommandTable[l_cmd_index].cmdType)
+ const bool cmdTraced = traceCommand();
+
+ // Only allow commands if comm has been established,
+ // or this is a poll command
+ const bool l_commEstablished = iv_Occ->iv_commEstablished;
+ if ( (true == l_commEstablished) ||
+ ((false == l_commEstablished) &&
+ (OCC_CMD_POLL == iv_OccCmd.cmdType)) )
{
- const bool cmdTraced = traceCommand();
-
- // Only allow commands if comm has been established,
- // or this is a poll command
- const bool l_commEstablished = iv_Occ->iv_commEstablished;
- if ( (true == l_commEstablished) ||
- ((false == l_commEstablished) &&
- (OCC_CMD_POLL == iv_OccCmd.cmdType)) )
+ if (0 == iv_Occ->iv_exceptionLogged)
{
- if (0 == iv_Occ->iv_exceptionLogged)
+ iv_RetryCmd = false;
+ do
{
- iv_RetryCmd = false;
- do
+ // Send the command and receive the response
+ l_errlHndl = writeOccCmd();
+
+ // process response if OCC did not hit an exception
+ if (0 == iv_Occ->iv_exceptionLogged)
{
- // Send the command and receive the response
- l_errlHndl = writeOccCmd();
-
- // process response if OCC did not hit an exception
- if (0 == iv_Occ->iv_exceptionLogged)
- {
- processOccResponse(l_errlHndl, cmdTraced);
- }
-
- // skip retry if an exception was logged
- } while ((iv_RetryCmd) &&
- (0 == iv_Occ->iv_exceptionLogged));
- }
- else
- {
- // OCC has already logged an exception, no need to send
- TMGT_ERR("Skipping 0x%02X cmd since OCC has already "
- "logged an exception 0x%04X",
- iv_OccCmd.cmdType, iv_Occ->iv_exceptionLogged);
- /*@
- * @errortype
- * @reasoncode HTMGT_RC_OCC_EXCEPTION
- * @moduleid HTMGT_MOD_SEND_OCC_CMD
- * @userdata1 OCC command
- * @userdata2 comm established
- * @userdata3 OCC state
- * @userdata4 exception
- * @devdesc Unable to send cmd to OCC exception
- */
- bldErrLog(l_errlHndl, HTMGT_MOD_SEND_OCC_CMD,
- HTMGT_RC_OCC_EXCEPTION,
- iv_OccCmd.cmdType, l_commEstablished,
- l_occState, iv_Occ->iv_exceptionLogged,
- ERRORLOG::ERRL_SEV_INFORMATIONAL);
- }
+ processOccResponse(l_errlHndl, cmdTraced);
+ }
+
+ // skip retry if an exception was logged
+ } while ((iv_RetryCmd) &&
+ (0 == iv_Occ->iv_exceptionLogged));
}
else
{
- // Ignore failure on GET_FIELD_DEBUG_DATA
- if (OCC_CMD_GET_FIELD_DEBUG_DATA != iv_OccCmd.cmdType)
- {
- // Comm not established or command not supported
- /*@
- * @errortype
- * @reasoncode HTMGT_RC_OCC_UNAVAILABLE
- * @moduleid HTMGT_MOD_SEND_OCC_CMD
- * @userdata1 OCC command
- * @userdata2 comm established
- * @userdata3 OCC state
- * @userdata4 1
- * @devdesc OCC comm not established or command is not
- * supported
- */
- bldErrLog(l_errlHndl, HTMGT_MOD_SEND_OCC_CMD,
- HTMGT_RC_OCC_UNAVAILABLE,
- iv_OccCmd.cmdType, l_commEstablished,
- l_occState, 1,
- ERRORLOG::ERRL_SEV_INFORMATIONAL);
- }
+ // OCC has already logged an exception, no need to send
+ TMGT_ERR("Skipping 0x%02X cmd since OCC has already "
+ "logged an exception 0x%04X",
+ iv_OccCmd.cmdType, iv_Occ->iv_exceptionLogged);
+ /*@
+ * @errortype
+ * @reasoncode HTMGT_RC_OCC_EXCEPTION
+ * @moduleid HTMGT_MOD_SEND_OCC_CMD
+ * @userdata1 OCC command
+ * @userdata2 comm established
+ * @userdata3 OCC state
+ * @userdata4 exception
+ * @devdesc Unable to send cmd to OCC exception
+ */
+ bldErrLog(l_errlHndl, HTMGT_MOD_SEND_OCC_CMD,
+ HTMGT_RC_OCC_EXCEPTION,
+ iv_OccCmd.cmdType, l_commEstablished,
+ l_occState, iv_Occ->iv_exceptionLogged,
+ ERRORLOG::ERRL_SEV_INFORMATIONAL);
}
}
else
{
- TMGT_ERR("sendOccCmd: ignoring invalid command 0x%02X",
- iv_OccCmd.cmdType);
- /*@
- * @errortype
- * @reasoncode HTMGT_RC_INVALID_DATA
- * @moduleid HTMGT_MOD_SEND_OCC_CMD
- * @userdata1 OCC command type
- * @devdesc Ignoring invalid command
- */
- bldErrLog(l_errlHndl, HTMGT_MOD_SEND_OCC_CMD,
- HTMGT_RC_INVALID_DATA,
- iv_OccCmd.cmdType, 0, 0, 0,
- ERRORLOG::ERRL_SEV_INFORMATIONAL);
+ // Ignore failure on GET_FIELD_DEBUG_DATA
+ if (OCC_CMD_GET_FIELD_DEBUG_DATA != iv_OccCmd.cmdType)
+ {
+ // Comm not established or command not supported
+ /*@
+ * @errortype
+ * @reasoncode HTMGT_RC_OCC_UNAVAILABLE
+ * @moduleid HTMGT_MOD_SEND_OCC_CMD
+ * @userdata1 OCC command
+ * @userdata2 comm established
+ * @userdata3 OCC state
+ * @userdata4 1
+ * @devdesc OCC comm not established or command is not
+ * supported
+ */
+ bldErrLog(l_errlHndl, HTMGT_MOD_SEND_OCC_CMD,
+ HTMGT_RC_OCC_UNAVAILABLE,
+ iv_OccCmd.cmdType, l_commEstablished,
+ l_occState, 1,
+ ERRORLOG::ERRL_SEV_INFORMATIONAL);
+ }
}
}
else
diff --git a/src/usr/htmgt/htmgt_occcmd.H b/src/usr/htmgt/htmgt_occcmd.H
index 8bdb5270d..26871123c 100644
--- a/src/usr/htmgt/htmgt_occcmd.H
+++ b/src/usr/htmgt/htmgt_occcmd.H
@@ -80,7 +80,10 @@ namespace HTMGT
OCC_CMD_SETUP_CFG_DATA = 0x21,
OCC_CMD_SET_POWER_CAP = 0x22,
OCC_CMD_RESET_PREP = 0x25,
+ OCC_CMD_DEBUG_PASS_THROUGH = 0x40,
+ OCC_CMD_AME_PASS_THROUGH = 0x41,
OCC_CMD_GET_FIELD_DEBUG_DATA = 0x42,
+ OCC_CMD_MFG_TEST = 0x53,
OCC_CMD_END_OF_TABLE = 0xFF
};
diff --git a/src/usr/htmgt/htmgt_utility.C b/src/usr/htmgt/htmgt_utility.C
index bf10ffe98..aabe6e18e 100644
--- a/src/usr/htmgt/htmgt_utility.C
+++ b/src/usr/htmgt/htmgt_utility.C
@@ -108,7 +108,10 @@ namespace HTMGT
{OCC_CMD_SETUP_CFG_DATA, "SET_CFG_DATA"},
{OCC_CMD_SET_POWER_CAP, "SET_POWER_CAP"},
{OCC_CMD_RESET_PREP, "RESET_PREP"},
+ {OCC_CMD_DEBUG_PASS_THROUGH, "DEBUG_PASSTHRU"},
+ {OCC_CMD_AME_PASS_THROUGH, "AME_PASSTHRU"},
{OCC_CMD_GET_FIELD_DEBUG_DATA, "GET_FIELD_DEBUG_DATA"},
+ {OCC_CMD_MFG_TEST, "MFG_TEST"},
// OCC_CMD_END_OF_TABLE should be the last entry
{OCC_CMD_END_OF_TABLE, "Unknown Command"}
};
OpenPOWER on IntegriCloud