diff options
author | mbroyles <mbroyles@us.ibm.com> | 2017-07-12 08:49:44 -0500 |
---|---|---|
committer | Christopher J. Cain <cjcain@us.ibm.com> | 2017-07-25 14:49:58 -0400 |
commit | a84955963839b3a035dd339d3ba13e0acb88547a (patch) | |
tree | db8c5891abf3d1ea7b0ea839d8ce7b6c6b75f9cb /src/occ_405/wof | |
parent | ca84830b6d1811a78c538f51bde34c269806f00a (diff) | |
download | talos-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.c | 71 |
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 ); |