From 577915f28604090d3b9a16e7a5a109d3afff87f9 Mon Sep 17 00:00:00 2001 From: mbroyles Date: Fri, 19 Jan 2018 15:13:51 -0600 Subject: 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 Reviewed-by: Andres A. Lugo-Reyes Reviewed-by: Christopher J. Cain Reviewed-by: Martha Broyles --- src/occ_405/cmdh/cmdh_fsp_cmds.c | 2 ++ src/occ_405/cmdh/cmdh_fsp_cmds.h | 2 +- src/occ_405/dcom/dcom.c | 21 ++++++++++++++++++++- src/occ_405/dcom/dcom.h | 6 +++--- src/occ_405/dcom/dcomMasterTx.c | 4 ++++ src/occ_405/main.c | 3 +++ src/occ_405/wof/wof.h | 4 +++- 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 | \ -- cgit v1.2.1