summaryrefslogtreecommitdiffstats
path: root/src/usr/initservice
diff options
context:
space:
mode:
authorMark Wenning <wenning@us.ibm.com>2011-11-16 13:19:30 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2011-11-18 17:00:44 -0600
commit975268f021775b9d4ae68f3d63e2b70cca9a6062 (patch)
treec2737d102d7a8a63561f63fb914aa346915e5b29 /src/usr/initservice
parent610b9837c7586d6ae39b20492fd9383e2c35e70a (diff)
downloadtalos-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')
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.C76
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.H1
-rw-r--r--src/usr/initservice/istepdispatcher/splesscommon.H8
-rw-r--r--src/usr/initservice/test/splesstest.H2
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;
}
OpenPOWER on IntegriCloud