summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting/targetservicestart.C
diff options
context:
space:
mode:
authordgilbert <dgilbert@us.ibm.com>2013-01-24 12:08:24 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-04-08 11:03:59 -0500
commit2c5c5d4f7107fd6b31809677135e0418970461a0 (patch)
tree281bd6cbf98b4aa4f9bada4e017e2f49f9a2f0f9 /src/usr/targeting/targetservicestart.C
parent1c2753a32b9b8b819b7ae19438b7362fad58fe32 (diff)
downloadtalos-hostboot-2c5c5d4f7107fd6b31809677135e0418970461a0.tar.gz
talos-hostboot-2c5c5d4f7107fd6b31809677135e0418970461a0.zip
Need to disable interrupt sources before waiting for interrupts(MPIPL)
RTC:41868 Change-Id: I57891102fc0c96c156a9a69467c95645e4848703 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3018 Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/targeting/targetservicestart.C')
-rw-r--r--src/usr/targeting/targetservicestart.C123
1 files changed, 100 insertions, 23 deletions
diff --git a/src/usr/targeting/targetservicestart.C b/src/usr/targeting/targetservicestart.C
index d010f0e1e..dc252eed5 100644
--- a/src/usr/targeting/targetservicestart.C
+++ b/src/usr/targeting/targetservicestart.C
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/usr/targeting/targetservicestart.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/targeting/targetservicestart.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* */
+/* 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 otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
/**
* @file targeting/targetservicestart.C
@@ -45,6 +45,10 @@
#include <targeting/common/targetservice.H>
#include <targeting/attrrp.H>
+// Others
+#include <errl/errlentry.H>
+#include <devicefw/userif.H>
+
//******************************************************************************
// targetService
//******************************************************************************
@@ -62,6 +66,11 @@ namespace TARGETING
#define TARG_CLASS ""
+/*
+ * @brief Initialize any attributes that need to be set early on
+ */
+static void initializeAttributes(TargetService& i_targetService);
+
/**
* @brief Entry point for initialization service to initialize the targeting
* code
@@ -84,11 +93,13 @@ static void initTargeting(errlHndl_t& io_pError)
{
TargetService& l_targetService = targetService();
(void)l_targetService.init();
+
+ initializeAttributes(l_targetService);
}
TARG_EXIT();
- #undef TARG_FN
+#undef TARG_FN
}
/**
@@ -97,6 +108,72 @@ static void initTargeting(errlHndl_t& io_pError)
*/
TASK_ENTRY_MACRO(initTargeting);
+
+
+/*
+ * @brief Initialize any attributes that need to be set early on
+ */
+static void initializeAttributes(TargetService& i_targetService)
+{
+ #define TARG_FN "initializeAttributes()...)"
+ TARG_ENTER();
+
+ bool l_isMpipl = false;
+ Target* l_pTopLevel = NULL;
+
+ i_targetService.getTopLevelTarget(l_pTopLevel);
+ if(l_pTopLevel)
+ {
+ Target* l_pMasterProcChip = NULL;
+ i_targetService.masterProcChipTargetHandle(l_pMasterProcChip);
+
+ if(l_pMasterProcChip)
+ {
+ errlHndl_t l_errl = NULL;
+ size_t l_size = sizeof(uint64_t);
+ uint64_t l_data;
+
+ // Scratch register 2 is defined as 0x00050039.. accessing
+ // directly to avoid confusion as the Literals set have
+ // 0x00050039 mapped to MBOX_SCRATCH1 which is confusing.
+ l_errl = DeviceFW::deviceRead(l_pMasterProcChip,
+ &(l_data),
+ l_size,
+ DEVICE_SCOM_ADDRESS(0x00050039));
+
+ if(l_errl)
+ {
+ TARG_INF("Read of scratch register failed");
+ errlCommit(l_errl,TARG_COMP_ID);
+ }
+ else
+ {
+ // bit 0 on indicates MPIPL
+ if(l_data & 0x8000000000000000ull)
+ {
+ l_isMpipl = true;
+ }
+ }
+ }
+
+ if(l_isMpipl)
+ {
+ l_pTopLevel->setAttr<ATTR_IS_MPIPL_HB>(1);
+ }
+ else
+ {
+ l_pTopLevel->setAttr<ATTR_IS_MPIPL_HB>(0);
+ }
+ }
+ else // top level is NULL - never expected
+ {
+ TARG_INF("Top level target is NULL");
+ }
+
+ TARG_EXIT();
+ #undef TARG_FN
+}
+
#undef TARG_CLASS
#undef TARG_NAMESPACE
OpenPOWER on IntegriCloud