diff options
author | ayma <ayma@us.ibm.com> | 2013-11-21 16:43:26 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-01-10 11:46:56 -0600 |
commit | 4ad61235bc58f1ed2740bd0e2a03e27438038997 (patch) | |
tree | 20d2b74f4b6776cdabc17ce35780e1c8531f43a6 /src/usr/initservice | |
parent | 63df7681be86e6f1aafaa62d70306b09edf88bba (diff) | |
download | talos-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.H | 6 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/istepdispatcher.C | 52 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/istepdispatcher.H | 9 |
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 |