diff options
author | Mark Wenning <wenning@us.ibm.com> | 2011-11-16 13:19:30 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2011-11-18 17:00:44 -0600 |
commit | 975268f021775b9d4ae68f3d63e2b70cca9a6062 (patch) | |
tree | c2737d102d7a8a63561f63fb914aa346915e5b29 /src/usr/initservice | |
parent | 610b9837c7586d6ae39b20492fd9383e2c35e70a (diff) | |
download | talos-hostboot-975268f021775b9d4ae68f3d63e2b70cca9a6062.tar.gz talos-hostboot-975268f021775b9d4ae68f3d63e2b70cca9a6062.zip |
RTC4287: Access PNOR to read IStep Mode Attribute
- initial commit
- fix script to work with changes in simics, to test
- review fixes
- review fixes 2 - add extra command to set (nonvolatile) ISTEP_MODE to OFF
- review fixes 3 - minor fixes, remove unit test
Change-Id: I9a1b7582da26a272393e3ea6c87c6979d0ea7c11
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/499
Tested-by: Jenkins Server
Reviewed-by: MIKE J. JONES <mjjones@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/initservice')
4 files changed, 62 insertions, 25 deletions
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C index 1615c1b9e..d2d889e06 100644 --- a/src/usr/initservice/istepdispatcher/istepdispatcher.C +++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C @@ -46,8 +46,14 @@ #include <devicefw/userif.H> // targeting #include <sys/mmio.h> // mmio_scratch_read() #include <initservice/taskargs.H> // TaskArgs structs + #include <errl/errluserdetails.H> // ErrlUserDetails base class +#include <targeting/attributes.H> // ISTEP_MODE attribute +#include <targeting/entitypath.H> +#include <targeting/target.H> +#include <targeting/targetservice.H> + #include "istepdispatcher.H" #include "splesscommon.H" @@ -144,10 +150,6 @@ enum { const uint64_t SINGLESTEP_PAUSE_S = 1; const uint64_t SINGLESTEP_PAUSE_NS = 100000000; - - - - /** * @brief set up _start() task entry procedure using the macro in taskargs.H */ @@ -249,34 +251,64 @@ void IStepDispatcher::init( void * io_ptr ) bool IStepDispatcher::getIStepMode( ) const { + using namespace TARGETING; + Target* l_pTopLevel = NULL; + bool l_istepmodeflag = false; + TargetService& l_targetService = targetService(); - return iv_istepmodeflag; + (void) l_targetService.getTopLevelTarget(l_pTopLevel); + if (l_pTopLevel == NULL) + { + TRACFCOMP( g_trac_initsvc, "Top level handle was NULL" ); + l_istepmodeflag = false; + } + else + { + l_istepmodeflag = l_pTopLevel->getAttr<ATTR_ISTEP_MODE> (); + } + + + return l_istepmodeflag; } -/** - * @todo revisit this when PNOR Driver is implemented - * - */ void IStepDispatcher::initIStepMode( ) { - uint64_t l_readData = 0; - - l_readData = mmio_scratch_read( MMIO_SCRATCH_IPLSTEP_CONFIG ); + using namespace TARGETING; + uint64_t l_readData = 0; + Target *l_pTopLevel = NULL; + TargetService& l_targetService = targetService(); - TRACDCOMP( g_trac_initsvc, - "SCOM ScratchPad read, Offset 0x%x, Data 0x%llx", - MMIO_SCRATCH_IPLSTEP_CONFIG, - l_readData ); - - // check for IStep Mode signature - if ( l_readData == ISTEP_MODE_SIGNATURE ) + (void) l_targetService.getTopLevelTarget(l_pTopLevel); + if (l_pTopLevel == NULL) { - iv_istepmodeflag = true; - } + TRACFCOMP( g_trac_initsvc, "Top level handle was NULL" ); + // drop through, default of attribute is is false + } else { - iv_istepmodeflag = false; + // got a pointer to Targeting, complete setting the flag + l_readData = mmio_scratch_read( MMIO_SCRATCH_IPLSTEP_CONFIG ); + + TRACDCOMP( g_trac_initsvc, + "SCOM ScratchPad read, Offset 0x%x, Data 0x%llx", + MMIO_SCRATCH_IPLSTEP_CONFIG, + l_readData ); + + // check for IStep Mode signature(s) + if ( l_readData == ISTEP_MODE_ON_SIGNATURE ) + { + l_pTopLevel->setAttr<ATTR_ISTEP_MODE> (true ); + TRACDCOMP( g_trac_initsvc, + "ISTEP_MODE attribute set to TRUE." ); + } + + if ( l_readData == ISTEP_MODE_OFF_SIGNATURE ) + { + l_pTopLevel->setAttr<ATTR_ISTEP_MODE> ( false ); + TRACDCOMP( g_trac_initsvc, + "ISTEP_MODE attribute set to FALSE." ); + } } } diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.H b/src/usr/initservice/istepdispatcher/istepdispatcher.H index b507cbe21..70e9f2883 100644 --- a/src/usr/initservice/istepdispatcher/istepdispatcher.H +++ b/src/usr/initservice/istepdispatcher/istepdispatcher.H @@ -222,7 +222,6 @@ private: // ----- internal vars ----------------------------- - bool iv_istepmodeflag; }; // class IStepDispatcher diff --git a/src/usr/initservice/istepdispatcher/splesscommon.H b/src/usr/initservice/istepdispatcher/splesscommon.H index 8602901a6..d75ee1f83 100644 --- a/src/usr/initservice/istepdispatcher/splesscommon.H +++ b/src/usr/initservice/istepdispatcher/splesscommon.H @@ -41,7 +41,13 @@ /******************************************************************************/ // Globals/Constants /******************************************************************************/ -const uint64_t ISTEP_MODE_SIGNATURE = 0x4057b0074057b007; +/** + * @note Since ISTEP_MODE attribute is nonvolitile (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_ON_SIGNATURE = 0x4057b0074057b007; +const uint64_t ISTEP_MODE_OFF_SIGNATURE = 0x700b7504700b7504; /******************************************************************************/ // SPLESS Command Prototypes diff --git a/src/usr/initservice/test/splesstest.H b/src/usr/initservice/test/splesstest.H index f89d2d4a8..d1caf006b 100644 --- a/src/usr/initservice/test/splesstest.H +++ b/src/usr/initservice/test/splesstest.H @@ -263,7 +263,7 @@ private: l_readData = mmio_scratch_read( MMIO_SCRATCH_IPLSTEP_CONFIG ); // check for IStep Mode signature, this is temporary - if ( l_readData == ISTEP_MODE_SIGNATURE ) + if ( l_readData == ISTEP_MODE_ON_SIGNATURE ) { l_flag = true; } |