summaryrefslogtreecommitdiffstats
path: root/src/usr/initservice
diff options
context:
space:
mode:
authorayma <ayma@us.ibm.com>2013-11-21 16:43:26 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-01-10 11:46:56 -0600
commit4ad61235bc58f1ed2740bd0e2a03e27438038997 (patch)
tree20d2b74f4b6776cdabc17ce35780e1c8531f43a6 /src/usr/initservice
parent63df7681be86e6f1aafaa62d70306b09edf88bba (diff)
downloadtalos-hostboot-4ad61235bc58f1ed2740bd0e2a03e27438038997.tar.gz
talos-hostboot-4ad61235bc58f1ed2740bd0e2a03e27438038997.zip
istep 18.12 hb changes
18.12. host_coalesce_host : Re-activate Hostboot images a) FSP sends each Hostboot image a mailbox .wakeup. message This places an a pending interrupt to the EX, but it is blocked by the .block wakeup. sources b) FSP then removes the block wakeup sources (master processor last) p8_block_wakeup_intr.C -reset This removes the block wakeup sources and allows hostboot to receive (and exit winkle) the pending mailbox message c) HB instance will wake up (un-winkle) its master core, thread 0 d) Hostboot will then issue IPIs to all threads in its instance e) Hostboot will establish IPC between each of the HB entities On failure system will xstop or TI No sync point with the FSP RTC: 89024 Change-Id: I747873d0b5c38f8c440a8546d44be2b8e94bce2e Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7395 Tested-by: Jenkins Server Reviewed-by: Brian H. Horton <brianh@linux.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@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/istep_mbox_msgs.H6
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.C52
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.H9
3 files changed, 66 insertions, 1 deletions
diff --git a/src/usr/initservice/istepdispatcher/istep_mbox_msgs.H b/src/usr/initservice/istepdispatcher/istep_mbox_msgs.H
index c7b97e25b..e6ad9263e 100644
--- a/src/usr/initservice/istepdispatcher/istep_mbox_msgs.H
+++ b/src/usr/initservice/istepdispatcher/istep_mbox_msgs.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -44,6 +44,7 @@ enum
{
HWSVR_MSG_SUCCESS = 0x00,
HWSVR_INVALID_MESSAGE = 0x01,
+ HWSVR_MSG_ERROR = 0x02,
};
// ------------------------------------------------------------------
@@ -57,6 +58,7 @@ enum
HWSVR_SYNC_POINT = 0x10,
HWSVR_IPL_PROGRESS_CODE = 0x11,
HWSVR_DO_IOVALID_PROCESSING = 0xC1,
+ HWSVR_COALESCE_HOST = 0xC2,
HWSVR_DO_SHUTDOWN = 0x12
};
@@ -79,6 +81,8 @@ enum
HWSVR_IPL_PROGRESS_CODE,
SHUTDOWN = MBOX::FIRST_UNSECURE_MSG |
HWSVR_DO_SHUTDOWN,
+ COALESCE_HOST = MBOX::FIRST_UNSECURE_MSG |
+ HWSVR_COALESCE_HOST,
};
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C
index 14416487d..e76fdc331 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.C
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C
@@ -750,6 +750,7 @@ void IStepDispatcher::msgHndlr()
{
msg_t * pMsg = NULL;
pMsg = msg_wait(iv_msgQ);
+ errlHndl_t l_errLog = NULL;
switch(pMsg->type)
{
@@ -773,6 +774,26 @@ void IStepDispatcher::msgHndlr()
TRACFCOMP(g_trac_initsvc, ERR_MRK"msgHndlr: Ignoring IStep msg in non-IStep mode!");
}
break;
+ case COALESCE_HOST:
+ TRACFCOMP(g_trac_initsvc, INFO_MRK"msgHndlr: COALESCE_HOST");
+ l_errLog = handleCoalesceHostMsg();
+ if (l_errLog)
+ {
+ errlCommit(l_errLog, INITSVC_COMP_ID);
+
+ // Send the message back as a response
+ pMsg->data[0] = HWSVR_MSG_ERROR;
+ }
+ else
+ {
+ pMsg->data[0] = HWSVR_MSG_SUCCESS;
+ }
+
+ msg_respond(iv_msgQ, pMsg);
+ pMsg = NULL;
+
+ break;
+
case SHUTDOWN:
// Shutdown requested from Fsp
TRACFCOMP(g_trac_initsvc, INFO_MRK"msgHndlr: SHUTDOWN");
@@ -1381,4 +1402,35 @@ void IStepDispatcher::getIstepInfo ( uint8_t & o_iStep,
mutex_unlock( &iv_mutex );
}
+// ----------------------------------------------------------------------------
+// IStepDispatcher::handleCoalesceHostMsg()
+// ----------------------------------------------------------------------------
+errlHndl_t IStepDispatcher::handleCoalesceHostMsg()
+{
+ TRACFCOMP(g_trac_initsvc, ENTER_MRK"IStepDispatcher::handleCoalesceHostMsg");
+
+ // Ensure the library is loaded
+ errlHndl_t err = VFS::module_load("libestablish_system_smp.so");
+
+ if (err)
+ {
+ TRACFCOMP(g_trac_initsvc, "handleCoalesceHostMsg: Error loading module, PLID = 0x%x",
+ err->plid());
+ }
+ else
+ {
+ err = ESTABLISH_SYSTEM_SMP::call_host_coalesce_host();
+ if (err)
+ {
+ TRACFCOMP(g_trac_initsvc, "handleCoalesceHostMsg: Error with "
+ "call_host_coalese_host function LID = 0x%x",
+ err->plid());
+ }
+ }
+
+ TRACFCOMP( g_trac_initsvc, EXIT_MRK"IStepDispatcher::handleCoalesceHostMsg");
+
+ return err;
+}
+
} // namespace
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.H b/src/usr/initservice/istepdispatcher/istepdispatcher.H
index 64daf15d5..c3382fe3b 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.H
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.H
@@ -247,6 +247,15 @@ private:
void handleProcFabIovalidMsg(msg_t * & io_pMsg);
/**
+ * @brief Handles the CoalesceHost message.
+ *
+ * Executes the processing required for the host_coalesce_host istep
+ *
+ * @return errlHndl_t - the error log generated
+ */
+ errlHndl_t handleCoalesceHostMsg();
+
+ /**
* @brief Handles an IStepRequest message
*
* Executes the requested IStep and returns result in response message
OpenPOWER on IntegriCloud