summaryrefslogtreecommitdiffstats
path: root/src/occ_405/amec/amec_oversub.c
diff options
context:
space:
mode:
authormbroyles <mbroyles@us.ibm.com>2017-10-12 15:26:29 -0500
committerMartha Broyles <mbroyles@us.ibm.com>2017-10-16 09:52:04 -0400
commitd4fb4c372702ee71440e9f7affc40bba01366c5a (patch)
tree7ec7be3ac8d4840efca515d3d581337ead3d02fa /src/occ_405/amec/amec_oversub.c
parentcff91e53cc1a8324654b52d63a2620045c2b0b32 (diff)
downloadtalos-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-xsrc/occ_405/amec/amec_oversub.c42
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;
OpenPOWER on IntegriCloud