diff options
author | Wael El-Essawy <welessa@us.ibm.com> | 2015-11-30 14:58:43 -0600 |
---|---|---|
committer | William A. Bryan <wilbryan@us.ibm.com> | 2015-12-04 14:03:28 -0600 |
commit | 0694c6bb509e5d91a7f2c7b1f4924e114500dca1 (patch) | |
tree | 74f7869436c57df025578370670035a49e46979c /src/occ_405 | |
parent | 74ad39e79ccd4d423adea15d82a87fa70ec9b56f (diff) | |
download | talos-occ-0694c6bb509e5d91a7f2c7b1f4924e114500dca1.tar.gz talos-occ-0694c6bb509e5d91a7f2c7b1f4924e114500dca1.zip |
Update Proc Core sensors in amec_slv_states for 24 cores
- maintain 8 core data collection states versus 16 rtls
ticks core scheduling scheme, utilizing substates to perform
4 ms full 24 cores data collection.
- introduce 4 substates, and distribute them over time (1,3,5,7)
- spread core data collection over 8 subsates, reading
3 cores data each time.
- eliminate gpe_bulk_core_data_t type
- reset dts elements using for loop instead of memset
- create amec_update_proc_core_group function and
G_sensor_update_pattern array to easily modify core data
sensors update pattern
Change-Id: Idd752c6ea77829ac308e2089f6582db472c8badc
RTC: 140094
RTC: 140183
RTC: 140186
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/22347
Tested-by: Wael Elessawy <welessa@us.ibm.com>
Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
Reviewed-by: William A. Bryan <wilbryan@us.ibm.com>
Diffstat (limited to 'src/occ_405')
-rwxr-xr-x | src/occ_405/amec/amec_freq.c | 2 | ||||
-rwxr-xr-x | src/occ_405/amec/amec_health.c | 2 | ||||
-rwxr-xr-x | src/occ_405/amec/amec_sensors_core.c | 24 | ||||
-rwxr-xr-x | src/occ_405/amec/amec_slave_smh.c | 834 | ||||
-rwxr-xr-x | src/occ_405/amec/amec_slave_smh.h | 40 | ||||
-rwxr-xr-x | src/occ_405/amec/amec_smh.h | 3 | ||||
-rwxr-xr-x | src/occ_405/amec/amec_sys.h | 6 | ||||
-rwxr-xr-x | src/occ_405/proc/proc_data.c | 2 |
8 files changed, 815 insertions, 98 deletions
diff --git a/src/occ_405/amec/amec_freq.c b/src/occ_405/amec/amec_freq.c index 9ae4c03..025e088 100755 --- a/src/occ_405/amec/amec_freq.c +++ b/src/occ_405/amec/amec_freq.c @@ -878,7 +878,7 @@ void amec_verify_pstate() #if 0 uint8_t l_core = 0; int8_t l_pstate_from_fmax = 0; - gpe_bulk_core_data_t * l_core_data_ptr; + CoreData * l_core_data_ptr; pmc_pmsr_ffcdc_data_t l_pmc_pmsr_ffdc; errlHndl_t l_err = NULL; diff --git a/src/occ_405/amec/amec_health.c b/src/occ_405/amec/amec_health.c index 85c7a7d..58092fc 100755 --- a/src/occ_405/amec/amec_health.c +++ b/src/occ_405/amec/amec_health.c @@ -858,7 +858,7 @@ void amec_health_check_proc_timeout() static uint32_t L_read_fail_cnt = 0; uint8_t i = 0; uint8_t l_bad_core_index = 0; - gpe_bulk_core_data_t *l_core_data_ptr = NULL; + CoreData *l_core_data_ptr = NULL; /*------------------------------------------------------------------------*/ /* Code */ diff --git a/src/occ_405/amec/amec_sensors_core.c b/src/occ_405/amec/amec_sensors_core.c index 37452e6..7527e44 100755 --- a/src/occ_405/amec/amec_sensors_core.c +++ b/src/occ_405/amec/amec_sensors_core.c @@ -52,9 +52,9 @@ /******************************************************************************/ /* Forward Declarations */ /******************************************************************************/ -void amec_calc_dts_sensors(gpe_bulk_core_data_t * i_core_data_ptr, uint8_t i_core); -void amec_calc_freq_and_util_sensors(gpe_bulk_core_data_t * i_core_data_ptr, uint8_t i_core); -void amec_calc_ips_sensors(gpe_bulk_core_data_t * i_core_data_ptr, uint8_t i_core); +void amec_calc_dts_sensors(CoreData * i_core_data_ptr, uint8_t i_core); +void amec_calc_freq_and_util_sensors(CoreData * i_core_data_ptr, uint8_t i_core); +void amec_calc_ips_sensors(CoreData * i_core_data_ptr, uint8_t i_core); void amec_calc_spurr(uint8_t i_core); //************************************************************************* @@ -72,7 +72,7 @@ void amec_calc_spurr(uint8_t i_core); // End Function Specification void amec_update_proc_core_sensors(uint8_t i_core) { - gpe_bulk_core_data_t *l_core_data_ptr; + CoreData *l_core_data_ptr; uint16_t l_temp16 = 0; uint32_t l_temp32 = 0; @@ -90,6 +90,7 @@ void amec_update_proc_core_sensors(uint8_t i_core) //------------------------------------------------------- amec_calc_dts_sensors(l_core_data_ptr, i_core); +// @TODO - TEMP: frequency and utilization sensors are not enabled yet. /* //------------------------------------------------------- // Util / Freq @@ -99,7 +100,7 @@ void amec_update_proc_core_sensors(uint8_t i_core) { amec_calc_freq_and_util_sensors(l_core_data_ptr,i_core); } - + //------------------------------------------------------- // Performance counter - This function should be called // after amec_calc_freq_and_util_sensors(). @@ -177,7 +178,7 @@ uint8_t G_quadWeight = 1; // Thread: RealTime Loop // // End Function Specification -void amec_calc_dts_sensors(gpe_bulk_core_data_t * i_core_data_ptr, uint8_t i_core) +void amec_calc_dts_sensors(CoreData * i_core_data_ptr, uint8_t i_core) { #define DTS_PER_CORE 2 #define DTS_INVALID_MASK 0x0C00 @@ -192,7 +193,10 @@ void amec_calc_dts_sensors(gpe_bulk_core_data_t * i_core_data_ptr, uint8_t i_cor uint8_t l_dtsCnt = 0; //Number of valid Core DTSs //Clear DTS array. - memset((void *)&(l_dts[0]), 0, sizeof(l_dts)); + for (k = 0; k < DTS_PER_CORE; k++) + { + l_dts[k] = 0; + } if (i_core_data_ptr != NULL) { @@ -271,8 +275,8 @@ void amec_calc_dts_sensors(gpe_bulk_core_data_t * i_core_data_ptr, uint8_t i_cor // // End Function Specification // TEMP - Not supported yet. -#if 0 -void amec_calc_freq_and_util_sensors(gpe_bulk_core_data_t * i_core_data_ptr, uint8_t i_core) +#if 0 +void amec_calc_freq_and_util_sensors(CoreData * i_core_data_ptr, uint8_t i_core) { BOOLEAN l_core_sleep_winkle = FALSE; uint32_t l_pm_state_hist_reg = 0; @@ -609,7 +613,7 @@ void amec_calc_freq_and_util_sensors(gpe_bulk_core_data_t * i_core_data_ptr, uin } -void amec_calc_ips_sensors(gpe_bulk_core_data_t * i_core_data_ptr, uint8_t i_core) +void amec_calc_ips_sensors(CoreData * i_core_data_ptr, uint8_t i_core) { #define TWO_PWR_24_MASK 0x00FFFFFF #define TWO_PWR_20_MASK 0x000FFFFF diff --git a/src/occ_405/amec/amec_slave_smh.c b/src/occ_405/amec/amec_slave_smh.c index 141e1c3..1b7543f 100755 --- a/src/occ_405/amec/amec_slave_smh.c +++ b/src/occ_405/amec/amec_slave_smh.c @@ -75,26 +75,80 @@ smh_state_t G_amec_slv_state = {AMEC_INITIAL_STATE, // Number of ticks for periodically updating VRM-related data #define AMEC_UPDATE_VRM_TICKS 4000 -// @TODO - TEMP: Not Ready yet in Phase 1. -#if 0 +// This table presents the core data sensors collection pattern. +// This pattern is not completely rbitrary, and it must always +// follow track the GPE request pattern for the data collection. +// The choice made here is for 3 cores data collection every 2 tick, +// with a maximum latency of 2 ticks (counting the dispatch tick). +#define CORES_PER_STATE 3 + +const uint8_t G_sensor_update_pattern[AMEC_SMH_STATES_PER_LVL][CORES_PER_STATE] = +{ + { 23, 0, 12 }, // Group 0 + { 1, 2, 13 }, // Group 1 + { 14, 3, 15 }, // Group 2 + { 4, 5, 16 }, // Group 3 + { 17, 6, 18 }, // Group 4 + { 7, 8, 19 }, // Group 5 + { 20, 9, 21 }, // Group 6 + { 10, 11, 22 } // Group 7 +}; + +// -------------------------------------------------------- +// AMEC Slave State 1 Substate Table +// -------------------------------------------------------- +// Each function inside this state table runs once every 16ms. +// +// No Substates +// +const smh_tbl_t amec_slv_state_1_substate_table[AMEC_SMH_STATES_PER_LVL] = +{ + {amec_slv_substate_1_0, NULL}, + {amec_slv_substate_1_1, NULL}, + {amec_slv_substate_1_2, NULL}, + {amec_slv_substate_1_3, NULL}, + {amec_slv_substate_1_4, NULL}, + {amec_slv_substate_1_5, NULL}, + {amec_slv_substate_1_6, NULL}, + {amec_slv_substate_1_7, NULL}, +}; + +// -------------------------------------------------------- +// AMEC Slave State 3 Substate Table +// -------------------------------------------------------- +// Each function inside this state table runs once every 16ms. +// +// No Substates +// +const smh_tbl_t amec_slv_state_3_substate_table[AMEC_SMH_STATES_PER_LVL] = +{ + {amec_slv_substate_3_0, NULL}, + {amec_slv_substate_3_1, NULL}, + {amec_slv_substate_3_2, NULL}, + {amec_slv_substate_3_3, NULL}, + {amec_slv_substate_3_4, NULL}, + {amec_slv_substate_3_5, NULL}, + {amec_slv_substate_3_6, NULL}, + {amec_slv_substate_3_7, NULL}, +}; // -------------------------------------------------------- -// AMEC Slave State 6 Substate Table +// AMEC Slave State 5 Substate Table // -------------------------------------------------------- // Each function inside this state table runs once every 16ms. // // No Substates // -const smh_tbl_t amec_slv_state_6_substate_table[AMEC_SMH_STATES_PER_LVL] = +const smh_tbl_t amec_slv_state_5_substate_table[AMEC_SMH_STATES_PER_LVL] = { - {amec_slv_substate_6_0, NULL}, - {amec_slv_substate_6_1, NULL}, - {amec_slv_substate_6_2, NULL}, - {amec_slv_substate_6_3, NULL}, - {amec_slv_substate_6_4, NULL}, - {amec_slv_substate_6_5, NULL}, - {amec_slv_substate_6_6, NULL}, - {amec_slv_substate_6_7, NULL}, + {amec_slv_substate_5_0, NULL}, + {amec_slv_substate_5_1, NULL}, + {amec_slv_substate_5_2, NULL}, + {amec_slv_substate_5_3, NULL}, + {amec_slv_substate_5_4, NULL}, + {amec_slv_substate_5_5, NULL}, + {amec_slv_substate_5_6, NULL}, + {amec_slv_substate_5_7, NULL}, }; // -------------------------------------------------------- @@ -116,7 +170,6 @@ const smh_tbl_t amec_slv_state_7_substate_table[AMEC_SMH_STATES_PER_LVL] = {amec_slv_substate_7_7, NULL}, }; -#endif // #if 0 @TODO - TEMP: Not Ready yet in Phase 1. // -------------------------------------------------------- // Main AMEC Slave State Table @@ -128,13 +181,13 @@ const smh_tbl_t amec_slv_state_7_substate_table[AMEC_SMH_STATES_PER_LVL] = const smh_tbl_t amec_slv_state_table[AMEC_SMH_STATES_PER_LVL] = { {amec_slv_state_0, NULL}, - {amec_slv_state_1, NULL}, + {amec_slv_state_1, amec_slv_state_1_substate_table}, {amec_slv_state_2, NULL}, - {amec_slv_state_3, NULL}, + {amec_slv_state_3, amec_slv_state_3_substate_table}, {amec_slv_state_4, NULL}, - {amec_slv_state_5, NULL}, - {amec_slv_state_6, NULL}, //Substate not yet supported: amec_slv_state_6_substate_table}, - {amec_slv_state_7, NULL}, //Substate not yet supported: amec_slv_state_7_substate_table}, + {amec_slv_state_5, amec_slv_state_5_substate_table}, + {amec_slv_state_6, NULL}, + {amec_slv_state_7, amec_slv_state_7_substate_table}, }; @@ -442,8 +495,6 @@ void amec_slv_state_0(void) //------------------------------------------------------- // Update Proc Core sensors (for this tick) //------------------------------------------------------- - amec_update_proc_core_sensors(CORE_0); - amec_update_proc_core_sensors(CORE_8); /* Not yet supported //------------------------------------------------------- @@ -494,8 +545,7 @@ void amec_slv_state_1(void) //------------------------------------------------------- // Update Proc Core sensors (for this tick) //------------------------------------------------------- - amec_update_proc_core_sensors(CORE_1); - amec_update_proc_core_sensors(CORE_9); + /* Not yet supported //------------------------------------------------------- @@ -525,8 +575,6 @@ void amec_slv_state_2(void) //------------------------------------------------------- // Update Proc Core sensors (for this tick) //------------------------------------------------------- - amec_update_proc_core_sensors(CORE_2); - amec_update_proc_core_sensors(CORE_10); /* Not yet supported //------------------------------------------------------- @@ -553,8 +601,6 @@ void amec_slv_state_3(void) //------------------------------------------------------- // Update Proc Core sensors (for this tick) //------------------------------------------------------- - amec_update_proc_core_sensors(CORE_3); - amec_update_proc_core_sensors(CORE_11); /* Not yet supported //------------------------------------------------------- @@ -586,7 +632,6 @@ void amec_slv_state_4(void) //------------------------------------------------------- // Update Proc Core sensors (for this tick) //------------------------------------------------------- - amec_update_proc_core_sensors(CORE_4); /* Not yet supported //------------------------------------------------------- @@ -613,7 +658,6 @@ void amec_slv_state_5(void) //------------------------------------------------------- // Update Proc Core sensors (for this tick) //------------------------------------------------------- - amec_update_proc_core_sensors(CORE_5); /* Not yet supported //------------------------------------------------------- @@ -645,7 +689,6 @@ void amec_slv_state_6(void) //------------------------------------------------------- // Update Proc Core sensors (for this tick) //------------------------------------------------------- - amec_update_proc_core_sensors(CORE_6); /* Not yet supported //------------------------------------------------------- @@ -670,7 +713,6 @@ void amec_slv_state_7(void) //------------------------------------------------------- // Update Proc Core sensors (for this tick) //------------------------------------------------------- - amec_update_proc_core_sensors(CORE_7); /* Not yet supported //------------------------------------------------------- @@ -680,30 +722,234 @@ void amec_slv_state_7(void) */ } -// @TODO - TEMP: Not Ready yet in Phase 1. -#if 0 // Function Specification // -// Name: amec_slv_substate_6_0 -// amec_slv_substate_6_1 -// amec_slv_substate_6_2 -// amec_slv_substate_6_3 -// amec_slv_substate_6_4 -// amec_slv_substate_6_5 -// amec_slv_substate_6_6 -// amec_slv_substate_6_7 -// -// Description: slave substate amec_slv_substate_6_0 -// slave substate amec_slv_substate_6_1 -// slave substate amec_slv_substate_6_2 -// slave substate amec_slv_substate_6_3 -// slave substate amec_slv_substate_6_4 -// slave substate amec_slv_substate_6_5 -// slave substate amec_slv_substate_6_6 -// slave substate amec_slv_substate_6_7 +// Name: amec_slv_substate_1_0 +// amec_slv_substate_1_1 +// amec_slv_substate_1_2 +// amec_slv_substate_1_3 +// amec_slv_substate_1_4 +// amec_slv_substate_1_5 +// amec_slv_substate_1_6 +// amec_slv_substate_1_7 +// +// Description: slave substate amec_slv_substate_1_0 +// slave substate amec_slv_substate_1_1 +// slave substate amec_slv_substate_1_2 +// slave substate amec_slv_substate_1_3 +// slave substate amec_slv_substate_1_4 +// slave substate amec_slv_substate_1_5 +// slave substate amec_slv_substate_1_6 +// slave substate amec_slv_substate_1_7 +// +// End Function Specification +void amec_slv_substate_1_0(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 1.0: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[0][0], + G_sensor_update_pattern[0][1], + G_sensor_update_pattern[0][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(0); +} + +void amec_slv_substate_1_1(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 1.1: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[4][0], + G_sensor_update_pattern[4][1], + G_sensor_update_pattern[4][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(4); +} + + +void amec_slv_substate_1_2(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 1.2: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[0][0], + G_sensor_update_pattern[0][1], + G_sensor_update_pattern[0][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(0); +} + +void amec_slv_substate_1_3(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 1.3: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[4][0], + G_sensor_update_pattern[4][1], + G_sensor_update_pattern[4][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(4); +} + + +void amec_slv_substate_1_4(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 1.4: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[0][0], + G_sensor_update_pattern[0][1], + G_sensor_update_pattern[0][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(0); +} + +void amec_slv_substate_1_5(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 1.5: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[4][0], + G_sensor_update_pattern[4][1], + G_sensor_update_pattern[4][2]); + + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(4); +} + + +void amec_slv_substate_1_6(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 1.6: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[0][0], + G_sensor_update_pattern[0][1], + G_sensor_update_pattern[0][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(0); +} + +void amec_slv_substate_1_7(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 1.7: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[4][0], + G_sensor_update_pattern[4][1], + G_sensor_update_pattern[4][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(4); +} + + +// Function Specification +// +// Name: amec_slv_substate_3_0 +// amec_slv_substate_3_1 +// amec_slv_substate_3_2 +// amec_slv_substate_3_3 +// amec_slv_substate_3_4 +// amec_slv_substate_3_5 +// amec_slv_substate_3_6 +// amec_slv_substate_3_7 +// +// Description: slave substate amec_slv_substate_3_0 +// slave substate amec_slv_substate_3_1 +// slave substate amec_slv_substate_3_2 +// slave substate amec_slv_substate_3_3 +// slave substate amec_slv_substate_3_4 +// slave substate amec_slv_substate_3_5 +// slave substate amec_slv_substate_3_6 +// slave substate amec_slv_substate_3_7 // // End Function Specification -void amec_slv_substate_6_0(void) +void amec_slv_substate_3_0(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 3.0: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[1][0], + G_sensor_update_pattern[1][1], + G_sensor_update_pattern[1][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(1); +} + +void amec_slv_substate_3_1(void) { /*------------------------------------------------------------------------*/ /* Local Variables */ @@ -712,13 +958,185 @@ void amec_slv_substate_6_0(void) /*------------------------------------------------------------------------*/ /* Code */ /*------------------------------------------------------------------------*/ - AMEC_DBG("\tAMEC Slave State 6.0\n"); + AMEC_DBG("\tAMEC Slave State 3.1: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[5][0], + G_sensor_update_pattern[5][1], + G_sensor_update_pattern[5][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(5); +} +void amec_slv_substate_3_2(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 3.2: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[1][0], + G_sensor_update_pattern[1][1], + G_sensor_update_pattern[1][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(1); +} + +void amec_slv_substate_3_3(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 3.3: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[5][0], + G_sensor_update_pattern[5][1], + G_sensor_update_pattern[5][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(5); +} + +void amec_slv_substate_3_4(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 3.4: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[1][0], + G_sensor_update_pattern[1][1], + G_sensor_update_pattern[1][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(1); +} + +void amec_slv_substate_3_5(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 3.5: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[5][0], + G_sensor_update_pattern[5][1], + G_sensor_update_pattern[5][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(5); +} + +void amec_slv_substate_3_6(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 3.6: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[1][0], + G_sensor_update_pattern[1][1], + G_sensor_update_pattern[1][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(1); +} + + +void amec_slv_substate_3_7(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 3.7: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[5][0], + G_sensor_update_pattern[5][1], + G_sensor_update_pattern[5][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(5); +} + + +// Function Specification +// +// Name: amec_slv_substate_5_0 +// amec_slv_substate_5_1 +// amec_slv_substate_5_2 +// amec_slv_substate_5_3 +// amec_slv_substate_5_4 +// amec_slv_substate_5_5 +// amec_slv_substate_5_6 +// amec_slv_substate_5_7 +// +// Description: slave substate amec_slv_substate_5_0 +// slave substate amec_slv_substate_5_1 +// slave substate amec_slv_substate_5_2 +// slave substate amec_slv_substate_5_3 +// slave substate amec_slv_substate_5_4 +// slave substate amec_slv_substate_5_5 +// slave substate amec_slv_substate_5_6 +// slave substate amec_slv_substate_5_7 +// +// End Function Specification +void amec_slv_substate_5_0(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 5.0: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[2][0], + G_sensor_update_pattern[2][1], + G_sensor_update_pattern[2][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(2); + +// @TODO - TEMP: Not Ready yet in Phase 1. // Call processor-based thermal controller - amec_controller_proc_thermal(); +// amec_controller_proc_thermal(); } -void amec_slv_substate_6_1(void) +void amec_slv_substate_5_1(void) { /*------------------------------------------------------------------------*/ /* Local Variables */ @@ -727,18 +1145,145 @@ void amec_slv_substate_6_1(void) /*------------------------------------------------------------------------*/ /* Code */ /*------------------------------------------------------------------------*/ - AMEC_DBG("\tAMEC Slave State 6.1\n"); + AMEC_DBG("\tAMEC Slave State 5.1: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[6][0], + G_sensor_update_pattern[6][1], + G_sensor_update_pattern[6][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(6); +// @TODO - TEMP: Not Ready yet in Phase 1. // Call controller on VRHOT signal from processor regulator - amec_controller_vrhotproc(); +// amec_controller_vrhotproc(); +} + + +void amec_slv_substate_5_2(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 5.2: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[2][0], + G_sensor_update_pattern[2][1], + G_sensor_update_pattern[2][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(2); +} + +void amec_slv_substate_5_3(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 5.3: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[6][0], + G_sensor_update_pattern[6][1], + G_sensor_update_pattern[6][2]); + + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(6); +} + + +void amec_slv_substate_5_4(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 5.4: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[2][0], + G_sensor_update_pattern[2][1], + G_sensor_update_pattern[2][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(2); +} + +void amec_slv_substate_5_5(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 5.5: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[6][0], + G_sensor_update_pattern[6][1], + G_sensor_update_pattern[6][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(6); +} + + +void amec_slv_substate_5_6(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 5.6: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[2][0], + G_sensor_update_pattern[2][1], + G_sensor_update_pattern[2][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(2); +} + +void amec_slv_substate_5_7(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 5.7: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[6][0], + G_sensor_update_pattern[6][1], + G_sensor_update_pattern[6][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(6); } -void amec_slv_substate_6_2(void){AMEC_DBG("\tAMEC Slave State 6.2\n");} -void amec_slv_substate_6_3(void){AMEC_DBG("\tAMEC Slave State 6.3\n");} -void amec_slv_substate_6_4(void){AMEC_DBG("\tAMEC Slave State 6.4\n");} -void amec_slv_substate_6_5(void){AMEC_DBG("\tAMEC Slave State 6.5\n");} -void amec_slv_substate_6_6(void){AMEC_DBG("\tAMEC Slave State 6.6\n");} -void amec_slv_substate_6_7(void){AMEC_DBG("\tAMEC Slave State 6.7\n");} // Function Specification // @@ -770,21 +1315,147 @@ void amec_slv_substate_7_0(void) /*------------------------------------------------------------------------*/ /* Code */ /*------------------------------------------------------------------------*/ - AMEC_DBG("\tAMEC Slave State 7.0\n"); + AMEC_DBG("\tAMEC Slave State 7.0: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[3][0], + G_sensor_update_pattern[3][1], + G_sensor_update_pattern[3][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(3); +// @TODO - TEMP: Not Ready yet in Phase 1. +/* // Call memory thermal controller based on DIMM temperature amec_controller_dimm_thermal(); // Call memory thermal controller based on Centaur temperature amec_controller_centaur_thermal(); +*/ + +} + +void amec_slv_substate_7_1(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 7.1: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[7][0], + G_sensor_update_pattern[7][1], + G_sensor_update_pattern[7][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(7); +} + +void amec_slv_substate_7_2(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 7.2: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[3][0], + G_sensor_update_pattern[3][1], + G_sensor_update_pattern[3][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(3); +} + +void amec_slv_substate_7_3(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 7.3: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[7][0], + G_sensor_update_pattern[7][1], + G_sensor_update_pattern[7][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(7); +} + +void amec_slv_substate_7_4(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 7.4: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[3][0], + G_sensor_update_pattern[3][1], + G_sensor_update_pattern[3][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(3); +} + +void amec_slv_substate_7_5(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 7.5: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[7][0], + G_sensor_update_pattern[7][1], + G_sensor_update_pattern[7][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(7); +} + +void amec_slv_substate_7_6(void) +{ + /*------------------------------------------------------------------------*/ + /* Local Variables */ + /*------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------*/ + /* Code */ + /*------------------------------------------------------------------------*/ + AMEC_DBG("\tAMEC Slave State 7.6: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[3][0], + G_sensor_update_pattern[3][1], + G_sensor_update_pattern[3][2]); + + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(3); } -void amec_slv_substate_7_1(void){AMEC_DBG("\tAMEC Slave State 7.1\n");} -void amec_slv_substate_7_2(void){AMEC_DBG("\tAMEC Slave State 7.2\n");} -void amec_slv_substate_7_3(void){AMEC_DBG("\tAMEC Slave State 7.3\n");} -void amec_slv_substate_7_4(void){AMEC_DBG("\tAMEC Slave State 7.4\n");} -void amec_slv_substate_7_5(void){AMEC_DBG("\tAMEC Slave State 7.5\n");} -void amec_slv_substate_7_6(void){AMEC_DBG("\tAMEC Slave State 7.6\n");} void amec_slv_substate_7_7(void) { @@ -795,12 +1466,31 @@ void amec_slv_substate_7_7(void) /*------------------------------------------------------------------------*/ /* Code */ /*------------------------------------------------------------------------*/ - AMEC_DBG("\tAMEC Slave State 7.7\n"); + AMEC_DBG("\tAMEC Slave State 7.7: Core Data[%d, %d, %d]\n", + G_sensor_update_pattern[7][0], + G_sensor_update_pattern[7][1], + G_sensor_update_pattern[7][2]); - // Call health monitor to check for processor error temperature conditions - amec_health_check_proc_temp(); + //------------------------------------------------------- + // Update Proc Core sensors (for this substate) + //------------------------------------------------------- + amec_update_proc_core_group(7); + +// @TODO - TEMP: Not Ready yet in Phase 1. +// Call health monitor to check for processor error temperature conditions +// amec_health_check_proc_temp(); } -#endif // #if 0 - @TODO - TEMP: Not Ready yet in Phase 1. + +void amec_update_proc_core_group(uint8_t group) +{ + int i; + for(i =0; i < CORES_PER_STATE; i++) + { + amec_update_proc_core_sensors(G_sensor_update_pattern[group][i]); + } +} + + /*----------------------------------------------------------------------------*/ /* End */ /*----------------------------------------------------------------------------*/ diff --git a/src/occ_405/amec/amec_slave_smh.h b/src/occ_405/amec/amec_slave_smh.h index 884d480..729a2ba 100755 --- a/src/occ_405/amec/amec_slave_smh.h +++ b/src/occ_405/amec/amec_slave_smh.h @@ -72,6 +72,8 @@ extern bool G_apss_lower_pmax_rail; void amec_slv_check_apss_fail(void); void amec_slv_pstate_uplift_check(void); +void amec_update_proc_core_group(uint8_t); + // PRE: slave common tasks void amec_slv_common_tasks_pre(void); // POST: slave common tasks @@ -87,15 +89,35 @@ void amec_slv_state_5(void); void amec_slv_state_6(void); void amec_slv_state_7(void); -// Slave SubState 6 -void amec_slv_substate_6_0(void); -void amec_slv_substate_6_1(void); -void amec_slv_substate_6_2(void); -void amec_slv_substate_6_3(void); -void amec_slv_substate_6_4(void); -void amec_slv_substate_6_5(void); -void amec_slv_substate_6_6(void); -void amec_slv_substate_6_7(void); +// Slave SubState 1 +void amec_slv_substate_1_0(void); +void amec_slv_substate_1_1(void); +void amec_slv_substate_1_2(void); +void amec_slv_substate_1_3(void); +void amec_slv_substate_1_4(void); +void amec_slv_substate_1_5(void); +void amec_slv_substate_1_6(void); +void amec_slv_substate_1_7(void); + +// Slave SubState 3 +void amec_slv_substate_3_0(void); +void amec_slv_substate_3_1(void); +void amec_slv_substate_3_2(void); +void amec_slv_substate_3_3(void); +void amec_slv_substate_3_4(void); +void amec_slv_substate_3_5(void); +void amec_slv_substate_3_6(void); +void amec_slv_substate_3_7(void); + +// Slave SubState 5 +void amec_slv_substate_5_0(void); +void amec_slv_substate_5_1(void); +void amec_slv_substate_5_2(void); +void amec_slv_substate_5_3(void); +void amec_slv_substate_5_4(void); +void amec_slv_substate_5_5(void); +void amec_slv_substate_5_6(void); +void amec_slv_substate_5_7(void); // Slave SubState 7 void amec_slv_substate_7_0(void); diff --git a/src/occ_405/amec/amec_smh.h b/src/occ_405/amec/amec_smh.h index ff03f4f..9588aa7 100755 --- a/src/occ_405/amec/amec_smh.h +++ b/src/occ_405/amec/amec_smh.h @@ -56,12 +56,13 @@ #define AMEC_INITIAL_STATE 0 +// We cycle through all states twice per tick cycle (8 states, 16 ticks) #define AMEC_SMH_STATES_PER_LVL 8 // Number of uS in 1 RTL tick (250=250us) #define AMEC_US_PER_TICK MICS_PER_TICK + // Number of uS in 1 full period of the AMEC State Machine -// We cycle through the 8 states twice per tick cycle (16 ticks), so 8 * 250us = 2ms #define AMEC_US_PER_SMH_PERIOD (AMEC_SMH_STATES_PER_LVL * MICS_PER_TICK) // Number of <AMEC_US_PER_SMH_PERIOD> that happen in 1 second #define AMEC_SMH_PERIODS_IN_1SEC (10000000 / AMEC_US_PER_SMH_PERIOD) diff --git a/src/occ_405/amec/amec_sys.h b/src/occ_405/amec/amec_sys.h index 77cf382..f305669 100755 --- a/src/occ_405/amec/amec_sys.h +++ b/src/occ_405/amec/amec_sys.h @@ -39,7 +39,7 @@ #include <amec_oversub.h> #include <amec_amester.h> #include <amec_pcap.h> - +#include <amec_smh.h> //************************************************************************* // Externs //************************************************************************* @@ -54,8 +54,8 @@ // This is an arbitrary number of FW probes for use internally. #define NUM_AMEC_FW_PROBES 8 -// Number of States in the AMEC State Machine (should always be 8) -#define NUM_AMEC_SMH_STATES 8 +// Number of States in the AMEC State Machine (= AMEC_SMH_STATES_PER_LVL) +#define NUM_AMEC_SMH_STATES AMEC_SMH_STATES_PER_LVL // Number of PORE-GPE Engines #define NUM_GPE_ENGINES 2 diff --git a/src/occ_405/proc/proc_data.c b/src/occ_405/proc/proc_data.c index 68aae42..17fb40d 100755 --- a/src/occ_405/proc/proc_data.c +++ b/src/occ_405/proc/proc_data.c @@ -473,7 +473,7 @@ void print_core_data_sensors(uint8_t core) if( l_core_data != NULL ) { PROC_DBG("-------------------------------"); - PROC_DBG("Core [%x] Sensors Data", core); + PROC_DBG("Core [%d] Sensors Data", core); PROC_DBG("Sensor Core[0] reading: 0x%04X [Valid:%d]", l_core_data->dts.core[0].fields.reading, l_core_data->dts.core[0].fields.valid); PROC_DBG("Sensor Core[1] reading: 0x%04X [Valid:%d]", l_core_data->dts.core[1].fields.reading, l_core_data->dts.core[1].fields.valid); PROC_DBG("Sensor Cache reading: 0x%04X [Valid:%d]", l_core_data->dts.cache.fields.reading, l_core_data->dts.cache.fields.valid); |