diff options
author | Mark Wenning <wenning@us.ibm.com> | 2012-05-08 11:54:54 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-05-09 10:16:55 -0500 |
commit | 7362a70f4b11b12578c938cb40a0143f6bfeda7d (patch) | |
tree | 342889696f84719e381ce8956ca144043ec05a6e /src/usr | |
parent | cd9263254cacd7948aad8ba1bd3a98af469b02af (diff) | |
download | talos-hostboot-7362a70f4b11b12578c938cb40a0143f6bfeda7d.tar.gz talos-hostboot-7362a70f4b11b12578c938cb40a0143f6bfeda7d.zip |
hb-istep SCOM changes.
Modifies vpo/hb-istep to communicate over Mailbox SCOM addresses
instead of memory, in an effort to increase VPO performance.
RTC: 38307
Change-Id: I020886bb2c6cf974a87b8a16d2be2b257f8d9757
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1040
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r-- | src/usr/initservice/istepdispatcher/makefile | 9 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/splesscommon.C | 286 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/splesscommon.H | 223 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/sptask.C | 60 |
4 files changed, 371 insertions, 207 deletions
diff --git a/src/usr/initservice/istepdispatcher/makefile b/src/usr/initservice/istepdispatcher/makefile index d2e094b5a..eaae9b9ea 100644 --- a/src/usr/initservice/istepdispatcher/makefile +++ b/src/usr/initservice/istepdispatcher/makefile @@ -5,7 +5,7 @@ # # IBM CONFIDENTIAL # -# COPYRIGHT International Business Machines Corp. 2011 +# COPYRIGHT International Business Machines Corp. 2011 - 2012 # # p1 # @@ -19,13 +19,12 @@ # # Origin: 30 # -# IBM_PROLOG_END - +# IBM_PROLOG_END_TAG ROOTPATH = ../../../.. MODULE = istepdisp -OBJS = istepdispatcher.o initsvcudistep.o \ - sptask.o +OBJS = istepdispatcher.o initsvcudistep.o \ + sptask.o splesscommon.o ## SUBDIRS = test.d diff --git a/src/usr/initservice/istepdispatcher/splesscommon.C b/src/usr/initservice/istepdispatcher/splesscommon.C new file mode 100644 index 000000000..9dc615a24 --- /dev/null +++ b/src/usr/initservice/istepdispatcher/splesscommon.C @@ -0,0 +1,286 @@ +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/usr/initservice/istepdispatcher/splesscommon.C $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2012 + * + * p1 + * + * Object Code Only (OCO) source materials + * Licensed Internal Code Source Materials + * IBM HostBoot Licensed Internal Code + * + * The source code for this program is not published or other- + * wise divested of its trade secrets, irrespective of what has + * been deposited with the U.S. Copyright Office. + * + * Origin: 30 + * + * IBM_PROLOG_END_TAG + */ +/** + * @file splesscommon.C + * + * Routines to access SPLESS Command and + * and SPLESS Status interfaces + * + * Currently SPLess only supports the one command 0x00, this rewrite will + * allow support of other SPLess commands. + * + */ + +/******************************************************************************/ +// Includes +/******************************************************************************/ +#include <stdint.h> +#include <stdio.h> +#include <string.h> + +// $$$$$$$ undefine this before checking in.... +// #define SPLESS_DEBUG 1 + +#ifdef SPLESS_DEBUG + #include <kernel/console.H> // printk DEBUG +#endif + +#include <sys/mmio.h> // mmio_scratch_read() +#include <devicefw/userif.H> // deviceRead(), deviceWrite() + +#include <targeting/common/attributes.H> // ISTEP_MODE attribute +#include <targeting/common/targetservice.H> + +#include "splesscommon.H" + + +// external reference +namespace INITSERVICE +{ + extern trace_desc_t *g_trac_initsvc; +} // end namespace INITSERVICE + + + +namespace SPLESS +{ + +using namespace TARGETING; + +// extern declarations for regs. +extern uint64_t g_SPLess_Command_Reg; +extern uint64_t g_SPLess_Status_Reg; + +extern uint64_t g_SPLess_IStepMode_Reg; + +/** + * @def g_SPLess_pMasterProcChip + * + * pointer to master proc chip used for deviceRead deviceWrite + */ +TARGETING::Target* g_SPLess_pMasterProcChip = NULL; + + +/******************************************************************************/ +// SPLESS support functions +/******************************************************************************/ + +bool SPLessAttached( ) +{ + bool l_rc = false; + + // check for IStep Mode signature(s) + if ( g_SPLess_IStepMode_Reg == ISTEP_MODE_SPLESS_SIGNATURE ) + { + l_rc = true; + } + + return l_rc; +} + + +void initIStepMode( ) +{ + using namespace TARGETING; + uint64_t l_readData = 0; + Target *l_pTopLevel = NULL; + TargetService& l_targetService = targetService(); + + (void) l_targetService.getTopLevelTarget(l_pTopLevel); + if (l_pTopLevel == NULL) + { + TRACFCOMP( INITSERVICE::g_trac_initsvc, "Top level handle was NULL" ); + // drop through, default of attribute is is false + } + else + { + // got a pointer to Targeting, complete setting the flag + // $$ save l_readData = mmio_scratch_read( MMIO_SCRATCH_IPLSTEP_CONFIG ); + l_readData = g_SPLess_IStepMode_Reg; + +#ifdef SPLESS_DEBUG + printk( "IStepMode Reg = 0x%p, 0x%lx\n", &g_SPLess_IStepMode_Reg, l_readData ); + printk( "Status Reg = 0x%p\n", &g_SPLess_Status_Reg ); + printk( "Command Reg = 0x%p\n", &g_SPLess_Command_Reg ); +#endif + TRACDCOMP( INITSERVICE::g_trac_initsvc, + "IStepMode Reg = 0x%llx", + l_readData ); + + // check for IStep Mode signature(s) + if ( ( l_readData == ISTEP_MODE_SPLESS_SIGNATURE ) + || ( l_readData == ISTEP_MODE_FSP_SIGNATURE ) + ) + { + l_pTopLevel->setAttr<ATTR_ISTEP_MODE> (true ); + + TRACDCOMP( INITSERVICE::g_trac_initsvc, + "ISTEP_MODE attribute set to TRUE." ); + } + else + { + // If not either of the above, set to run-all + l_readData = RUN_ALL_MODE_SIGNATURE; + // $$ save mmio_scratch_write( MMIO_SCRATCH_IPLSTEP_CONFIG, l_readData ); + l_pTopLevel->setAttr<ATTR_ISTEP_MODE> ( false ); + + TRACDCOMP( INITSERVICE::g_trac_initsvc, + "ISTEP_MODE attribute set to FALSE." ); + } + } + +} + +/******************************************************************************/ +// SPLESS Command functions +/******************************************************************************/ + +void readCmd( SPLessCmd &io_rcmd ) +{ + // Do this once and save it... + if ( g_SPLess_pMasterProcChip == NULL ) + { + (void)TARGETING::targetService().masterProcChipTargetHandle( + g_SPLess_pMasterProcChip ); + } + + // $$ save - mem io_rcmd.val64 = g_SPLess_Command_Reg; + // $$ save -io_rcmd.val64 = mmio_scratch_read(MMIO_SCRATCH_IPLSTEP_COMMAND); + + // command reg is GMB2EC is mailbox scratchpad 3 { regs 0 - 3 }. + size_t op_size = sizeof( uint64_t ); + DeviceFW::deviceRead( + g_SPLess_pMasterProcChip, + &(io_rcmd.val64), + op_size, + DEVICE_SCOM_ADDRESS( MBOX_SCRATCH_REG3 ) ); + +#ifdef SPLESS_DEBUG + printk( "readCmd hi 0x%x\n", io_rcmd.hi32 ); + printk( "readCmd lo 0x%x\n", io_rcmd.lo32 ); +#endif +} + + +void writeCmd( SPLessCmd &io_rcmd ) +{ + // Do this once and save it... + if ( g_SPLess_pMasterProcChip == NULL ) + { + (void)TARGETING::targetService().masterProcChipTargetHandle( + g_SPLess_pMasterProcChip ); + } + + // save - mem g_SPLess_Command_Reg = io_rcmd.val64; + // save mmio_scratch_write( MMIO_SCRATCH_IPLSTEP_COMMAND, io_rcmd.val64 ); + + // command reg is GMB2EC is mailbox scratchpad 3 { regs 0 - 3 }. + size_t op_size = sizeof( uint64_t ); + DeviceFW::deviceWrite( + g_SPLess_pMasterProcChip, + &(io_rcmd.val64), + op_size, + DEVICE_SCOM_ADDRESS( MBOX_SCRATCH_REG3 ) ); + +#ifdef SPLESS_DEBUG + printk( "writeCmd hi 0x%x\n", io_rcmd.hi32 ); + printk( "writeCmd lo 0x%x\n", io_rcmd.lo32 ); +#endif +} + + +/******************************************************************************/ +// SPLESS Status +/******************************************************************************/ + +void readSts( SPLessSts &io_rsts ) +{ + // Do this once and save it... + if ( g_SPLess_pMasterProcChip == NULL ) + { + (void)TARGETING::targetService().masterProcChipTargetHandle( + g_SPLess_pMasterProcChip ); + } + + // $$ save - mem io_rsts.val64 = g_SPLess_Status_Reg; + // $$ io_rsts.val64 = mmio_scratch_read(MMIO_SCRATCH_IPLSTEP_STATUS); + + // status reg (Hi 32) is now GMB2E8 is mailbox scratchpad 2 {regs 0 - 3 } + size_t op_size = sizeof( uint64_t ); + DeviceFW::deviceRead( + g_SPLess_pMasterProcChip, + &(io_rsts.val64), + op_size, + DEVICE_SCOM_ADDRESS( MBOX_SCRATCH_REG2 ) ); + // status reg lo is GMB2E4 - mailbox scratchpad 1 { regs 0 -3 } + uint64_t swap = 0; + DeviceFW::deviceRead( + g_SPLess_pMasterProcChip, + &(swap), + op_size, + DEVICE_SCOM_ADDRESS( MBOX_SCRATCH_REG1 ) ); + io_rsts.lo32 = + static_cast<uint32_t>( ((swap >> 32) & 0x00000000ffffffff) ); + +#ifdef SPLESS_DEBUG + printk( "readSts hi 0x%x\n", io_rsts.hi32 ); + printk( "readSts lo 0x%x\n", io_rsts.lo32 ); +#endif +} + + +void writeSts( SPLessSts &io_rsts ) +{ + // Do this once and save it... + if ( g_SPLess_pMasterProcChip == NULL ) + { + (void)TARGETING::targetService().masterProcChipTargetHandle( + g_SPLess_pMasterProcChip ); + } + + // $$ save - mem g_SPLess_Status_Reg = io_rsts.val64; + // $$ save mmio_scratch_write( MMIO_SCRATCH_IPLSTEP_STATUS, io_rsts.val64 ); + size_t op_size = sizeof( uint64_t ); + DeviceFW::deviceWrite( + g_SPLess_pMasterProcChip, + &(io_rsts.val64), + op_size, + DEVICE_SCOM_ADDRESS( MBOX_SCRATCH_REG2 ) ); + // status reg lo is GMB2E4 - mailbox scratchpad 1 { regs 0 -3 } + uint64_t swap = + ((static_cast<uint64_t>(io_rsts.lo32) << 32 ) & 0xffffffff00000000) ; + DeviceFW::deviceWrite( + g_SPLess_pMasterProcChip, + &(swap), + op_size, + DEVICE_SCOM_ADDRESS( MBOX_SCRATCH_REG1 ) ); + +#ifdef SPLESS_DEBUG + printk( "writeSts hi 0x%x\n", io_rsts.hi32 ); + printk( "writeSts lo 0x%x\n", io_rsts.lo32 ); +#endif +} + +} // namespace + diff --git a/src/usr/initservice/istepdispatcher/splesscommon.H b/src/usr/initservice/istepdispatcher/splesscommon.H index 6d5d84953..3dd0f9030 100644 --- a/src/usr/initservice/istepdispatcher/splesscommon.H +++ b/src/usr/initservice/istepdispatcher/splesscommon.H @@ -1,26 +1,26 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/usr/initservice/istepdispatcher/splesscommon.H $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2011 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END - +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/usr/initservice/istepdispatcher/splesscommon.H $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2011 - 2012 + * + * p1 + * + * Object Code Only (OCO) source materials + * Licensed Internal Code Source Materials + * IBM HostBoot Licensed Internal Code + * + * The source code for this program is not published or other- + * wise divested of its trade secrets, irrespective of what has + * been deposited with the U.S. Copyright Office. + * + * Origin: 30 + * + * IBM_PROLOG_END_TAG + */ #ifndef __ISTEPDISP_SPLESS_COMMON_H #define __ISTEPDISP_SPLESS_COMMON_H /** @@ -41,32 +41,19 @@ #include <stdio.h> #include <string.h> -// $$$$$$$ undefine this before checking in.... -// #define SPLESS_DEBUG 1 - -#ifdef SPLESS_DEBUG - #include <kernel/console.H> // printk DEBUG -#endif - #include <sys/mmio.h> // mmio_scratch_read() +#include <devicefw/userif.H> // deviceRead(), deviceWrite() #include <targeting/common/attributes.H> // ISTEP_MODE attribute #include <targeting/common/targetservice.H> -// external reference -namespace INITSERVICE -{ - extern trace_desc_t *g_trac_initsvc; -} // end namespace INITSERVICE - - /******************************************************************************/ // SPLESS Command and Status Prototypes /******************************************************************************/ /** - * @namespace SPLESSCMD + * @namespace SPLESS * * Contains functions to manipulate the SPLESS Command Register * @@ -74,14 +61,14 @@ namespace INITSERVICE namespace SPLESS { -/** - * @note Since ISTEP_MODE attribute is nonvolatile (persists across boots), - * we must have a way to turn the attribute both ON and OFF - we - * cannot depend on the FSP to do it since we may not have a FSP. - */ const uint64_t ISTEP_MODE_SPLESS_SIGNATURE = 0x4057b0074057b007; const uint64_t ISTEP_MODE_FSP_SIGNATURE = 0x700b7504700b7504; const uint64_t RUN_ALL_MODE_SIGNATURE = 0xBADC0FFEE0DDF00D; +const uint32_t MBOX_SCRATCH_REG0 = 0x00050038; +const uint32_t MBOX_SCRATCH_REG1 = 0x00050039; +const uint32_t MBOX_SCRATCH_REG2 = 0x0005003a; +const uint32_t MBOX_SCRATCH_REG3 = 0x0005003b; + /** * @enum @@ -108,37 +95,6 @@ enum { SPLESS_TRACE_BUFFERS_CLEARED = 16, // trace buffers cleared }; -/** - * @note declare global regs to implement SPLess. - * These replace the SCOM regs that are accessed by mmio; the reason we - * are changing this is that there is no support at present for read/writing - * SCOM in the Debug Framework. - * This will have to be modified again when we get to Secure Boot - * - * @todo An review issue came up about when and how these are updated - - * While hostboot is running in SIMICS or VBU, the user console (i.e. a - * perl script, see src/build/vpo/hb_istep) will stop the instruction clock, - * write a command to g_SPLess_Command_Reg, and then restart the clock. - * - * Q1) In non-VPO mode (real FSP) are we always going to stop instructions - * to the processor to modify these variables? - * A: Yes, at this writing. If this changes, we should revisit this - * implementation. - * - * Q1a) Do these memory locations need to be accessed atomically (i.e. using - * __sync_add_and_fetch() and/or isync()/sync() )? - * A: No, not at this writing. - * - * Q2) When we stop instructions to the processor is the instruction pipeline - * and load/store queues flushed? - * - * A: No. The stop commands used in the simulator user console should - * quiesce the processor; this should guarantee that there are no - * outstanding loads or stores. - */ -extern uint64_t g_SPLess_Command_Reg; -extern uint64_t g_SPLess_Status_Reg; -extern uint64_t g_SPLess_IStepMode_Reg; /** * @note SPLess commands, and masks for the status. @@ -148,7 +104,6 @@ const uint8_t SPLESS_SINGLE_ISTEP_CMD = 0x00; const uint8_t SPLESS_RESUME_ISTEP_CMD = 0x01; const uint8_t SPLESS_CLEAR_TRACE_CMD = 0x02; const uint8_t SPLESS_SHUTDOWN_CMD = 0x03; - const uint64_t SPLESS_SINGLE_STEP_STS_MASK = 0x00000000ffffffff; /** @@ -157,18 +112,7 @@ const uint64_t SPLESS_SINGLE_STEP_STS_MASK = 0x00000000ffffffff; * @return nothing * */ -inline bool SPLessAttached( ) -{ - bool l_rc = false; - - // check for IStep Mode signature(s) - if ( g_SPLess_IStepMode_Reg == ISTEP_MODE_SPLESS_SIGNATURE ) - { - l_rc = true; - } - - return l_rc; -} +bool SPLessAttached( ); /** * @brief init ISTEP_MODE attribute @@ -176,57 +120,7 @@ inline bool SPLessAttached( ) * @return nothing * */ -inline void initIStepMode( ) -{ - using namespace TARGETING; - uint64_t l_readData = 0; - Target *l_pTopLevel = NULL; - TargetService& l_targetService = targetService(); - - (void) l_targetService.getTopLevelTarget(l_pTopLevel); - if (l_pTopLevel == NULL) - { - TRACFCOMP( INITSERVICE::g_trac_initsvc, "Top level handle was NULL" ); - // drop through, default of attribute is is false - } - else - { - // got a pointer to Targeting, complete setting the flag - // $$ save l_readData = mmio_scratch_read( MMIO_SCRATCH_IPLSTEP_CONFIG ); - l_readData = g_SPLess_IStepMode_Reg; - -#ifdef SPLESS_DEBUG - printk( "IStepMode Reg = 0x%p, 0x%lx\n", &g_SPLess_IStepMode_Reg, l_readData ); - printk( "Status Reg = 0x%p\n", &g_SPLess_Status_Reg ); - printk( "Command Reg = 0x%p\n", &g_SPLess_Command_Reg ); -#endif - TRACDCOMP( INITSERVICE::g_trac_initsvc, - "IStepMode Reg = 0x%llx", - l_readData ); - - // check for IStep Mode signature(s) - if ( ( l_readData == ISTEP_MODE_SPLESS_SIGNATURE ) - || ( l_readData == ISTEP_MODE_FSP_SIGNATURE ) - ) - { - l_pTopLevel->setAttr<ATTR_ISTEP_MODE> (true ); - - TRACDCOMP( INITSERVICE::g_trac_initsvc, - "ISTEP_MODE attribute set to TRUE." ); - } - else - { - // If not either of the above, set to run-all - l_readData = RUN_ALL_MODE_SIGNATURE; - // $$ save mmio_scratch_write( MMIO_SCRATCH_IPLSTEP_CONFIG, l_readData ); - l_pTopLevel->setAttr<ATTR_ISTEP_MODE> ( false ); - - TRACDCOMP( INITSERVICE::g_trac_initsvc, - "ISTEP_MODE attribute set to FALSE." ); - } - } - -} +void initIStepMode( ); /** * @struct CommandHdr @@ -261,7 +155,12 @@ struct CommandHdr */ union SPLessCmd { - uint64_t val64; + uint64_t val64; + struct + { + uint32_t hi32; + uint32_t lo32; + } __attribute__((packed)); struct { CommandHdr hdr; @@ -282,15 +181,7 @@ union SPLessCmd * * @return none */ -inline void readCmd( SPLessCmd &io_rcmd ) -{ - - // $$ save io_rcmd.val64 = mmio_scratch_read(MMIO_SCRATCH_IPLSTEP_COMMAND); - io_rcmd.val64 = g_SPLess_Command_Reg; -#ifdef SPLESS_DEBUG - printk( "readCmd 0x%lx\n", g_SPLess_Command_Reg ); -#endif -} +void readCmd( SPLessCmd &io_rcmd ); /** @@ -303,15 +194,7 @@ inline void readCmd( SPLessCmd &io_rcmd ) * * @return none */ -inline void writeCmd( SPLessCmd &io_rcmd ) -{ - - // $$ save mmio_scratch_write( MMIO_SCRATCH_IPLSTEP_COMMAND, io_rcmd.val64 ); - g_SPLess_Command_Reg = io_rcmd.val64; -#ifdef SPLESS_DEBUG - printk( "writeCmd 0x%lx\n", g_SPLess_Command_Reg ); -#endif -} +void writeCmd( SPLessCmd &io_rcmd ); @@ -358,7 +241,12 @@ struct StatusHdr * */ union SPLessSts { - uint64_t val64; + uint64_t val64; + struct + { + uint32_t hi32; + uint32_t lo32; + } __attribute((packed)); struct { StatusHdr hdr; uint8_t istep; @@ -378,15 +266,8 @@ union SPLessSts { * * @return none. */ -inline void readSts( SPLessSts &io_rsts ) -{ +void readSts( SPLessSts &io_rsts ); - // $$ save io_rsts.val64 = mmio_scratch_read(MMIO_SCRATCH_IPLSTEP_STATUS); - io_rsts.val64 = g_SPLess_Status_Reg; -#ifdef SPLESS_DEBUG - printk( "readSts 0x%lx\n", g_SPLess_Status_Reg ); -#endif -} /** * @brief Write a filled in SPLessSts struct to the SPLess Status Reg @@ -395,14 +276,8 @@ inline void readSts( SPLessSts &io_rsts ) * * @return none */ -inline void writeSts( SPLessSts &io_rsts ) -{ - // $$ save mmio_scratch_write( MMIO_SCRATCH_IPLSTEP_STATUS, io_rsts.val64 ); - g_SPLess_Status_Reg = io_rsts.val64; -#ifdef SPLESS_DEBUG - printk( "writeSts 0x%lx\n", g_SPLess_Status_Reg ); -#endif -} +void writeSts( SPLessSts &io_rsts ); + } // namespace diff --git a/src/usr/initservice/istepdispatcher/sptask.C b/src/usr/initservice/istepdispatcher/sptask.C index 946aad7df..34d8a013a 100644 --- a/src/usr/initservice/istepdispatcher/sptask.C +++ b/src/usr/initservice/istepdispatcher/sptask.C @@ -1,26 +1,26 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/usr/initservice/istepdispatcher/sptask.C $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2012 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END - +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/usr/initservice/istepdispatcher/sptask.C $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2012 + * + * p1 + * + * Object Code Only (OCO) source materials + * Licensed Internal Code Source Materials + * IBM HostBoot Licensed Internal Code + * + * The source code for this program is not published or other- + * wise divested of its trade secrets, irrespective of what has + * been deposited with the U.S. Copyright Office. + * + * Origin: 30 + * + * IBM_PROLOG_END_TAG + */ /** * @file sptask.C * @@ -254,8 +254,12 @@ void userConsoleComm( void * io_msgQ ) } // clear command reg, including go bit (i.e. set to false) - l_cmd.val64 = 0; - writeCmd( l_cmd ); + // 2012-04-27 hb-istep will clear the command reg after it sees + // the running bit turn on. + // Please save the following in case we have to turn this + // back on. + // $$ l_cmd.val64 = 0; + // $$ writeCmd( l_cmd ); } // endif gobit @@ -283,9 +287,6 @@ void userConsoleComm( void * io_msgQ ) } } // endwhile - // free the message struct - msg_free( l_pMsg ); - // @note // Fell out of loop, clear sts reg and turn off readybit // disable the ready bit so the user knows. @@ -297,6 +298,9 @@ void userConsoleComm( void * io_msgQ ) TRACFCOMP( g_trac_initsvc, "userConsoleComm exit" ); + // free the message struct + msg_free( l_pMsg ); + // return to main to end task } |