diff options
author | mbroyles <mbroyles@us.ibm.com> | 2017-10-12 15:26:29 -0500 |
---|---|---|
committer | Martha Broyles <mbroyles@us.ibm.com> | 2017-10-16 09:52:04 -0400 |
commit | d4fb4c372702ee71440e9f7affc40bba01366c5a (patch) | |
tree | 7ec7be3ac8d4840efca515d3d581337ead3d02fa /src/occ_405/amec/amec_oversub.c | |
parent | cff91e53cc1a8324654b52d63a2620045c2b0b32 (diff) | |
download | talos-occ-d4fb4c372702ee71440e9f7affc40bba01366c5a.tar.gz talos-occ-d4fb4c372702ee71440e9f7affc40bba01366c5a.zip |
Limit max frequency in oversubscription to prevent PS OC
Change-Id: I2c4be270347c633e5a681d460b0f744982f81bcb
RTC: 180403
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48329
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com>
Reviewed-by: William A. Bryan <wilbryan@us.ibm.com>
Reviewed-by: Andres A. Lugo-Reyes <aalugore@us.ibm.com>
Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
Diffstat (limited to 'src/occ_405/amec/amec_oversub.c')
-rwxr-xr-x | src/occ_405/amec/amec_oversub.c | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/src/occ_405/amec/amec_oversub.c b/src/occ_405/amec/amec_oversub.c index 6b9c991..ff9324d 100755 --- a/src/occ_405/amec/amec_oversub.c +++ b/src/occ_405/amec/amec_oversub.c @@ -35,6 +35,7 @@ #include <occ_sys_config.h> #include <amec_service_codes.h> #include <pgpe_interface.h> +#include <amec_freq.h> //*************************************************************************/ // Externs @@ -137,6 +138,7 @@ void amec_oversub_isr(void) // End Function Specification void amec_oversub_check(void) { + errlHndl_t l_errl = NULL; static BOOLEAN L_prev_ovs_state = FALSE; // oversub happened // oversubscription condition happened? @@ -147,6 +149,7 @@ void amec_oversub_check(void) L_prev_ovs_state = TRUE; TRAC_ERR("Oversubscription condition happened"); + /* @ * @errortype * @moduleid AMEC_SLAVE_CHECK_PERFORMANCE @@ -155,14 +158,14 @@ void amec_oversub_check(void) * @userdata4 ERC_AMEC_SLAVE_OVS_STATE * @devdesc Oversubscription condition happened */ - errlHndl_t l_errl = createErrl(AMEC_SLAVE_CHECK_PERFORMANCE,//modId - OVERSUB_ALERT, //reasoncode - ERC_AMEC_SLAVE_OVS_STATE, //Extended reason code - ERRL_SEV_INFORMATIONAL, //Severity - NULL, //Trace Buf - DEFAULT_TRACE_SIZE, //Trace Size - L_prev_ovs_state, //userdata1 - 0); //userdata2 + l_errl = createErrl(AMEC_SLAVE_CHECK_PERFORMANCE,//modId + OVERSUB_ALERT, //reasoncode + ERC_AMEC_SLAVE_OVS_STATE, //Extended reason code + ERRL_SEV_INFORMATIONAL, //Severity + NULL, //Trace Buf + DEFAULT_TRACE_SIZE, //Trace Size + L_prev_ovs_state, //userdata1 + 0); //userdata2 // set the mfg action flag (allows callout to be added to info error) setErrlActions(l_errl, ERRL_ACTIONS_MANUFACTURING_ERROR); @@ -175,17 +178,36 @@ void amec_oversub_check(void) // Commit Error commitErrl(&l_errl); + + // set max frequency for oversubscription + l_errl = amec_set_freq_range(CURRENT_MODE()); + if(l_errl) + { + TRAC_ERR("amec_oversub_check: committing error reported by amec_set_freq_range"); + commitErrl( &l_errl); + } } } else { - L_prev_ovs_state = FALSE; + if(L_prev_ovs_state) + { + L_prev_ovs_state = FALSE; + TRAC_IMP("Oversubscription condition cleared"); + + // re-set max frequency since no longer in oversubscription + l_errl = amec_set_freq_range(CURRENT_MODE()); + if(l_errl) + { + TRAC_ERR("amec_oversub_check: committing error reported by amec_set_freq_range"); + commitErrl( &l_errl); + } + } } // Figure out the over-subscription reason if(g_amec->oversub_status.oversubReasonLatchCount > 1) { - // TODO -- RTC 155565 -- Try to figure out why we throttled based on APSS GPIO pins if( g_amec->oversub_status.oversubReasonLatchCount == OVERSUB_REASON_COUNT_TIMEOUT) { g_amec->oversub_status.oversubReason = INDETERMINATE; |