summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/slave_sbe
diff options
context:
space:
mode:
authorThi Tran <thi@us.ibm.com>2014-06-23 12:28:45 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-06-23 15:28:31 -0500
commit2d92c4fd35a9e373d0b7689fa3bbdd215aa9a41a (patch)
treec206a9986fa3ca6edb451fe5c2eaad568f3e9792 /src/usr/hwpf/hwp/slave_sbe
parent33a93dde393c134f6e982f33b03985ce2e65a452 (diff)
downloadtalos-hostboot-2d92c4fd35a9e373d0b7689fa3bbdd215aa9a41a.tar.gz
talos-hostboot-2d92c4fd35a9e373d0b7689fa3bbdd215aa9a41a.zip
SW266029: INITPROC: Hostboot -proc_check_slave_sbe_seeprom_complete updates
Change-Id: I6e02b5ba0e83695d6cdf76e0f1c9911ec3dc77bc CQ:SW266029 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/11757 Reviewed-by: Thi N. Tran <thi@us.ibm.com> Tested-by: Thi N. Tran <thi@us.ibm.com> Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/11758 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/slave_sbe')
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.C67
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.H9
2 files changed, 45 insertions, 31 deletions
diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.C b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.C
index 0bf907211..ec9c00156 100644
--- a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.C
+++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.C
@@ -21,7 +21,7 @@
/* */
/* IBM_PROLOG_END_TAG */
// -*- mode: C++; c-file-style: "linux"; -*-
-// $Id: proc_check_slave_sbe_seeprom_complete.C,v 1.13 2014/02/19 02:31:45 jmcgill Exp $
+// $Id: proc_check_slave_sbe_seeprom_complete.C,v 1.14 2014/06/10 12:41:40 dsanner Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_check_slave_sbe_seeprom_complete.C,v $
//------------------------------------------------------------------------------
// *|
@@ -56,7 +56,8 @@
//------------------------------------------------------------------------------
const uint8_t SBE_STOPPED_AT_BREAKPOINT_0xB = 0xB;
const uint8_t SBE_EXIT_SUCCESS_0xF = 0xF;
-const uint64_t NS_TO_FINISH = 10^9; //(1 second)
+const uint64_t NS_TO_FINISH = 10000000; //(10 ms)
+const uint64_t MS_TO_FINISH = NS_TO_FINISH/1000000;
const uint64_t SIM_CYCLES_TO_FINISH = 10000000;
//Should really be 19.6*NS_TO_FINISH, but sim runs at about 11 hours per
//simulated second which is longer than we want to wait in error cases
@@ -213,13 +214,15 @@ extern "C"
//
// parameters: i_target => slave chip target
// i_pSEEPROM => pointer to the seeprom image (for errors)
+// i_wait_in_ms => pointer to the seeprom image (for errors)
//
// returns: FAPI_RC_SUCCESS if the slave SBE stopped with success at the correct
// location, else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_check_slave_sbe_seeprom_complete(
const fapi::Target & i_target,
- const void * i_pSEEPROM)
+ const void * i_pSEEPROM,
+ const size_t i_wait_in_ms)
{
// data buffer to hold register values
ecmdDataBufferBase data(64);
@@ -236,51 +239,59 @@ extern "C"
do
{
- //Check if the SBE is still running
+ //Check if the SBE is still running. Loop until stopped
+ //or loop time is exceeded.
bool still_running = true;
+ size_t loop_time = 0;
rc = proc_check_slave_sbe_seeprom_complete_check_running(
- i_target,
- still_running );
+ i_target,
+ still_running );
if( rc )
- {
+ {
break;
}
- if( still_running )
+ while (still_running && (loop_time < i_wait_in_ms))
{
- //SBE still running, so give it a second to finish
- FAPI_DBG("Waiting for SBE to stop (%lldns, %lld cycles)",
- NS_TO_FINISH,
- SIM_CYCLES_TO_FINISH );
+ //Not done -- sleep 10ms, then check again
+ loop_time += MS_TO_FINISH;
rc = fapiDelay(NS_TO_FINISH, SIM_CYCLES_TO_FINISH);
- if(rc)
+ if( rc )
{
FAPI_ERR("Error with delay\n");
break;
}
- //Check the SBE again
rc = proc_check_slave_sbe_seeprom_complete_check_running(
- i_target,
- still_running );
+ i_target,
+ still_running );
if( rc )
{
break;
}
+ }
- //Give up if we're still running
- if( still_running )
- {
- FAPI_ERR(
- "SBE still running after waiting (%lldns, %lld cycles)",
- NS_TO_FINISH,
- SIM_CYCLES_TO_FINISH );
+ //Break if took an error
+ if( rc )
+ {
+ break;
+ }
- const fapi::Target & CHIP_IN_ERROR = i_target;
- FAPI_SET_HWP_ERROR(rc,
- RC_PROC_CHECK_SLAVE_SBE_SEEPROM_COMPLETE_STILL_RUNNING);
- break;
- }
+ FAPI_INF("SBE is running [%d], wait time in ms[%d]",
+ still_running, loop_time);
+
+ //Give up if we're still running
+ if( still_running )
+ {
+ FAPI_ERR(
+ "SBE still running after waiting (%dns, %lld cycles)",
+ loop_time,
+ loop_time/MS_TO_FINISH*SIM_CYCLES_TO_FINISH );
+
+ const fapi::Target & CHIP_IN_ERROR = i_target;
+ FAPI_SET_HWP_ERROR(rc,
+ RC_PROC_CHECK_SLAVE_SBE_SEEPROM_COMPLETE_STILL_RUNNING);
+ break;
} //end if(still_running)
//SBE is stopped. Let's see where
diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.H b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.H
index a65a759f7..fd7239015 100644
--- a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.H
+++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.H
@@ -20,7 +20,7 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_check_slave_sbe_seeprom_complete.H,v 1.4 2014/02/10 02:32:02 stillgs Exp $
+// $Id: proc_check_slave_sbe_seeprom_complete.H,v 1.5 2014/06/10 12:41:42 dsanner Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_check_slave_sbe_seeprom_complete.H,v $
//------------------------------------------------------------------------------
// *|
@@ -50,7 +50,8 @@
// function pointer typedef definition for HWP call support
typedef fapi::ReturnCode (*proc_check_slave_sbe_seeprom_complete_FP_t)(const fapi::Target &,
- const void *);
+ const void *,
+ const size_t);
//------------------------------------------------------------------------------
// Constant definitions
@@ -70,13 +71,15 @@ extern "C"
*
* @param[in] i_target Reference to processor slave chip target
* @param[in] i_pSEEPROM Pointer to the seeprom image (for errors)
+ * @param[in] i_wait_in_ms Amount of time to wait in ms for SBE to complete
*
* @return ReturnCode Success if slave chip stopped at correct place,
* else error
*/
fapi::ReturnCode proc_check_slave_sbe_seeprom_complete(
const fapi::Target & i_target,
- const void * i_pSEEPROM);
+ const void * i_pSEEPROM,
+ const size_t i_wait_in_ms = 1000);
} // extern "C"
OpenPOWER on IntegriCloud