summaryrefslogtreecommitdiffstats
path: root/src/occ_405/wof
diff options
context:
space:
mode:
authormbroyles <mbroyles@us.ibm.com>2017-07-12 08:49:44 -0500
committerChristopher J. Cain <cjcain@us.ibm.com>2017-07-25 14:49:58 -0400
commita84955963839b3a035dd339d3ba13e0acb88547a (patch)
treedb8c5891abf3d1ea7b0ea839d8ce7b6c6b75f9cb /src/occ_405/wof
parentca84830b6d1811a78c538f51bde34c269806f00a (diff)
downloadtalos-occ-a84955963839b3a035dd339d3ba13e0acb88547a.tar.gz
talos-occ-a84955963839b3a035dd339d3ba13e0acb88547a.zip
Increase RTL to 500us
Stop waiting for APSS data when detected complete but failed Add history counts for GPEs not idle and APSS collection errors Change-Id: I2bfaf36ee0b736a958fd41c1c2145f537fc883c5 RTC: 172963 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43052 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Andres A. Lugo-Reyes <aalugore@us.ibm.com> Reviewed-by: William A. Bryan <wilbryan@us.ibm.com> Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com>
Diffstat (limited to 'src/occ_405/wof')
-rw-r--r--src/occ_405/wof/wof.c71
1 files changed, 29 insertions, 42 deletions
diff --git a/src/occ_405/wof/wof.c b/src/occ_405/wof/wof.c
index 8bffd1c..3114480 100644
--- a/src/occ_405/wof/wof.c
+++ b/src/occ_405/wof/wof.c
@@ -115,20 +115,15 @@ int16_t G_wof_iddq_mult_table[][2] = {
* such that the WOF algorithm can run. This includes making
* sure the PGPE is ready to perform WOF calculations and enforcing
* when WOF should wait a tick to perform a calc or disable wof
- * entirely. Called from amec_slave_smh.c::amec_slv_state_4. Called
- * every 2ms, but calls the wof_main algorithm every other invocation
- * resulting in 4ms intervals
+ * entirely. Called from amec_slave_smh.c::amec_slv_state_4.
+ * This should run every 4ms, if HW_MICS_PER_TICK changes adjust calls
+ * to this function (use amec substates) to keep this called every 4ms
* Param: None
*
* Return: None
*/
void call_wof_main( void )
{
- // Variable to control toggling between invocations
- // Init to false to ensure init asynchronous operations have
- // the extra 2ms to finish.
- static bool L_run_wof = false;
-
// Variable to ensure we do not keep trying to send vfrt GpeRequest
// more than 1 extra time.
static bool L_vfrt_last_chance = false;
@@ -272,42 +267,36 @@ void call_wof_main( void )
if( (g_wof->wof_init_state >= PGPE_WOF_ENABLED_NO_PREV_DATA) &&
!g_wof->wof_disabled )
{
- // Make sure we run algo on appropriate tick
- if( !L_run_wof )
+ // Only check if req active quads changed if we are
+ // in the fully enabled wof state
+ if(g_wof->wof_init_state == WOF_ENABLED)
{
- // Only check if req active quads changed if we are
- // in the fully enabled wof state
- if(g_wof->wof_init_state == WOF_ENABLED)
- {
- // Read active quads from sram
- read_req_active_quads();
+ // Read active quads from sram
+ read_req_active_quads();
- // If the requested active quads changed last loop
- // Send vfrt with new req active quads
- if( g_wof->req_active_quad_update !=
- g_wof->prev_req_active_quads )
+ // If the requested active quads changed last loop
+ // Send vfrt with new req active quads
+ if( g_wof->req_active_quad_update !=
+ g_wof->prev_req_active_quads )
+ {
+ // Calculate new quad step
+ g_wof->quad_step_from_start =
+ calc_quad_step_from_start();
+ // Compute new VFRT Main Memory address using new quads
+ g_wof->next_vfrt_main_mem_addr =
+ calc_vfrt_mainstore_addr();
+ // Send new VFRT
+ send_vfrt_to_pgpe( g_wof->next_vfrt_main_mem_addr );
+ if(async_request_is_idle(&G_wof_vfrt_req.request))
{
- // Calculate new quad step
- g_wof->quad_step_from_start =
- calc_quad_step_from_start();
- // Compute new VFRT Main Memory address using new quads
- g_wof->next_vfrt_main_mem_addr =
- calc_vfrt_mainstore_addr();
- // Send new VFRT
- send_vfrt_to_pgpe( g_wof->next_vfrt_main_mem_addr );
- if(async_request_is_idle(&G_wof_vfrt_req.request))
- {
- g_wof->gpe_req_rc = gpe_request_schedule(&G_wof_vfrt_req);
- }
- else
- {
- INTR_TRAC_INFO("VFRT Request is not idle when"
- "requested active quads changed");
- }
+ g_wof->gpe_req_rc = gpe_request_schedule(&G_wof_vfrt_req);
+ }
+ else
+ {
+ INTR_TRAC_INFO("VFRT Request is not idle when"
+ "requested active quads changed");
}
}
- // Toggle for next tick
- L_run_wof = true;
}
else
{
@@ -330,8 +319,6 @@ void call_wof_main( void )
// Request is idle. Run wof algorithm
wof_main();
- // Set control variables for next tick
- L_run_wof = false;
L_vfrt_last_chance = false;
// Finally make sure we are in the fully enabled state
if( g_wof->wof_init_state == PGPE_WOF_ENABLED_NO_PREV_DATA )
@@ -339,7 +326,7 @@ void call_wof_main( void )
g_wof->wof_init_state = WOF_ENABLED;
}
}
- } // L_run_wof
+ }
} // >= PGPE_WOF_ENABLED_NO_PREV_DATA
} // IS_OCC_STATE_ACTIVE
} while( 0 );
OpenPOWER on IntegriCloud