summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormbroyles <mbroyles@us.ibm.com>2018-01-19 15:13:51 -0600
committerMartha Broyles <mbroyles@us.ibm.com>2018-01-22 11:54:15 -0500
commit577915f28604090d3b9a16e7a5a109d3afff87f9 (patch)
treefc08af9fd4b904e07a30a89f12c89faa22a2f741
parentc04d58bd549c17bece70aff18e6cb01af26feb26 (diff)
downloadtalos-occ-577915f28604090d3b9a16e7a5a109d3afff87f9.tar.gz
talos-occ-577915f28604090d3b9a16e7a5a109d3afff87f9.zip
Add WOF disable param for ASM
RTC: 130217 CQ: SW414505 Change-Id: I9a91b4d3796a672bbdb3ba01c8080174da9d5733 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/52281 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Andres A. Lugo-Reyes <aalugore@us.ibm.com> Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com> Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds.c2
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds.h2
-rwxr-xr-xsrc/occ_405/dcom/dcom.c21
-rwxr-xr-xsrc/occ_405/dcom/dcom.h6
-rw-r--r--src/occ_405/dcom/dcomMasterTx.c4
-rwxr-xr-xsrc/occ_405/main.c3
-rw-r--r--src/occ_405/wof/wof.h4
7 files changed, 36 insertions, 6 deletions
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.c b/src/occ_405/cmdh/cmdh_fsp_cmds.c
index 996b534..c28add1 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds.c
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds.c
@@ -75,6 +75,7 @@ cmdh_tunable_param_table_t G_mst_tunable_parameter_table[CMDH_DEFAULT_TUNABLE_PA
{7, "Utilization threshold to determine active cores with slack", 3, 0, 980, 0, 1000},
{8, "Enable/disable frequency delta between cores", 0, 0, 0, 0, 1 },
{9, "Maximum frequency delta between cores", 2, 0, 10, 10, 100 },
+ {10, "Enable/disable Workload Optimized Frequency", 0, 0, 1, 0, 1 },
};
// The first two columns of this table are the default tunable parameter values
@@ -90,6 +91,7 @@ cmdh_tunable_param_table_ext_t G_mst_tunable_parameter_table_ext[CMDH_DEFAULT_TU
{980, 10, 980 },
{0, 1, 0 },
{10, 1, 10 },
+ {1, 1, 0 },
};
// Flag to indicate that new tunable parameter values need to be written
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.h b/src/occ_405/cmdh/cmdh_fsp_cmds.h
index c318e7b..5ab7fe1 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds.h
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds.h
@@ -603,7 +603,7 @@ typedef struct __attribute__ ((packed))
// Default number of tunable parameters available
// NOTE: update this value if any new tunable parameter is added into the table
-#define CMDH_DEFAULT_TUNABLE_PARAM_NUM 9
+#define CMDH_DEFAULT_TUNABLE_PARAM_NUM 10
// Max size for string containing the tunable parameter name
#define CMDH_TUNABLE_PARAM_NAME_MAX_SIZE 60
diff --git a/src/occ_405/dcom/dcom.c b/src/occ_405/dcom/dcom.c
index 26565fb..8db1337 100755
--- a/src/occ_405/dcom/dcom.c
+++ b/src/occ_405/dcom/dcom.c
@@ -595,12 +595,31 @@ void task_dcom_parse_occfwmsg(task_t *i_self)
if(G_dcom_slv_inbox_rx.tunable_param_overwrite == 1)
{
+ // parameter(s) overwritten by user
g_amec->slv_dps_param_overwrite = TRUE;
}
- else
+ else // ==2 use defaults for all parameters
{
g_amec->slv_dps_param_overwrite = FALSE;
}
+
+ // check if user has WOF enabled
+ if(G_dcom_slv_inbox_rx.wof_enable)
+ {
+ if(g_amec->wof.wof_disabled & WOF_RC_USER_DISABLED_WOF)
+ {
+ set_clear_wof_disabled( CLEAR, WOF_RC_USER_DISABLED_WOF );
+ TRAC_INFO("User enabled WOF! wof_disabled = 0x%08X", g_amec->wof.wof_disabled);
+ }
+ }
+ else // user has WOF disabled
+ {
+ if(!(g_amec->wof.wof_disabled & WOF_RC_USER_DISABLED_WOF))
+ {
+ set_clear_wof_disabled( SET, WOF_RC_USER_DISABLED_WOF );
+ TRAC_INFO("User disabled WOF! wof_disabled = 0x%08X", g_amec->wof.wof_disabled);
+ }
+ }
}
// Copy soft frequency boundaries sent by Master OCC
diff --git a/src/occ_405/dcom/dcom.h b/src/occ_405/dcom/dcom.h
index e730a76..3798c25 100755
--- a/src/occ_405/dcom/dcom.h
+++ b/src/occ_405/dcom/dcom.h
@@ -167,11 +167,11 @@ typedef struct __attribute__ ((packed))
uint16_t step_down; // [62] - 2 bytes
uint16_t epsilon_perc; // [64] - 2 bytes
uint16_t tlutil; // [66] - 2 bytes
- uint8_t tunable_param_overwrite; // [68] - 1 byte
+ uint8_t wof_enable; // [68] - 1 byte
+ uint8_t tunable_param_overwrite; // [69] - 1 byte
// Soft frequency boundaries
- uint16_t soft_fmin; // [69] - 2 bytes
- uint8_t pad; // [71] - 1 bytes
+ uint16_t soft_fmin; // [70] - 2 bytes
uint16_t soft_fmax; // [72] - 2 bytes
// Reserved Bytes
diff --git a/src/occ_405/dcom/dcomMasterTx.c b/src/occ_405/dcom/dcomMasterTx.c
index 7ba80e3..318ac25 100644
--- a/src/occ_405/dcom/dcomMasterTx.c
+++ b/src/occ_405/dcom/dcomMasterTx.c
@@ -134,6 +134,8 @@ uint32_t dcom_build_slv_inbox(void)
G_dcom_slv_inbox_tx[l_slv_idx].ips_freq_request = g_amec->mst_ips_parms.freq_request;
// Collect Tunable Paramaters to be sent to slaves
+ // Tunable IDs defined in G_mst_tunable_parameter_table[]
+ // G_mst_tunable_parameter_table_ext index = Tunable ID - 1
G_dcom_slv_inbox_tx[l_slv_idx].alpha_up = G_mst_tunable_parameter_table_ext[0].adj_value;
G_dcom_slv_inbox_tx[l_slv_idx].alpha_down = G_mst_tunable_parameter_table_ext[1].adj_value;
G_dcom_slv_inbox_tx[l_slv_idx].sample_count_util = G_mst_tunable_parameter_table_ext[2].adj_value;
@@ -141,6 +143,8 @@ uint32_t dcom_build_slv_inbox(void)
G_dcom_slv_inbox_tx[l_slv_idx].step_down = G_mst_tunable_parameter_table_ext[4].adj_value;
G_dcom_slv_inbox_tx[l_slv_idx].epsilon_perc = G_mst_tunable_parameter_table_ext[5].adj_value;
G_dcom_slv_inbox_tx[l_slv_idx].tlutil = G_mst_tunable_parameter_table_ext[6].adj_value;
+ // parameters at index 7 and 8 (f delta between cores) are used by master only and not sent to slaves
+ G_dcom_slv_inbox_tx[l_slv_idx].wof_enable = G_mst_tunable_parameter_table_ext[9].adj_value;
G_dcom_slv_inbox_tx[l_slv_idx].tunable_param_overwrite = G_mst_tunable_parameter_overwrite;
// Collect soft frequency bondaries to be sent to slaves
diff --git a/src/occ_405/main.c b/src/occ_405/main.c
index 1885be6..81cec38 100755
--- a/src/occ_405/main.c
+++ b/src/occ_405/main.c
@@ -839,6 +839,9 @@ bool read_oppb_params()
break;
}
+ MAIN_TRAC_IMP("read_oppb_header: PGPE Frequency data: min[%dkHz], max[%dkHz], step[%dkHz], pState min[%d]",
+ G_oppb.frequency_min_khz, G_oppb.frequency_max_khz,
+ G_oppb.frequency_step_khz, G_oppb.pstate_min);
// Confirm whether we have wof support
if(!(G_oppb.wof.wof_enabled))
{
diff --git a/src/occ_405/wof/wof.h b/src/occ_405/wof/wof.h
index 7d75bf1..26a8f4c 100644
--- a/src/occ_405/wof/wof.h
+++ b/src/occ_405/wof/wof.h
@@ -73,6 +73,7 @@
#define WOF_RC_UNSUPPORTED_FREQUENCIES 0x00200000
#define WOF_RC_NO_CONFIGURED_CORES 0x00400000
#define WOF_RC_IPC_FAILURE 0x00800000
+#define WOF_RC_USER_DISABLED_WOF 0x01000000
//***************************************************************************
// Temp space used to save hard coded addresses
@@ -86,7 +87,8 @@
WOF_RC_NO_CONFIGURED_CORES | \
WOF_RC_RESET_LIMIT_REACHED | \
WOF_RC_UTURBO_IS_ZERO | \
- WOF_RC_PSTATE_PROTOCOL_OFF )
+ WOF_RC_PSTATE_PROTOCOL_OFF | \
+ WOF_RC_USER_DISABLED_WOF )
// Reason codes that should NOT request a reset should be added here
#define IGNORE_WOF_RESET (WOF_RC_SYSTEM_WOF_DISABLE | \
OpenPOWER on IntegriCloud