diff options
author | Chris Cain <cjcain@us.ibm.com> | 2017-05-17 10:11:10 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-05-18 09:22:09 -0400 |
commit | d02273fb506c99bb2951453feae27f6acc863a2f (patch) | |
tree | fb653d53ed012fb132278ce70007bc7bc8126616 /src/usr/htmgt | |
parent | 31f5557096bd4f02b917be575211946d2698fb26 (diff) | |
download | talos-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.C | 200 | ||||
-rw-r--r-- | src/usr/htmgt/htmgt_occcmd.H | 3 | ||||
-rw-r--r-- | src/usr/htmgt/htmgt_utility.C | 3 |
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"} }; |