summaryrefslogtreecommitdiffstats
path: root/src/occ_405
diff options
context:
space:
mode:
authormbroyles <mbroyles@us.ibm.com>2017-07-12 08:49:44 -0500
committerChristopher J. Cain <cjcain@us.ibm.com>2017-07-25 14:49:58 -0400
commita84955963839b3a035dd339d3ba13e0acb88547a (patch)
treedb8c5891abf3d1ea7b0ea839d8ce7b6c6b75f9cb /src/occ_405
parentca84830b6d1811a78c538f51bde34c269806f00a (diff)
downloadtalos-occ-a84955963839b3a035dd339d3ba13e0acb88547a.tar.gz
talos-occ-a84955963839b3a035dd339d3ba13e0acb88547a.zip
Increase RTL to 500us
Stop waiting for APSS data when detected complete but failed Add history counts for GPEs not idle and APSS collection errors Change-Id: I2bfaf36ee0b736a958fd41c1c2145f537fc883c5 RTC: 172963 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43052 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Andres A. Lugo-Reyes <aalugore@us.ibm.com> Reviewed-by: William A. Bryan <wilbryan@us.ibm.com> Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com>
Diffstat (limited to 'src/occ_405')
-rwxr-xr-xsrc/occ_405/amec/amec_amester.c12
-rw-r--r--src/occ_405/amec/amec_amester.h4
-rwxr-xr-xsrc/occ_405/amec/amec_sensors_core.c58
-rw-r--r--src/occ_405/amec/amec_sensors_fw.c67
-rwxr-xr-xsrc/occ_405/amec/amec_slave_smh.c120
-rwxr-xr-xsrc/occ_405/amec/amec_slave_smh.h12
-rwxr-xr-xsrc/occ_405/amec/amec_tasks.c8
-rw-r--r--src/occ_405/dcom/dcomMasterRx.c4
-rw-r--r--src/occ_405/dcom/dcomMasterTx.c43
-rw-r--r--src/occ_405/dcom/dcomSlaveRx.c8
-rwxr-xr-xsrc/occ_405/dcom/dcomSlaveTx.c4
-rwxr-xr-xsrc/occ_405/errl/errl.h43
-rwxr-xr-xsrc/occ_405/main.c2
-rw-r--r--src/occ_405/occLinkInputFile1
-rw-r--r--src/occ_405/occ_service_codes.h6
-rwxr-xr-xsrc/occ_405/occbuildname.c2
-rw-r--r--src/occ_405/pgpe/pgpe_interface.c12
-rwxr-xr-xsrc/occ_405/pss/apss.c14
-rw-r--r--src/occ_405/pss/apss.h7
-rwxr-xr-xsrc/occ_405/rtls/rtls.c53
-rwxr-xr-xsrc/occ_405/rtls/rtls.h2
-rwxr-xr-xsrc/occ_405/rtls/rtls_tables.c6
-rwxr-xr-xsrc/occ_405/sensor/sensor_info.c300
-rw-r--r--src/occ_405/topfiles.mk1
-rw-r--r--src/occ_405/wof/wof.c71
25 files changed, 466 insertions, 394 deletions
diff --git a/src/occ_405/amec/amec_amester.c b/src/occ_405/amec/amec_amester.c
index 1ac5def..23def82 100755
--- a/src/occ_405/amec/amec_amester.c
+++ b/src/occ_405/amec/amec_amester.c
@@ -58,6 +58,9 @@ extern uint32_t G_present_hw_cores;
//*************************************************************************/
///Maximum size of trace buffer
+// NOTE: Any names in this file using timescale will NOT be kept in sync
+// with RTL tick time changes since this is just for AMESTER, names
+// used outside of the file by the main OCC code will be kept in sync
#define AMEC_TB_2MS_SIZE_BYTES 8192
#define AMEC_TB_250US_SIZE_BYTES 8192
#define AMEC_TB_SIZE_BYTES (AMEC_TB_250US_SIZE_BYTES + AMEC_TB_2MS_SIZE_BYTES)
@@ -85,8 +88,8 @@ DMA_BUFFER(UINT8 g_amec_tb_bytes[AMEC_TB_SIZE_BYTES]);
// Array that maintains a list of all trace buffers built.
// NOTE: Must be in same order as AMEC_TB_ENUM
DMA_BUFFER(amec_tb_t g_amec_tb_list[AMEC_MAX_NUM_TB]) = {
- //trace 2ms
- [AMEC_TB_2MS] = {
+ //trace every 8th tick
+ [AMEC_TB_EVERY_8TH_TICK] = {
"trace2ms", // name
AMEFP(500,0), // freq
(UINT8*)(UINT32)g_amec_tb_bytes, // bytes
@@ -101,8 +104,8 @@ DMA_BUFFER(amec_tb_t g_amec_tb_list[AMEC_MAX_NUM_TB]) = {
{0}, // sensors_num[]
{0} // parms_num[]
},
- // trace 250us
- [AMEC_TB_250US] = {
+ // trace every tick
+ [AMEC_TB_EVERY_TICK] = {
"trace250us", // name
AMEFP(4000,0), // freq
(UINT8*)(UINT32)g_amec_tb_bytes+AMEC_TB_2MS_SIZE_BYTES, // bytes
@@ -1051,7 +1054,6 @@ void amec_tb_record(const AMEC_TB_GUID i_guid)
/* Code */
/*------------------------------------------------------------------------*/
- // Record OCA from last 32 ms
if(G_dcom_slv_inbox_rx.tb_record)
{
// Check for valid tb write entry index
diff --git a/src/occ_405/amec/amec_amester.h b/src/occ_405/amec/amec_amester.h
index c279712..b71782a 100644
--- a/src/occ_405/amec/amec_amester.h
+++ b/src/occ_405/amec/amec_amester.h
@@ -214,8 +214,8 @@ typedef UINT16 AMEC_SENSOR_GUID;
typedef enum
{
- AMEC_TB_2MS, // GUID for 2ms trace
- AMEC_TB_250US, // GUID for 250us trace
+ AMEC_TB_EVERY_8TH_TICK, // GUID for traces every 8th tick
+ AMEC_TB_EVERY_TICK, // GUID for traces every tick
AMEC_TB_NUMBER_OF_TRACES // Number of trace buffers supported
} AMEC_TB_ENUM;
diff --git a/src/occ_405/amec/amec_sensors_core.c b/src/occ_405/amec/amec_sensors_core.c
index 6dd6dfb..df5fb09 100755
--- a/src/occ_405/amec/amec_sensors_core.c
+++ b/src/occ_405/amec/amec_sensors_core.c
@@ -164,7 +164,7 @@ void amec_update_proc_core_sensors(uint8_t i_core)
// Name: amec_calc_dts_sensors
//
// Description: Compute core temperature. This function is called every
-// 4ms/core.
+// CORE_DATA_COLLECTION_US/core.
//
// PreCondition: The core is present.
//
@@ -324,7 +324,7 @@ void amec_calc_dts_sensors(CoreData * i_core_data_ptr, uint8_t i_core)
// Name: amec_calc_freq_and_util_sensors
//
// Description: Compute the frequency and utilization sensors for a given core.
-// This function is called every 4ms/core.
+// This function is called CORE_DATA_COLLECTION_US per core.
//
// Thread: RealTime Loop
//
@@ -359,14 +359,14 @@ void amec_calc_freq_and_util_sensors(CoreData * i_core_data_ptr, uint8_t i_core)
// <amec_formula>
// Result: Calculated Core Frequency
// Sensor: FREQAC0
- // Timescale: 4ms
+ // Timescale: CORE_DATA_COLLECTION_US
// Units: MHz
// Min/Max: 0/6000 (UPPER_LIMIT_PROC_FREQ_MHZ=6000)
- // Formula: cyc_delta(cycles) = (RAW_CYCLES[t=now] - RAW_CYCLES[t=-4ms])
- // time_delta(TOD ticks) = (TOD[t=now] - TOD[t=-4ms])
+ // Formula: cyc_delta(cycles) = (RAW_CYCLES[t=now] - RAW_CYCLES[t=-CORE_DATA_COLLECTION_US])
+ // time_delta(TOD ticks) = (TOD[t=now] - TOD[t=-CORE_DATA_COLLECTION_US])
// frequency(MHz) = (cyc_delta / time_delta) * (2M TOD ticks / 1 second)
// = (2 * cyc_delta) / time_delta
- // NOTE: cyc_delta is the total number of cycles in 4ms time for the core
+ // NOTE: cyc_delta is the total number of cycles in CORE_DATA_COLLECTION_US time for the core
// NOTE: In the HWP where we aquire the TOD count, we shift the counter by 8
// which causes each TOD tick here to equate to 0.5us. This is why we
// are multiplying by 2 in the above equation.
@@ -402,15 +402,15 @@ void amec_calc_freq_and_util_sensors(CoreData * i_core_data_ptr, uint8_t i_core)
// <amec_formula>
// Result: Calculated Core Utilization
// Sensor: UTILC0
- // Timescale: 4ms
+ // Timescale: CORE_DATA_COLLECTION_US
// Units: 0.01 %
// Min/Max: 0/10000 (0/100%)
- // Formula: cyc_delta = (RAW_CYCLES[t=now] - RAW_CYCLES[t=-4ms])
- // run_delta = (RUN_CYCLES[t=now] - RUN_CYCLES[t=-4ms])
+ // Formula: cyc_delta = (RAW_CYCLES[t=now] - RAW_CYCLES[t=-CORE_DATA_COLLECTION_US])
+ // run_delta = (RUN_CYCLES[t=now] - RUN_CYCLES[t=-CORE_DATA_COLLECTION_US])
// UTIL(in %) = run_delta / cyc_delta
//
- // NOTE: cyc_delta is the total number of cycles in 4ms time for the core
- // NOTE: run_delta is the total number of cycles utilized by a specific core in 4ms
+ // NOTE: cyc_delta is the total number of cycles in CORE_DATA_COLLECTION_US time for the core
+ // NOTE: run_delta is the total number of cycles utilized by a specific core in CORE_DATA_COLLECTION_US
// </amec_formula>
// Compute Delta in PC_RUN_CYCLES
@@ -447,15 +447,15 @@ void amec_calc_freq_and_util_sensors(CoreData * i_core_data_ptr, uint8_t i_core)
// <amec_formula>
// Result: Calculated Core Utilization
// Sensor: None
- // Timescale: 4ms
+ // Timescale: CORE_DATA_COLLECTION_US
// Units: 0.01 %
// Min/Max: 0/10000 (0/100%)
- // Formula: cyc_delta = (RAW_CYCLES[t=now] - RAW_CYCLES[t=-4ms])
- // run_delta = (RUN_CYCLES[t=now] - RUN_CYCLES[t=-4ms])
+ // Formula: cyc_delta = (RAW_CYCLES[t=now] - RAW_CYCLES[t=-CORE_DATA_COLLECTION_US])
+ // run_delta = (RUN_CYCLES[t=now] - RUN_CYCLES[t=-CORE_DATA_COLLECTION_US])
// UTIL(in %) = run_delta / cyc_delta
//
- // NOTE: cyc_delta is the total number of cycles run by the core in 4ms
- // NOTE: run_delta is the total number of cycles run by a specific thread in 4ms
+ // NOTE: cyc_delta is the total number of cycles run by the core in CORE_DATA_COLLECTION_US
+ // NOTE: run_delta is the total number of cycles run by a specific thread in CORE_DATA_COLLECTION_US
// </amec_formula>
// Get RAW CYCLES for Thread
@@ -551,7 +551,7 @@ void amec_calc_freq_and_util_sensors(CoreData * i_core_data_ptr, uint8_t i_core)
// <amec_formula>
// Result: Calculated Normalized Average Core Utilization
// Sensor: NUTILC0
- // Timescale: 4ms (3s rolling average)
+ // Timescale: CORE_DATA_COLLECTION_US (3s rolling average)
// Units: 0.01 %
// Min/Max: 0/10000 (0/100%)
// </amec_formula>
@@ -680,11 +680,11 @@ void amec_calc_ips_sensors(CoreData * i_core_data_ptr, uint8_t i_core)
// <amec_formula>
// Result: Calculated Instructions per Cycle
// Sensor: None
- // Timescale: 4ms
+ // Timescale: CORE_DATA_COLLECTION_US
// Units: 0.01 IPC
// Min/Max: ?
- // Formula: ipc_delta = (INST_COMPLETE[t=now] - INST_COMPLETE[t=-4ms])
- // run_cycles = (RUN_CYCLES[t=now] - RUN_CYCLES[t=-4ms])
+ // Formula: ipc_delta = (INST_COMPLETE[t=now] - INST_COMPLETE[t=-CORE_DATA_COLLECTION_US])
+ // run_cycles = (RUN_CYCLES[t=now] - RUN_CYCLES[t=-CORE_DATA_COLLECTION_US])
// 100 = Convert 0.01 IPC
//
// IPC(in 0.01 IPC) = (ipc_delta * 100) / run_cycles
@@ -701,11 +701,11 @@ void amec_calc_ips_sensors(CoreData * i_core_data_ptr, uint8_t i_core)
// <amec_formula>
// Result: Calculated dispatched Instructions per Cycle
// Sensor: None
- // Timescale: 4ms
+ // Timescale: CORE_DATA_COLLECTION_US
// Units: 0.01 DPC
// Min/Max: ?
- // Formula: dpc_delta = (INST_DISPATCH[t=now] - INST_DISPATCH[t=-4ms])
- // run_cycles = (RUN_CYCLES[t=now] - RUN_CYCLES[t=-4ms])
+ // Formula: dpc_delta = (INST_DISPATCH[t=now] - INST_DISPATCH[t=-CORE_DATA_COLLECTION_US])
+ // run_cycles = (RUN_CYCLES[t=now] - RUN_CYCLES[t=-CORE_DATA_COLLECTION_US])
// 100 = Convert 0.01 DPC
//
// DPC(in 0.01DPC) = (dpc_delta * 100) / run_cycles
@@ -721,11 +721,11 @@ void amec_calc_ips_sensors(CoreData * i_core_data_ptr, uint8_t i_core)
// <amec_formula>
// Result: Calculated dispatched Instructions per Second
// Sensor: None
- // Timescale: 4ms
+ // Timescale: CORE_DATA_COLLECTION_US
// Units: 0.2Mips
// Min/Max: ?
- // Formula: dps_delta = (INST_DISPATCH[t=now] - INST_DISPATCH[t=-4ms])
- // 250 = # of 4ms periods in 1 second
+ // Formula: dps_delta = (INST_DISPATCH[t=now] - INST_DISPATCH[t=-CORE_DATA_COLLECTION_US])
+ // 250 = # of CORE_DATA_COLLECTION_US periods in 1 second
// 50,000 = Convert IPS to 0.2MIPS
//
// DPS(in 0.2Mips) = (dps_delta * 250) / 50,000
@@ -741,12 +741,12 @@ void amec_calc_ips_sensors(CoreData * i_core_data_ptr, uint8_t i_core)
// <amec_formula>
// Result: Calculated Instructions per Second
// Sensor: IPSC0
- // Timescale: 4ms
+ // Timescale: CORE_DATA_COLLECTION_US
// Units: 0.2Mips
// Min/Max: ?
// Formula:
- // comp_delta = (INST_COMPLETE[t=now] - INST_COMPLETE[t=-4ms])
- // ticks_delta = (TOD[t=now] - TOD[t=-4ms])
+ // comp_delta = (INST_COMPLETE[t=now] - INST_COMPLETE[t=-CORE_DATA_COLLECTION_US])
+ // ticks_delta = (TOD[t=now] - TOD[t=-CORE_DATA_COLLECTION_US])
// MIPS = comp_delta (insns/interval) * (1 interval per ticks_delta 2mhz ticks) * (2M 2mhz ticks / s) / 1M
// = (2* fin2) / ticks_2mhz
//
diff --git a/src/occ_405/amec/amec_sensors_fw.c b/src/occ_405/amec/amec_sensors_fw.c
index 426df3d..525890a 100644
--- a/src/occ_405/amec/amec_sensors_fw.c
+++ b/src/occ_405/amec/amec_sensors_fw.c
@@ -100,7 +100,7 @@ void amec_update_fw_sensors(void)
int rc2 = 0;
static bool l_first_call = TRUE;
bool l_gpe0_idle, l_gpe1_idle;
- static int L_consec_trace_count = 0;
+ static uint8_t L_consec_trace_count[2] = {0};
// ------------------------------------------------------
// Update OCC Firmware Sensors from last tick
@@ -136,8 +136,9 @@ void amec_update_fw_sensors(void)
if(l_gpe0_idle && l_gpe1_idle)
{
- //reset the consecutive trace count
- L_consec_trace_count = 0;
+ //reset the consecutive trace counts
+ L_consec_trace_count[0] = 0;
+ L_consec_trace_count[1] = 0;
//Both GPE engines finished on time. Now check if they were
//successful too.
@@ -198,7 +199,7 @@ void amec_update_fw_sensors(void)
commitErrl( &l_err );
}
}
- else if(L_consec_trace_count < MAX_CONSEC_TRACE)
+ else
{
gpe_gpenxiramdbg_t xsr_sprg0 = {0};
gpe_gpenxiramedr_t ir_edr = {0};
@@ -209,29 +210,49 @@ void amec_update_fw_sensors(void)
// will tell us what GPE job is currently executing.
if(!l_gpe0_idle)
{
- xsr_sprg0.fields.xsr = in32(GPE_GPE0XIXSR);
- xsr_sprg0.fields.sprg0 = in32(GPE_GPE0XISPRG0);
- ir_edr.fields.edr = in32(GPE_GPE0XIEDR);
- ir_edr.fields.ir = in32(GPE_GPE0XIIR);
- iar_xsr.fields.iar = in32(GPE_GPE0XIIAR);
- TRAC_ERR("GPE0 programs did not complete within one tick. "
- "XSR[0x%08x] IAR[0x%08x] IR[0x%08x] EDR[0x%08x] SPRG0[0x%08X]",
- xsr_sprg0.fields.xsr, iar_xsr.fields.iar,
- ir_edr.fields.ir, ir_edr.fields.edr, xsr_sprg0.fields.sprg0);
+ INCREMENT_ERR_HISTORY(ERRH_GPE0_NOT_IDLE);
+
+ if(L_consec_trace_count[0] < MAX_CONSEC_TRACE)
+ {
+ xsr_sprg0.fields.xsr = in32(GPE_GPE0XIXSR);
+ xsr_sprg0.fields.sprg0 = in32(GPE_GPE0XISPRG0);
+ ir_edr.fields.edr = in32(GPE_GPE0XIEDR);
+ ir_edr.fields.ir = in32(GPE_GPE0XIIR);
+ iar_xsr.fields.iar = in32(GPE_GPE0XIIAR);
+ TRAC_ERR("GPE0 programs did not complete within one tick. "
+ "XSR[0x%08x] IAR[0x%08x] IR[0x%08x] EDR[0x%08x] SPRG0[0x%08X]",
+ xsr_sprg0.fields.xsr, iar_xsr.fields.iar,
+ ir_edr.fields.ir, ir_edr.fields.edr, xsr_sprg0.fields.sprg0);
+ L_consec_trace_count[0]++;
+ }
}
+ else
+ {
+ L_consec_trace_count[0] = 0;
+ }
+
if(!l_gpe1_idle)
{
- xsr_sprg0.fields.xsr = in32(GPE_GPE1XIXSR);
- xsr_sprg0.fields.sprg0 = in32(GPE_GPE1XISPRG0);
- ir_edr.fields.edr = in32(GPE_GPE1XIEDR);
- ir_edr.fields.ir = in32(GPE_GPE1XIIR);
- iar_xsr.fields.iar = in32(GPE_GPE1XIIAR);
- TRAC_ERR("GPE1 programs did not complete within one tick. "
- "XSR[0x%08x] IAR[0x%08x] IR[0x%08x] EDR[0x%08x] SPRG0[0x%08X]",
- xsr_sprg0.fields.xsr, iar_xsr.fields.iar,
- ir_edr.fields.ir, ir_edr.fields.edr, xsr_sprg0.fields.sprg0);
+ INCREMENT_ERR_HISTORY(ERRH_GPE1_NOT_IDLE);
+
+ if(L_consec_trace_count[1] < MAX_CONSEC_TRACE)
+ {
+ xsr_sprg0.fields.xsr = in32(GPE_GPE1XIXSR);
+ xsr_sprg0.fields.sprg0 = in32(GPE_GPE1XISPRG0);
+ ir_edr.fields.edr = in32(GPE_GPE1XIEDR);
+ ir_edr.fields.ir = in32(GPE_GPE1XIIR);
+ iar_xsr.fields.iar = in32(GPE_GPE1XIIAR);
+ TRAC_ERR("GPE1 programs did not complete within one tick. "
+ "XSR[0x%08x] IAR[0x%08x] IR[0x%08x] EDR[0x%08x] SPRG0[0x%08X]",
+ xsr_sprg0.fields.xsr, iar_xsr.fields.iar,
+ ir_edr.fields.ir, ir_edr.fields.edr, xsr_sprg0.fields.sprg0);
+ L_consec_trace_count[1]++;
+ }
+ }
+ else
+ {
+ L_consec_trace_count[1] = 0;
}
- L_consec_trace_count++;
}
}
}
diff --git a/src/occ_405/amec/amec_slave_smh.c b/src/occ_405/amec/amec_slave_smh.c
index cb349f8..9142caa 100755
--- a/src/occ_405/amec/amec_slave_smh.c
+++ b/src/occ_405/amec/amec_slave_smh.c
@@ -83,9 +83,6 @@ smh_state_t G_amec_slv_state = {AMEC_INITIAL_STATE,
AMEC_INITIAL_STATE,
AMEC_INITIAL_STATE};
-// Number of ticks for periodically updating VRM-related data
-#define AMEC_UPDATE_VRM_TICKS 4000
-
// 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.
@@ -108,7 +105,7 @@ const uint8_t G_sensor_update_pattern[AMEC_SMH_STATES_PER_LVL][CORES_PER_STATE]
// --------------------------------------------------------
// AMEC Slave State 1 Substate Table
// --------------------------------------------------------
-// Each function inside this state table runs once every 16ms.
+// Each substate runs every 64th tick time = 64 * MICS_PER_TICK
//
// No Substates
//
@@ -127,26 +124,26 @@ const smh_tbl_t amec_slv_state_1_substate_table[AMEC_SMH_STATES_PER_LVL] =
// --------------------------------------------------------
// AMEC Slave State 2 Substate Table
// --------------------------------------------------------
-// Each function inside this state table runs once every 16ms.
+// Each substate runs every 64th tick time = 64 * MICS_PER_TICK
//
// No Substates
//
const smh_tbl_t amec_slv_state_2_substate_table[AMEC_SMH_STATES_PER_LVL] =
{
- {amec_slv_substate_2_0, NULL}, // Substate 2.0
- {NULL, NULL}, // Substate 2.1 (not used)
- {NULL, NULL}, // Substate 2.2 (not used)
- {NULL, NULL}, // Substate 2.3 (not used)
- {amec_slv_substate_2_4, NULL}, // Substate 2.4
- {NULL, NULL}, // Substate 2.5 (not used)
- {NULL, NULL}, // Substate 2.6 (not used)
- {NULL, NULL}, // Substate 2.7 (not used)
+ {amec_slv_substate_2_even, NULL}, // Substate 2.0
+ {NULL, NULL}, // Substate 2.1 (not used)
+ {amec_slv_substate_2_even, NULL}, // Substate 2.2
+ {NULL, NULL}, // Substate 2.3 (not used)
+ {amec_slv_substate_2_even, NULL}, // Substate 2.4
+ {NULL, NULL}, // Substate 2.5 (not used)
+ {amec_slv_substate_2_even, NULL}, // Substate 2.6
+ {NULL, NULL}, // Substate 2.7 (not used)
};
// --------------------------------------------------------
// AMEC Slave State 3 Substate Table
// --------------------------------------------------------
-// Each function inside this state table runs once every 16ms.
+// Each substate runs every 64th tick time = 64 * MICS_PER_TICK
//
// No Substates
//
@@ -165,7 +162,7 @@ const smh_tbl_t amec_slv_state_3_substate_table[AMEC_SMH_STATES_PER_LVL] =
// --------------------------------------------------------
// AMEC Slave State 5 Substate Table
// --------------------------------------------------------
-// Each function inside this state table runs once every 16ms.
+// Each substate runs every 64th tick time = 64 * MICS_PER_TICK
//
// No Substates
//
@@ -184,26 +181,26 @@ const smh_tbl_t amec_slv_state_5_substate_table[AMEC_SMH_STATES_PER_LVL] =
// --------------------------------------------------------
// AMEC Slave State 6 Substate Table
// --------------------------------------------------------
-// Each function inside this state table runs once every 16ms.
+// Each substate runs every 64th tick time = 64 * MICS_PER_TICK
//
// No Substates
//
const smh_tbl_t amec_slv_state_6_substate_table[AMEC_SMH_STATES_PER_LVL] =
{
- {NULL, NULL}, // Substate 6.0 (not used)
- {amec_slv_substate_6_1, NULL}, // Substate 6.1
- {NULL, NULL}, // Substate 6.2 (not used)
- {amec_slv_substate_6_3, NULL}, // Substate 6.3
- {NULL, NULL}, // Substate 6.4 (not used)
- {amec_slv_substate_6_5, NULL}, // Substate 6.5
- {NULL, NULL}, // Substate 6.6 (not used)
- {amec_slv_substate_6_7, NULL}, // Substate 6.7
+ {amec_slv_substate_6_all, NULL}, // Substate 6.0
+ {amec_slv_substate_6_all, NULL}, // Substate 6.1
+ {amec_slv_substate_6_all, NULL}, // Substate 6.2
+ {amec_slv_substate_6_all, NULL}, // Substate 6.3
+ {amec_slv_substate_6_all, NULL}, // Substate 6.4
+ {amec_slv_substate_6_all, NULL}, // Substate 6.5
+ {amec_slv_substate_6_all, NULL}, // Substate 6.6
+ {amec_slv_substate_6_all, NULL}, // Substate 6.7
};
// --------------------------------------------------------
// AMEC Slave State 7 Substate Table
// --------------------------------------------------------
-// Each function inside this state table runs once every 16ms.
+// Each substate runs every 64th tick time = 64 * MICS_PER_TICK
//
// No Substates
//
@@ -223,7 +220,7 @@ const smh_tbl_t amec_slv_state_7_substate_table[AMEC_SMH_STATES_PER_LVL] =
// --------------------------------------------------------
// Main AMEC Slave State Table
// --------------------------------------------------------
-// Each function inside this state table runs once every 2ms.
+// Each function inside this state table runs once every 8th tick
//
const smh_tbl_t amec_slv_state_table[AMEC_SMH_STATES_PER_LVL] =
{
@@ -447,10 +444,9 @@ void amec_slv_common_tasks_post(void)
// Call the OCC slave's performance check
amec_slv_check_perf();
- // Call the 250us trace recording if it has been configured via Amester.
+ // Call the every tick trace recording if it has been configured via Amester.
// If not configured, this call will return immediately.
- amec_tb_record(AMEC_TB_250US);
-
+ amec_tb_record(AMEC_TB_EVERY_TICK);
}
else
L_active_1tick = TRUE;
@@ -467,8 +463,8 @@ void amec_slv_common_tasks_post(void)
if(G_inband_occ_cmd_state != INBAND_OCC_CMD_NONE)
{
// call inband command handler if in active, char or obs state
- if ( (IS_OCC_STATE_ACTIVE() && L_active_1tick) || IS_OCC_STATE_OBSERVATION() ||
- IS_OCC_STATE_CHARACTERIZATION() )
+ if ( IS_OCC_STATE_ACTIVE() || IS_OCC_STATE_OBSERVATION() ||
+ IS_OCC_STATE_CHARACTERIZATION() )
{
inband_command_handler();
}
@@ -501,9 +497,9 @@ void amec_slv_state_0(void)
sensor_vector_update(AMECSENSOR_PTR(IPS), 1);
sensor_vector_update(AMECSENSOR_PTR(UTIL), 1);
- // Call the trace function for 2ms tracing if it has been configured via
+ // Call the trace function for every 8th tick tracing if it has been configured via
// Amester. If not configured, this call will return immediately.
- amec_tb_record(AMEC_TB_2MS);
+ amec_tb_record(AMEC_TB_EVERY_8TH_TICK);
}
@@ -631,7 +627,7 @@ void amec_slv_state_5(void)
//-------------------------------------------------------
// Update partition sensors for DPS algorithms (for this tick)
//-------------------------------------------------------
-// amec_dps_main();
+ amec_dps_main();
}
@@ -865,27 +861,20 @@ void amec_slv_substate_1_7(void)
// Function Specification
//
-// Name: amec_slv_substate_2_0
-// amec_slv_substate_2_4
+// Name: amec_slv_substate_2_even
//
-// Description: slave substate amec_slv_substate_2_0
-// slave substate amec_slv_substate_2_4
-// other substates of state 2 are not currently used
+// Description: even numbered slave substates
+// gives state 2 substate function to be called every 16th tick
+// Time = 16 * MICS_PER_TICK
+// odd substates of state 2 are not currently used
//
// End Function Specification
-void amec_slv_substate_2_0(void)
-{
- AMEC_DBG("\tAMEC Slave State 2.0\n");
- amec_slv_update_main_mem_sensors();
-}
-
-void amec_slv_substate_2_4(void)
+void amec_slv_substate_2_even(void)
{
- AMEC_DBG("\tAMEC Slave State 2.4\n");
+ AMEC_DBG("\tAMEC Slave State 2 even substate\n");
amec_slv_update_main_mem_sensors();
}
-
// Function Specification
//
// Name: amec_slv_substate_3_0
@@ -1259,39 +1248,16 @@ void amec_slv_substate_5_7(void)
// Function Specification
//
-// Name: amec_slv_substate_6_1
-// amec_slv_substate_6_3
-// amec_slv_substate_6_5
-// amec_slv_substate_6_7
+// Name: amec_slv_substate_6_all
//
-// Description: slave substate amec_slv_substate_6_1
-// slave substate amec_slv_substate_6_3
-// slave substate amec_slv_substate_6_5
-// slave substate amec_slv_substate_6_7
-// other substates of state 6 are not currently used
+// Description: Called for every substate of state 6
+// gives state 6 substate function to be called every 8th tick
+// Time = 8 * MICS_PER_TICK
//
// End Function Specification
-void amec_slv_substate_6_1(void)
-{
- AMEC_DBG("\tAMEC Slave State 6.1\n");
- inband_command_check();
-}
-
-void amec_slv_substate_6_3(void)
-{
- AMEC_DBG("\tAMEC Slave State 6.3\n");
- inband_command_check();
-}
-
-void amec_slv_substate_6_5(void)
-{
- AMEC_DBG("\tAMEC Slave State 6.5\n");
- inband_command_check();
-}
-
-void amec_slv_substate_6_7(void)
+void amec_slv_substate_6_all(void)
{
- AMEC_DBG("\tAMEC Slave State 6.7\n");
+ AMEC_DBG("\tAMEC Slave State 6 substate\n");
inband_command_check();
}
diff --git a/src/occ_405/amec/amec_slave_smh.h b/src/occ_405/amec/amec_slave_smh.h
index 6cca955..f761c72 100755
--- a/src/occ_405/amec/amec_slave_smh.h
+++ b/src/occ_405/amec/amec_slave_smh.h
@@ -100,9 +100,8 @@ void amec_slv_substate_1_5(void);
void amec_slv_substate_1_6(void);
void amec_slv_substate_1_7(void);
-// Slave SubState 2 (6 SubStates unused)
-void amec_slv_substate_2_0(void);
-void amec_slv_substate_2_4(void);
+// Slave SubState 2 (odd SubStates currently unused)
+void amec_slv_substate_2_even(void);
// Slave SubState 3
void amec_slv_substate_3_0(void);
@@ -124,11 +123,8 @@ void amec_slv_substate_5_5(void);
void amec_slv_substate_5_6(void);
void amec_slv_substate_5_7(void);
-// Slave SubState 6 (4 SubStates unused) check for inband cmd every 4ms
-void amec_slv_substate_6_1(void);
-void amec_slv_substate_6_3(void);
-void amec_slv_substate_6_5(void);
-void amec_slv_substate_6_7(void);
+// Slave SubState 6 called every SubState - check for inband cmd every 4ms
+void amec_slv_substate_6_all(void);
// Slave SubState 7
void amec_slv_substate_7_0(void);
diff --git a/src/occ_405/amec/amec_tasks.c b/src/occ_405/amec/amec_tasks.c
index 0fe6041..452532e 100755
--- a/src/occ_405/amec/amec_tasks.c
+++ b/src/occ_405/amec/amec_tasks.c
@@ -76,10 +76,10 @@ uint8_t _rotl8(uint8_t val, uint8_t shift)
//
// Description: Generic State Machine that allows for 8 states per level,
// with 3 levels.
-// If State Machine gets called/incremented every 250us,
-// - Each function entry in Level 0 table runs every 2ms,
-// - Each function entry in Level 1 table will run every 16ms,
-// - Each function entry in Level 2 table will run every 128ms.
+// If State Machine gets called/incremented every 500us,
+// - Each function entry in Level 0 table runs every 4ms,
+// - Each function entry in Level 1 table will run every 32ms,
+// - Each function entry in Level 2 table will run every 256ms.
//
// Anything longer than that will need to be taken care of
// inside of the states themselves.
diff --git a/src/occ_405/dcom/dcomMasterRx.c b/src/occ_405/dcom/dcomMasterRx.c
index 2e26986..faa4dca 100644
--- a/src/occ_405/dcom/dcomMasterRx.c
+++ b/src/occ_405/dcom/dcomMasterRx.c
@@ -298,7 +298,7 @@ void task_dcom_rx_slv_outboxes( task_t *i_self)
else
{
L_bce_not_ready_count++;
- INCREMENT_ERR_HISTORY(ERR_DCOM_RX_SLV_OUTBOX);
+ INCREMENT_ERR_HISTORY(ERRH_DCOM_RX_SLV_OUTBOX);
}
}
else
@@ -383,7 +383,7 @@ uint32_t dcom_rx_slv_outbox_doorbell( void )
if (l_pbarc != 0)
{
- INCREMENT_ERR_HISTORY(ERR_DCOM_MASTER_PBAX_READ_FAIL);
+ INCREMENT_ERR_HISTORY(ERRH_DCOM_MASTER_PBAX_READ_FAIL);
TRAC_ERR("Master PBAX Read Failure in receiving unicast slave doorbells - RC[%08X]", l_pbarc);
diff --git a/src/occ_405/dcom/dcomMasterTx.c b/src/occ_405/dcom/dcomMasterTx.c
index e1a46bc..a65dc31 100644
--- a/src/occ_405/dcom/dcomMasterTx.c
+++ b/src/occ_405/dcom/dcomMasterTx.c
@@ -89,7 +89,7 @@ uint32_t dcom_build_slv_inbox(void)
// interrupt context.
if(G_pbax_rc)
{
- INCREMENT_ERR_HISTORY(ERR_DCOM_MASTER_PBAX_SEND_FAIL);
+ INCREMENT_ERR_HISTORY(ERRH_DCOM_MASTER_PBAX_SEND_FAIL);
if (!L_traced)
{
@@ -232,6 +232,7 @@ void task_dcom_tx_slv_inbox( task_t *i_self)
uint32_t l_orc_ext = OCC_NO_EXTENDED_RC;
uint64_t l_start = ssx_timebase_get();
bool l_pwr_meas = FALSE;
+ bool l_pwr_meas_complete_invalid = FALSE;
bool l_request_reset = FALSE;
bool l_ssx_failure = FALSE;
// Use a static local bool to track whether the BCE request used
@@ -250,8 +251,9 @@ void task_dcom_tx_slv_inbox( task_t *i_self)
}
l_pwr_meas = G_ApssPwrMeasCompleted;
+ l_pwr_meas_complete_invalid = G_ApssPwrMeasDoneInvalid;
- // Did APSS power complete?
+ // Did APSS power complete AND valid?
if( l_pwr_meas == TRUE )
{
#if !defined(DEBUG_APSS_SEQ) && defined(DCOM_DEBUG)
@@ -405,13 +407,42 @@ void task_dcom_tx_slv_inbox( task_t *i_self)
else
{
L_bce_not_ready_count++;
- INCREMENT_ERR_HISTORY(ERR_DCOM_TX_SLV_INBOX);
+ INCREMENT_ERR_HISTORY(ERRH_DCOM_TX_SLV_INBOX);
}
// Moved the break statement here in case we decide not to
// schedule the BCE request.
break;
}
+ // Is APSS power collection done but failed? Stop waiting since no valid data will be coming
+ else if(l_pwr_meas_complete_invalid == TRUE)
+ {
+ //Failure occurred, step up the FAIL_COUNT
+ APSS_FAIL();
+
+ if (G_apss_fail_updown_count >= APSS_DATA_FAIL_MAX)
+ {
+ if (FALSE == isSafeStateRequested())
+ {
+ /* @
+ * @errortype
+ * @moduleid DCOM_MID_TASK_TX_SLV_INBOX
+ * @reasoncode APSS_HARD_FAILURE
+ * @userdata1 N/A
+ * @userdata4 ERC_APSS_NO_VALID_DATA
+ * @devdesc No valid APSS data (hard time-out)
+ */
+ TRAC_ERR("No valid apss data: #complete errors = %i #invalid = %i",
+ G_error_history[ERRH_APSS_COMPLETE_ERROR],
+ G_error_history[ERRH_INVALID_APSS_DATA]);
+ l_orc = APSS_HARD_FAILURE;
+ l_orc_ext = ERC_APSS_NO_VALID_DATA;
+ l_request_reset = TRUE;
+ }
+ }
+
+ break;
+ }
else
{
// check time and break out if we reached limit
@@ -421,7 +452,7 @@ void task_dcom_tx_slv_inbox( task_t *i_self)
}
else
{
- INCREMENT_ERR_HISTORY(ERR_DCOM_APSS_COMPLETE_TIMEOUT);
+ INCREMENT_ERR_HISTORY(ERRH_APSS_COMPLETE_TIMEOUT);
//Failure occurred, step up the FAIL_COUNT
APSS_FAIL();
@@ -430,9 +461,6 @@ void task_dcom_tx_slv_inbox( task_t *i_self)
{
if (FALSE == isSafeStateRequested())
{
- TRAC_ERR("task_dcom_tx_slv_inbox: APSS data collection failure exceeded threshold. fail_count=%i, threshold:%i",
- G_apss_fail_updown_count, APSS_DATA_FAIL_MAX);
-
/* @
* @errortype
* @moduleid DCOM_MID_TASK_TX_SLV_INBOX
@@ -450,6 +478,7 @@ void task_dcom_tx_slv_inbox( task_t *i_self)
l_request_reset = TRUE;
}
}
+
break;
}
}
diff --git a/src/occ_405/dcom/dcomSlaveRx.c b/src/occ_405/dcom/dcomSlaveRx.c
index a4b6e2d..7b103ab 100644
--- a/src/occ_405/dcom/dcomSlaveRx.c
+++ b/src/occ_405/dcom/dcomSlaveRx.c
@@ -278,7 +278,7 @@ void task_dcom_rx_slv_inbox( task_t *i_self)
else
{
L_bce_not_ready_count++;
- INCREMENT_ERR_HISTORY(ERR_DCOM_RX_SLV_INBOX);
+ INCREMENT_ERR_HISTORY(ERRH_DCOM_RX_SLV_INBOX);
}
}
else
@@ -372,7 +372,7 @@ uint32_t dcom_rx_slv_inbox_doorbell( void )
// We got an error reading from the PBAX, return to caller
if ( l_pbarc != 0 )
{
- INCREMENT_ERR_HISTORY(ERR_DCOM_SLAVE_PBAX_READ_FAIL);
+ INCREMENT_ERR_HISTORY(ERRH_DCOM_SLAVE_PBAX_READ_FAIL);
G_dcomTime.slave.doorbellErrorFlags |= DCOM_DOORBELL_HW_ERR;
// Failure occurred
TRAC_ERR("Slave PBAX Read Failure in receiving multicast doorbell from master - RC[%08X]", l_pbarc);
@@ -515,8 +515,8 @@ void task_dcom_wait_for_master( task_t *i_self)
if (L_no_master_doorbell_cnt == APSS_DATA_FAIL_PMAX_RAIL)
{
- // Now only trace every 50th occurrence
- L_trace_every_count = 50;
+ // Now only trace every 1000th occurrence
+ L_trace_every_count = 1000;
// Inform AMEC that Pmax_rail needs to change
G_apss_lower_pmax_rail = TRUE;
diff --git a/src/occ_405/dcom/dcomSlaveTx.c b/src/occ_405/dcom/dcomSlaveTx.c
index 33ef166..837608d 100755
--- a/src/occ_405/dcom/dcomSlaveTx.c
+++ b/src/occ_405/dcom/dcomSlaveTx.c
@@ -163,7 +163,7 @@ void task_dcom_tx_slv_outbox( task_t *i_self)
if(G_slave_pbax_rc)
{
TRAC_ERR("task_dcom_tx_slv_outbox: PBAX Send Failure in transimitting doorbell - RC[%08X]", G_slave_pbax_rc);
- INCREMENT_ERR_HISTORY(ERR_DCOM_SLAVE_PBAX_SEND_FAIL);
+ INCREMENT_ERR_HISTORY(ERRH_DCOM_SLAVE_PBAX_SEND_FAIL);
}
// Build/setup outbox
@@ -304,7 +304,7 @@ void task_dcom_tx_slv_outbox( task_t *i_self)
else
{
L_bce_not_ready_count++;
- INCREMENT_ERR_HISTORY(ERR_DCOM_TX_SLV_OUTBOX);
+ INCREMENT_ERR_HISTORY(ERRH_DCOM_TX_SLV_OUTBOX);
}
} while (0);
diff --git a/src/occ_405/errl/errl.h b/src/occ_405/errl/errl.h
index 5518369..cd3c0ad 100755
--- a/src/occ_405/errl/errl.h
+++ b/src/occ_405/errl/errl.h
@@ -270,26 +270,29 @@ extern errlHndl_t G_occErrSlots[ERRL_MAX_SLOTS];
#define ERR_HISTORY_SIZE 32
extern uint8_t G_error_history[ERR_HISTORY_SIZE];
typedef enum {
- ERR_AVSBUS_VDD_CURRENT = 1,
- ERR_AVSBUS_VDD_VOLTAGE = 2,
- ERR_AVSBUS_VDN_CURRENT = 3,
- ERR_AVSBUS_VDN_VOLTAGE = 4,
- ERR_DIMM_I2C_PORT0 = 5,
- ERR_DIMM_I2C_PORT1 = 6,
- ERR_AVSBUS_VDD_OVER_TEMPERATURE = 7,
- ERR_AVSBUS_VDN_OVER_TEMPERATURE = 8,
- ERR_AVSBUS_VDD_OVER_CURRENT = 9,
- ERR_AVSBUS_VDN_OVER_CURRENT = 10,
- ERR_INVALID_APSS_DATA = 11,
- ERR_DCOM_APSS_COMPLETE_TIMEOUT = 12,
- ERR_DCOM_TX_SLV_INBOX = 13,
- ERR_DCOM_RX_SLV_INBOX = 14,
- ERR_DCOM_TX_SLV_OUTBOX = 15,
- ERR_DCOM_RX_SLV_OUTBOX = 16,
- ERR_DCOM_MASTER_PBAX_SEND_FAIL = 17,
- ERR_DCOM_SLAVE_PBAX_SEND_FAIL = 18,
- ERR_DCOM_MASTER_PBAX_READ_FAIL = 19,
- ERR_DCOM_SLAVE_PBAX_READ_FAIL = 20,
+ ERR_AVSBUS_VDD_CURRENT = 0x01,
+ ERR_AVSBUS_VDD_VOLTAGE = 0x02,
+ ERR_AVSBUS_VDN_CURRENT = 0x03,
+ ERR_AVSBUS_VDN_VOLTAGE = 0x04,
+ ERR_DIMM_I2C_PORT0 = 0x05,
+ ERR_DIMM_I2C_PORT1 = 0x06,
+ ERR_AVSBUS_VDD_OVER_TEMPERATURE = 0x07,
+ ERR_AVSBUS_VDN_OVER_TEMPERATURE = 0x08,
+ ERR_AVSBUS_VDD_OVER_CURRENT = 0x09,
+ ERR_AVSBUS_VDN_OVER_CURRENT = 0x0A,
+ ERRH_INVALID_APSS_DATA = 0x0B,
+ ERRH_APSS_COMPLETE_ERROR = 0x0C,
+ ERRH_APSS_COMPLETE_TIMEOUT = 0x0D,
+ ERRH_DCOM_TX_SLV_INBOX = 0x0E,
+ ERRH_DCOM_RX_SLV_INBOX = 0x0F,
+ ERRH_DCOM_TX_SLV_OUTBOX = 0x10,
+ ERRH_DCOM_RX_SLV_OUTBOX = 0x11,
+ ERRH_DCOM_MASTER_PBAX_SEND_FAIL = 0x12,
+ ERRH_DCOM_SLAVE_PBAX_SEND_FAIL = 0x13,
+ ERRH_DCOM_MASTER_PBAX_READ_FAIL = 0x14,
+ ERRH_DCOM_SLAVE_PBAX_READ_FAIL = 0x15,
+ ERRH_GPE0_NOT_IDLE = 0x16,
+ ERRH_GPE1_NOT_IDLE = 0x17,
} ERR_HISTORY_INDEX;
#define INCREMENT_ERR_HISTORY(errorIndex) { \
if ((errorIndex < ERR_HISTORY_SIZE) && (G_error_history[errorIndex] < 255)) { \
diff --git a/src/occ_405/main.c b/src/occ_405/main.c
index da0819d..307db17 100755
--- a/src/occ_405/main.c
+++ b/src/occ_405/main.c
@@ -178,7 +178,7 @@ void check_runtime_environment(void)
{
// slow down RTL for Simics
G_mics_per_tick = SIMICS_MICS_PER_TICK;
- G_dcom_tx_apss_wait_time = SIMICS_MICS_PER_TICK * 6 / 10;
+ G_dcom_tx_apss_wait_time = SIMICS_MICS_PER_TICK * 4 / 10;
// Same comment as above about lower 32-bits. Bit 62 can be toggled
// on or off (in Simics) to indicate for which APSS specification the
diff --git a/src/occ_405/occLinkInputFile b/src/occ_405/occLinkInputFile
index 52f176e..9f3725d 100644
--- a/src/occ_405/occLinkInputFile
+++ b/src/occ_405/occLinkInputFile
@@ -1,6 +1,7 @@
INPUT ( amec_amester.o
amec_controller.o
amec_data.o
+ amec_dps.o
amec_freq.o
amec_health.o
amec_init.o
diff --git a/src/occ_405/occ_service_codes.h b/src/occ_405/occ_service_codes.h
index efdb838..6fb0178 100644
--- a/src/occ_405/occ_service_codes.h
+++ b/src/occ_405/occ_service_codes.h
@@ -139,9 +139,7 @@ enum occReasonCode
// OCC errors. (H)TMGT will be looking for 0xEy ERRL_RC in cmd response RC
// and create an OCC error log with OCC component ID and 0xEy RC if found
- /// Error copying sensors to main memory
- SENSOR_MAIN_MEM_ERROR = 0xF0,
-
+ SENSOR_MAIN_MEM_ERROR = 0xF0, // Error copying sensors to main memory
INBAND_CMD_ERROR = 0xF1,
OPAL_TABLE_UPDATE_ERROR = 0xF2,
@@ -192,6 +190,7 @@ enum occExtReasonCode
ERC_APSS_GPIO_DUPLICATED_FAILURE = 0x0025,
ERC_APSS_ADC_OUT_OF_RANGE_FAILURE = 0x0026,
ERC_APSS_ADC_DUPLICATED_FAILURE = 0x0027,
+ ERC_APSS_NO_VALID_DATA = 0x0028,
ERC_AMEC_PCAPS_MISMATCH_FAILURE = 0x002A,
ERC_AMEC_UNDER_PCAP_FAILURE = 0x002B,
@@ -283,6 +282,7 @@ enum occExtReasonCode
ERC_STATE_FROM_STB_TO_OBS_FAILURE = 0x0129,
ERC_STATE_HEARTBEAT_CFG_FAILURE = 0x0180,
+ ERC_RTL_TIME_EXCEEDED = 0x0190,
};
// Error log Module Ids
diff --git a/src/occ_405/occbuildname.c b/src/occ_405/occbuildname.c
index 2681683..752d939 100755
--- a/src/occ_405/occbuildname.c
+++ b/src/occ_405/occbuildname.c
@@ -34,6 +34,6 @@ volatile const char G_occ_buildname[16] __attribute__((section(".buildname"))) =
#else
-volatile const char G_occ_buildname[16] __attribute__((section(".buildname"))) = /*<BuildName>*/ "op_occ_170721a\0" /*</BuildName>*/ ;
+volatile const char G_occ_buildname[16] __attribute__((section(".buildname"))) = /*<BuildName>*/ "op_occ_170724a\0" /*</BuildName>*/ ;
#endif
diff --git a/src/occ_405/pgpe/pgpe_interface.c b/src/occ_405/pgpe/pgpe_interface.c
index 26abab1..a276ccc 100644
--- a/src/occ_405/pgpe/pgpe_interface.c
+++ b/src/occ_405/pgpe/pgpe_interface.c
@@ -757,6 +757,7 @@ int pgpe_start_suspend(uint8_t action, PMCR_OWNER owner)
{
int rc = 0; // return code
errlHndl_t err = NULL; // Error handler
+ pstateStatus l_current_pstate_status = G_proc_pstate_status;
// set the IPC parameters
G_start_suspend_parms.action = action;
@@ -764,6 +765,9 @@ int pgpe_start_suspend(uint8_t action, PMCR_OWNER owner)
if (!G_simics_environment)
{
+ // set the G_proc_pstate_status to indicate transition
+ G_proc_pstate_status = PSTATES_IN_TRANSITION;
+
if (action == PGPE_ACTION_PSTATE_START)
{
TRAC_IMP("pgpe_start_suspend: scheduling enable of pstates (owner=0x%02X)", owner);
@@ -779,6 +783,9 @@ int pgpe_start_suspend(uint8_t action, PMCR_OWNER owner)
// couldn't schedule the IPC task?
if(rc != 0)
{
+ // restore pState status since it isn't going to change
+ G_proc_pstate_status = l_current_pstate_status;
+
//Error in scheduling pgpe start suspend task
TRAC_ERR("pgpe_start_suspend: Failed to schedule pgpe start_suspend task rc=%x",
rc);
@@ -804,11 +811,6 @@ int pgpe_start_suspend(uint8_t action, PMCR_OWNER owner)
rc = GPE_REQUEST_SCHEDULE_FAILURE;
REQUEST_RESET(err); //This will add a firmware callout for us
}
- // successfully scheduled, set the G_proc_pstate_status to indicate transition
- else
- {
- G_proc_pstate_status = PSTATES_IN_TRANSITION;
- }
if (G_simics_environment)
{
diff --git a/src/occ_405/pss/apss.c b/src/occ_405/pss/apss.c
index a4c00e0..6e50313 100755
--- a/src/occ_405/pss/apss.c
+++ b/src/occ_405/pss/apss.c
@@ -79,9 +79,12 @@ uint32_t G_sequence_complete = 0;
volatile uint32_t G_savedCompleteSeq = 0;
#endif
-// Used to tell slave inbox that pwr meas is complete
+// Used to tell slave inbox that pwr meas is complete AND valid
volatile bool G_ApssPwrMeasCompleted = FALSE;
+// Used to tell slave inbox that pwr meas is complete but is invalid
+volatile bool G_ApssPwrMeasDoneInvalid = FALSE;
+
// Function Specification
//
// Name: dumpHexString
@@ -141,8 +144,6 @@ void dumpHexString(const void *i_data, const unsigned int len, const char *strin
// End Function Specification
void do_apss_recovery(void)
{
- INCREMENT_ERR_HISTORY(ERR_INVALID_APSS_DATA);
-
if (!G_apss_data_traced)
{
INTR_TRAC_ERR("detected invalid power data[%08x%08x]",
@@ -373,6 +374,7 @@ void task_apss_start_pwr_meas(struct task *i_self)
APSS_DBG("GPE_start_pwr_meas_read finished w/rc=0x%08X", G_gpe_start_pwr_meas_read_args.error.rc);
APSS_DBG_HEXDUMP(&G_gpe_start_pwr_meas_read_args, sizeof(G_gpe_start_pwr_meas_read_args), "G_gpe_start_pwr_meas_read_args");
G_ApssPwrMeasCompleted = FALSE; // Will complete when 3rd task is complete.
+ G_ApssPwrMeasDoneInvalid = FALSE; // validity checked when 3rd task completes
G_gpe_apss_time_start = ssx_timebase_get();
@@ -557,6 +559,9 @@ void reformat_meas_data()
// Make sure complete was successful
if (G_gpe_complete_pwr_meas_read_args.error.error)
{
+ INCREMENT_ERR_HISTORY(ERRH_APSS_COMPLETE_ERROR);
+ // Indicate that collection completed but is invalid so tx_slv_inbox will stop waiting for valid data
+ G_ApssPwrMeasDoneInvalid = TRUE;
break;
}
@@ -565,6 +570,9 @@ void reformat_meas_data()
!(G_gpe_continue_pwr_meas_read_args.meas_data[0] & ~APSS_ADC_SEQ_MASK))
{
// Recovery will begin on the next tick
+ INCREMENT_ERR_HISTORY(ERRH_INVALID_APSS_DATA);
+ // Indicate that collection completed but is invalid so tx_slv_inbox will stop waiting for valid data
+ G_ApssPwrMeasDoneInvalid = TRUE;
G_apss_recovery_requested = TRUE;
break;
}
diff --git a/src/occ_405/pss/apss.h b/src/occ_405/pss/apss.h
index 6808f48..ba0b775 100644
--- a/src/occ_405/pss/apss.h
+++ b/src/occ_405/pss/apss.h
@@ -67,12 +67,15 @@ struct apssPwrMeasStruct
} __attribute__ ((__packed__));
typedef struct apssPwrMeasStruct apssPwrMeasStruct_t;
-// G_apss_pwr_meas: power, temp and GPIO readings that OCC gathers from APSS every tick
+// G_apss_pwr_meas: power and GPIO readings that OCC gathers from APSS every tick
extern apssPwrMeasStruct_t G_apss_pwr_meas;
-// Used to tell slave inbox that pwr meas is complete
+// Used to tell slave inbox that pwr meas is complete AND valid
extern volatile bool G_ApssPwrMeasCompleted;
+// Used to tell slave inbox that pwr meas is complete but NOT valid
+extern volatile bool G_ApssPwrMeasDoneInvalid;
+
extern initGpioArgs_t G_gpe_apss_initialize_gpio_args;
extern setApssModeArgs_t G_gpe_apss_set_mode_args;
diff --git a/src/occ_405/rtls/rtls.c b/src/occ_405/rtls/rtls.c
index 6e6c02b..c2168d3 100755
--- a/src/occ_405/rtls/rtls.c
+++ b/src/occ_405/rtls/rtls.c
@@ -32,6 +32,7 @@
#include <errl.h> // Error logging
#include "amec_external.h"
#include <trac.h> // Traces
+#include <sensor.h>
//Macro creates a 'bridge' handler that converts the initial fast-mode to full
//mode interrupt handler
@@ -54,7 +55,7 @@ uint32_t G_current_tick = 0xFFFFFFFF;
uint32_t G_mics_per_tick = HW_MICS_PER_TICK;
// Number of micro-seconds to wait for APSS data collection to complete
-uint32_t G_dcom_tx_apss_wait_time = HW_MICS_PER_TICK * 0.6;
+uint32_t G_dcom_tx_apss_wait_time = HW_MICS_PER_TICK * 5 / 10;
// The durations measured within the current tick
fw_timing_t G_fw_timing;
@@ -288,8 +289,8 @@ void rtl_do_tick( void *private, SsxIrqId irq, int priority )
task_t *l_task_ptr = NULL; // Pointer to the currently executing task
errlHndl_t l_err = NULL; // Error handler
const trace_descriptor_array_t* l_trace = NULL; // Temporary trace descriptor (replace this when tracing is implemented)
- bool l_bad_id_reported = FALSE; // Has an invalid task ID already been reported?
-
+ static bool L_bad_id_reported = FALSE; // Has an invalid task ID already been reported?
+ static bool L_error_logged = FALSE; // has an error for exceeding time time been logged?
SsxMachineContext ctx;
// Enter the protected context
@@ -312,7 +313,8 @@ void rtl_do_tick( void *private, SsxIrqId irq, int priority )
// Index into the tick table to get a pointer to the tick sequence for the current tick.
- l_taskid_ptr = G_tick_table[ (MAX_NUM_TICKS - 1) & CURRENT_TICK ];
+ uint8_t l_tick = (MAX_NUM_TICKS - 1) & CURRENT_TICK;
+ l_taskid_ptr = G_tick_table[l_tick];
do
{
@@ -325,10 +327,10 @@ void rtl_do_tick( void *private, SsxIrqId irq, int priority )
if ( *l_taskid_ptr > TASK_END )
{
// Invalid task ID
- if ( ! l_bad_id_reported )
+ if ( ! L_bad_id_reported )
{
// First bad task ID we've seen this tick. Log an unrecoverable error.
- RTLS_DBG("rtl_do_tick() - Invalid task ID"
+ TRAC_ERR("rtl_do_tick() - Invalid task ID"
"taskId = 0x%x", *l_taskid_ptr );
/*
@@ -360,7 +362,7 @@ void rtl_do_tick( void *private, SsxIrqId irq, int priority )
commitErrl( &l_err );
// Set our "bad ID reported" flag
- l_bad_id_reported = TRUE;
+ L_bad_id_reported = TRUE;
}
// Under all conditions, move on to the next task ID.
@@ -384,6 +386,43 @@ void rtl_do_tick( void *private, SsxIrqId irq, int priority )
// Save timing of RTL tick
G_fw_timing.rtl_dur = DURATION_IN_US_UNTIL_NOW_FROM(l_start);
+ if(G_fw_timing.rtl_dur > MICS_PER_TICK)
+ {
+ // exceeded tick time!!!
+ TRAC_ERR("rtl_do_tick: tick seq %d took %dus AMEC slv/mst tasks took total of %dus",
+ l_tick, G_fw_timing.rtl_dur, G_fw_timing.ameint_dur);
+ sensor_t *l_gpe0_sensor = getSensorByGsid(GPEtickdur0);
+ sensor_t *l_gpe1_sensor = getSensorByGsid(GPEtickdur1);
+
+ TRAC_ERR("GPE TIMES: GPE0 = %dus, max %dus GPE1 = %dus, max %dus",
+ l_gpe0_sensor->sample, l_gpe0_sensor->sample_max, l_gpe1_sensor->sample, l_gpe1_sensor->sample_max);
+
+ if(!L_error_logged)
+ {
+ /*
+ * @errortype
+ * @moduleid RTLS_DO_TICK_MOD
+ * @reasoncode INTERNAL_FAILURE
+ * @userdata1 Tick time in us
+ * @userdata4 ERC_RTL_TIME_EXCEEDED
+ * @devdesc Exceeded RTL tick time
+ */
+ l_err = createErrl(
+ RTLS_DO_TICK_MOD, //ModId
+ INTERNAL_FAILURE, //Reasoncode
+ ERC_RTL_TIME_EXCEEDED, //Extended reasoncode
+ ERRL_SEV_PREDICTIVE, //Severity
+ l_trace, //Trace Buf
+ DEFAULT_TRACE_SIZE, //Trace Size
+ G_fw_timing.rtl_dur, //Userdata1
+ 0 //Userdata2
+ );
+
+ // Commit error log
+ commitErrl( &l_err );
+ L_error_logged = TRUE;
+ }
+ }
RTLS_DBG("RTL Tick Duration: %d us\n",(int)G_fw_timing.rtl_dur);
diff --git a/src/occ_405/rtls/rtls.h b/src/occ_405/rtls/rtls.h
index ad2b5fa..6e248ec 100755
--- a/src/occ_405/rtls/rtls.h
+++ b/src/occ_405/rtls/rtls.h
@@ -111,7 +111,7 @@ typedef struct
#define MICS_PER_TICK G_mics_per_tick // Number of micro-seconds per tick
#define MAX_NUM_TICKS 16 // Number of entries in the global tick table (power of 2)
// MICS_PER_TICK must be lower than 62ms to guarantee the tick table completes in < 1s (for health monitor)
-#define HW_MICS_PER_TICK 250
+#define HW_MICS_PER_TICK 500
#define SIMICS_MICS_PER_TICK 20000 // slow down RTL to 20ms for Simics
#define DCOM_TX_APSS_WAIT_TIME G_dcom_tx_apss_wait_time
diff --git a/src/occ_405/rtls/rtls_tables.c b/src/occ_405/rtls/rtls_tables.c
index b25eea6..aca6b88 100755
--- a/src/occ_405/rtls/rtls_tables.c
+++ b/src/occ_405/rtls/rtls_tables.c
@@ -155,10 +155,10 @@ const uint8_t G_tick1_seq[] = {
TASK_ID_MEMORY_CONTROL,
TASK_ID_CORE_DATA_CONTROL,
TASK_ID_24X7,
+ TASK_ID_POKE_WDT,
TASK_ID_DCOM_WAIT_4_MSTR,
TASK_ID_DCOM_RX_INBX,
TASK_ID_DCOM_RX_OUTBX,
- TASK_ID_POKE_WDT,
TASK_ID_DCOM_TX_OUTBX,
TASK_ID_DCOM_TX_INBX,
TASK_ID_AMEC_SLAVE,
@@ -239,6 +239,7 @@ const uint8_t G_tick5_seq[] = {
TASK_ID_MEMORY_CONTROL,
TASK_ID_CORE_DATA_CONTROL,
TASK_ID_24X7,
+ TASK_ID_POKE_WDT,
TASK_ID_DCOM_WAIT_4_MSTR,
TASK_ID_DCOM_RX_INBX,
TASK_ID_DCOM_RX_OUTBX,
@@ -321,10 +322,10 @@ const uint8_t G_tick9_seq[] = {
TASK_ID_MEMORY_CONTROL,
TASK_ID_CORE_DATA_CONTROL,
TASK_ID_24X7,
+ TASK_ID_POKE_WDT,
TASK_ID_DCOM_WAIT_4_MSTR,
TASK_ID_DCOM_RX_INBX,
TASK_ID_DCOM_RX_OUTBX,
- TASK_ID_POKE_WDT,
TASK_ID_DCOM_TX_OUTBX,
TASK_ID_DCOM_TX_INBX,
TASK_ID_AMEC_SLAVE,
@@ -404,6 +405,7 @@ const uint8_t G_tick13_seq[] = {
TASK_ID_MEMORY_CONTROL,
TASK_ID_CORE_DATA_CONTROL,
TASK_ID_24X7,
+ TASK_ID_POKE_WDT,
TASK_ID_DCOM_WAIT_4_MSTR,
TASK_ID_DCOM_RX_INBX,
TASK_ID_DCOM_RX_OUTBX,
diff --git a/src/occ_405/sensor/sensor_info.c b/src/occ_405/sensor/sensor_info.c
index 91e4557..93fab2e 100755
--- a/src/occ_405/sensor/sensor_info.c
+++ b/src/occ_405/sensor/sensor_info.c
@@ -26,16 +26,28 @@
#include <occ_common.h> // STATIC_ASSERT macro
#include <sensor.h> // For Sensor defines
-#define AMEEFP_250US_IN_HZ AMEFP(4,3) // 4000 Hz
-#define AMEEFP_500US_IN_HZ AMEFP(2,3) // 2000 Hz
-#define AMEEFP_1MS_IN_HZ AMEFP(1,3) // 1000 Hz
-#define AMEEFP_2MS_IN_HZ AMEFP(5,2) // 500 Hz
-#define AMEEFP_4MS_IN_HZ AMEFP(25,1) // 250 Hz
-#define AMEEFP_16MS_IN_HZ AMEFP(625,-1) // 62.5 Hz
-#define AMEEFP_32MS_IN_HZ AMEFP(3125,-2) // 31.25 Hz
-#define AMEEFP_3S_IN_HZ AMEFP(333,-3) // 0.333 Hz
+#define AMEEFP_250US_IN_HZ AMEFP(4,3) // 4000 Hz
+#define AMEEFP_500US_IN_HZ AMEFP(2,3) // 2000 Hz
+#define AMEEFP_1MS_IN_HZ AMEFP(1,3) // 1000 Hz
+#define AMEEFP_2MS_IN_HZ AMEFP(5,2) // 500 Hz
+#define AMEEFP_4MS_IN_HZ AMEFP(25,1) // 250 Hz
+#define AMEEFP_8MS_IN_HZ AMEFP(125,0) // 125 Hz
+#define AMEEFP_16MS_IN_HZ AMEFP(625,-1) // 62.5 Hz
+#define AMEEFP_32MS_IN_HZ AMEFP(3125,-2) // 31.25 Hz
+#define AMEEFP_64MS_IN_HZ AMEFP(15625,-3) // 15.625 Hz
+#define AMEEFP_3S_IN_HZ AMEFP(333,-3) // 0.333 Hz
#define AMEFP_SCALE_0_16384 AMEFP(610352,-8) // scalar so that digital 16384=100%
+// constants to allow fewer changes if tick time changes
+#define AMEEFP_EVERY_TICK_HZ AMEEFP_500US_IN_HZ // tick time 500us
+#define AMEEFP_EVERY_2ND_TICK_HZ AMEEFP_1MS_IN_HZ // 1ms
+#define AMEEFP_EVERY_4TH_TICK_HZ AMEEFP_2MS_IN_HZ // 2ms
+#define AMEEFP_EVERY_8TH_TICK_HZ AMEEFP_4MS_IN_HZ // 4ms
+#define AMEEFP_EVERY_16TH_TICK_HZ AMEEFP_8MS_IN_HZ // 8ms
+#define AMEEFP_EVERY_32ND_TICK_HZ AMEEFP_16MS_IN_HZ // 16ms
+#define AMEEFP_EVERY_64TH_TICK_HZ AMEEFP_32MS_IN_HZ // 32ms
+#define AMEEFP_EVERY_128TH_TICK_HZ AMEEFP_64MS_IN_HZ // 64ms
+
// This will get the string when given the GSID
#define SENSOR_GSID_TO_STRING(gsid) G_sensor_list[gsid].name;
@@ -246,142 +258,142 @@
//
const sensor_info_t G_sensor_info[] =
{
- /* ==FirmwareSensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( AMEintdur, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( AMESSdur0, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( AMESSdur1, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( AMESSdur2, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( AMESSdur3, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( AMESSdur4, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( AMESSdur5, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( AMESSdur6, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( AMESSdur7, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROBE250US0, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROBE250US1, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROBE250US2, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROBE250US3, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROBE250US4, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROBE250US5, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROBE250US6, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROBE250US7, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( GPEtickdur0, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( GPEtickdur1, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( RTLtickdur, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
-
- /* ==SystemSensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( PWRSYS, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRFAN, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRIO, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRSTORE, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRGPU, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH0, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH1, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH2, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH3, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH4, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH5, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH6, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH7, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH8, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH9, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH10, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH11, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH12, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH13, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH14, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRAPSSCH15, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( CUR12VSTBY, "A\0", AMEC_SENSOR_TYPE_CURRENT, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1,-2) ),
- SENSOR_INFO_T_ENTRY( VRHOTMEMPRCCNT, "#\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
-
- /* ==ChipSensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( TODclock0, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_ALL, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 16, 0) ),
- SENSOR_INFO_T_ENTRY( TODclock1, "sec\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_ALL, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1048576,-6) ),
- SENSOR_INFO_T_ENTRY( TODclock2, "day\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_ALL, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 795364,-6) ),
-
- /* ==ProcSensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( FREQA, "MHz\0", AMEC_SENSOR_TYPE_FREQ, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( IPS, "MIP\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRPROC, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRMEM, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( TEMPPROCAVG, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( TEMPPROCTHRM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( UTIL, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1,-2) ),
- SENSOR_INFO_T_ENTRY( TEMPNEST, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( VOLTVDDSENSE, "mV\0", AMEC_SENSOR_TYPE_VOLTAGE, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_500US_IN_HZ, AMEFP( 1, -1) ),
- SENSOR_INFO_T_ENTRY( VOLTVDNSENSE, "mV\0", AMEC_SENSOR_TYPE_VOLTAGE, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_500US_IN_HZ, AMEFP( 1, -1) ),
- SENSOR_INFO_T_ENTRY( PWRVDD, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_500US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PWRVDN, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_500US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROCPWRTHROT, "#\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( PROCOTTHROT, "#\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_16MS_IN_HZ, AMEFP( 1, 0) ),
-
- SENS_QUAD_ENTRY_SET( TEMPQ, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
-
- /* ==ReguSensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( VOLTVDD, "mV\0", AMEC_SENSOR_TYPE_VOLTAGE, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_500US_IN_HZ, AMEFP( 1, -1) ),
- SENSOR_INFO_T_ENTRY( VOLTVDN, "mV\0", AMEC_SENSOR_TYPE_VOLTAGE, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_500US_IN_HZ, AMEFP( 1, -1) ),
- SENSOR_INFO_T_ENTRY( CURVDD, "A\0", AMEC_SENSOR_TYPE_CURRENT, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_500US_IN_HZ, AMEFP( 1,-2) ),
- SENSOR_INFO_T_ENTRY( CURVDN, "A\0", AMEC_SENSOR_TYPE_CURRENT, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_500US_IN_HZ, AMEFP( 1,-2) ),
- SENSOR_INFO_T_ENTRY( VRMPROCOT, "#\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_1MS_IN_HZ, AMEFP( 1, 0) ),
-
- /* ==CoreSensors== NameString Units Type Location Number Freq ScaleFactor */
- SENS_CORE_ENTRY_SET( FREQREQC, "MHz\0", AMEC_SENSOR_TYPE_FREQ, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENS_CORE_ENTRY_SET( FREQAC, "MHz\0", AMEC_SENSOR_TYPE_FREQ, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_CORE_ENTRY_SET( IPSC, "MIP\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_CORE_ENTRY_SET( NOTBZEC, "cyc\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_CORE_ENTRY_SET( NOTFINC, "cyc\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_CORE_ENTRY_SET( TEMPPROCTHRMC, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_CORE_ENTRY_SET( UTILC, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1,-2) ),
- SENS_CORE_ENTRY_SET( NUTILC, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_3S_IN_HZ, AMEFP( 1,-2) ),
- SENS_CORE_ENTRY_SET( MSTLC, "cpi\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_CORE_ENTRY_SET( TEMPC, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_CORE_ENTRY_SET( STOPDEEPREQC, "ss\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_CORE_ENTRY_SET( STOPDEEPACTC, "ss\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_4MS_IN_HZ, AMEFP( 1, 0) ),
-
- /* ==MemSensors== NameString Units Type Location Number Freq ScaleFactor */
- SENS_MEMC_ENTRY_SET( MRDM, "GBs\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 128, -5) ),
- SENS_MEMC_ENTRY_SET( MWRM, "GBs\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 128, -5) ),
- SENS_MEMC_ENTRY_SET( MIRCM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_MEMC_ENTRY_SET( MLP2M, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_DIMM_ENTRY_SET( TEMPDIMM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_32MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_MEMC_ENTRY_SET( TEMPDIMMAXM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENS_MEMC_ENTRY_SET( LOCDIMMAXM, "loc\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( MEMPWRTHROT, "#\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_250US_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( MEMOTTHROT, "#\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_16MS_IN_HZ, AMEFP( 1, 0) ),
-
- /* ==CentaurSensors== NameString Units Type Location Number Freq ScaleFactor */
- SEN_CENTR_ENTRY_SET( MACM, "rps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SEN_CENTR_ENTRY_SET( MPUM, "rps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SEN_CENTR_ENTRY_SET( MIRBM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SEN_CENTR_ENTRY_SET( MIRLM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SEN_CENTR_ENTRY_SET( MIRMM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SEN_CENTR_ENTRY_SET( MIRHM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SEN_CENTR_ENTRY_SET( MTSM, "cnt\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SEN_CENTR_ENTRY_SET( M4RDM, "GBs\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 128, -5) ),
- SEN_CENTR_ENTRY_SET( M4WRM, "GBs\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 128, -5) ),
-
-
- /* ==MemSummarySensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( TEMPCENT, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( TEMPDIMMTHRM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_32MS_IN_HZ, AMEFP( 1, 0) ),
-
- /* ==GPUSensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( TEMPGPU0, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_GPU, AMEC_SENSOR_NONUM, AMEEFP_32MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( TEMPGPU1, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_GPU, AMEC_SENSOR_NONUM, AMEEFP_32MS_IN_HZ, AMEFP( 1, 0) ),
- SENSOR_INFO_T_ENTRY( TEMPGPU2, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_GPU, AMEC_SENSOR_NONUM, AMEEFP_32MS_IN_HZ, AMEFP( 1, 0) ),
-
- /* ==PartSummarySensors== NameString Units Type Location Number Freq ScaleFactor */
- SENSOR_INFO_T_ENTRY( UTILSLCG000, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG001, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG002, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG003, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG004, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG005, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG006, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG007, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG008, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG009, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG010, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
- SENSOR_INFO_T_ENTRY( UTILSLCG011, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_2MS_IN_HZ, AMEFP_SCALE_0_16384),
+ /* ==FirmwareSensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENSOR_INFO_T_ENTRY( AMEintdur, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( AMESSdur0, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( AMESSdur1, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( AMESSdur2, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( AMESSdur3, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( AMESSdur4, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( AMESSdur5, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( AMESSdur6, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( AMESSdur7, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROBE250US0, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROBE250US1, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROBE250US2, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROBE250US3, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROBE250US4, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROBE250US5, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROBE250US6, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROBE250US7, "n/a\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( GPEtickdur0, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( GPEtickdur1, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( RTLtickdur, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_OCC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+
+ /* ==SystemSensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENSOR_INFO_T_ENTRY( PWRSYS, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRFAN, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRIO, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRSTORE, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRGPU, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH0, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH1, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH2, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH3, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH4, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH5, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH6, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH7, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH8, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH9, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH10, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH11, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH12, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH13, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH14, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRAPSSCH15, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( CUR12VSTBY, "A\0", AMEC_SENSOR_TYPE_CURRENT, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1,-2) ),
+ SENSOR_INFO_T_ENTRY( VRHOTMEMPRCCNT, "#\0", AMEC_SENSOR_TYPE_GENERIC, AMEC_SENSOR_LOC_SYS, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+
+ /* ==ChipSensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENSOR_INFO_T_ENTRY( TODclock0, "us\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_ALL, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 16, 0) ),
+ SENSOR_INFO_T_ENTRY( TODclock1, "sec\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_ALL, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1048576,-6) ),
+ SENSOR_INFO_T_ENTRY( TODclock2, "day\0", AMEC_SENSOR_TYPE_TIME, AMEC_SENSOR_LOC_ALL, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 795364,-6) ),
+
+ /* ==ProcSensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENSOR_INFO_T_ENTRY( FREQA, "MHz\0", AMEC_SENSOR_TYPE_FREQ, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( IPS, "MIP\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRPROC, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRMEM, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( TEMPPROCAVG, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( TEMPPROCTHRM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( UTIL, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1,-2) ),
+ SENSOR_INFO_T_ENTRY( TEMPNEST, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( VOLTVDDSENSE, "mV\0", AMEC_SENSOR_TYPE_VOLTAGE, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_2ND_TICK_HZ, AMEFP( 1, -1) ),
+ SENSOR_INFO_T_ENTRY( VOLTVDNSENSE, "mV\0", AMEC_SENSOR_TYPE_VOLTAGE, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_2ND_TICK_HZ, AMEFP( 1, -1) ),
+ SENSOR_INFO_T_ENTRY( PWRVDD, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_2ND_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PWRVDN, "W\0", AMEC_SENSOR_TYPE_POWER, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_2ND_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROCPWRTHROT, "#\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( PROCOTTHROT, "#\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_64TH_TICK_HZ, AMEFP( 1, 0) ),
+
+ SENS_QUAD_ENTRY_SET( TEMPQ, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_PROC, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+
+ /* ==ReguSensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENSOR_INFO_T_ENTRY( VOLTVDD, "mV\0", AMEC_SENSOR_TYPE_VOLTAGE, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_2ND_TICK_HZ, AMEFP( 1, -1) ),
+ SENSOR_INFO_T_ENTRY( VOLTVDN, "mV\0", AMEC_SENSOR_TYPE_VOLTAGE, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_2ND_TICK_HZ, AMEFP( 1, -1) ),
+ SENSOR_INFO_T_ENTRY( CURVDD, "A\0", AMEC_SENSOR_TYPE_CURRENT, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_2ND_TICK_HZ, AMEFP( 1,-2) ),
+ SENSOR_INFO_T_ENTRY( CURVDN, "A\0", AMEC_SENSOR_TYPE_CURRENT, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_2ND_TICK_HZ, AMEFP( 1,-2) ),
+ SENSOR_INFO_T_ENTRY( VRMPROCOT, "#\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_VRM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_4TH_TICK_HZ, AMEFP( 1, 0) ),
+
+ /* ==CoreSensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENS_CORE_ENTRY_SET( FREQREQC, "MHz\0", AMEC_SENSOR_TYPE_FREQ, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_CORE_ENTRY_SET( FREQAC, "MHz\0", AMEC_SENSOR_TYPE_FREQ, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_CORE_ENTRY_SET( IPSC, "MIP\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_CORE_ENTRY_SET( NOTBZEC, "cyc\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_CORE_ENTRY_SET( NOTFINC, "cyc\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_CORE_ENTRY_SET( TEMPPROCTHRMC, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_CORE_ENTRY_SET( UTILC, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1,-2) ),
+ SENS_CORE_ENTRY_SET( NUTILC, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_3S_IN_HZ, AMEFP( 1,-2) ),
+ SENS_CORE_ENTRY_SET( MSTLC, "cpi\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_CORE_ENTRY_SET( TEMPC, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_CORE_ENTRY_SET( STOPDEEPREQC, "ss\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_CORE_ENTRY_SET( STOPDEEPACTC, "ss\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_CORE, AMEC_SENSOR_NONUM, AMEEFP_EVERY_16TH_TICK_HZ, AMEFP( 1, 0) ),
+
+ /* ==MemSensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENS_MEMC_ENTRY_SET( MRDM, "GBs\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 128, -5) ),
+ SENS_MEMC_ENTRY_SET( MWRM, "GBs\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 128, -5) ),
+ SENS_MEMC_ENTRY_SET( MIRCM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_MEMC_ENTRY_SET( MLP2M, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_DIMM_ENTRY_SET( TEMPDIMM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_128TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_MEMC_ENTRY_SET( TEMPDIMMAXM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENS_MEMC_ENTRY_SET( LOCDIMMAXM, "loc\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( MEMPWRTHROT, "#\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( MEMOTTHROT, "#\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_64TH_TICK_HZ, AMEFP( 1, 0) ),
+
+ /* ==CentaurSensors== NameString Units Type Location Number Freq ScaleFactor */
+ SEN_CENTR_ENTRY_SET( MACM, "rps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SEN_CENTR_ENTRY_SET( MPUM, "rps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SEN_CENTR_ENTRY_SET( MIRBM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SEN_CENTR_ENTRY_SET( MIRLM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SEN_CENTR_ENTRY_SET( MIRMM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SEN_CENTR_ENTRY_SET( MIRHM, "eps\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SEN_CENTR_ENTRY_SET( MTSM, "cnt\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SEN_CENTR_ENTRY_SET( M4RDM, "GBs\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 128, -5) ),
+ SEN_CENTR_ENTRY_SET( M4WRM, "GBs\0", AMEC_SENSOR_TYPE_PERF, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 128, -5) ),
+
+
+ /* ==MemSummarySensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENSOR_INFO_T_ENTRY( TEMPCENT, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( TEMPDIMMTHRM, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_MEM, AMEC_SENSOR_NONUM, AMEEFP_EVERY_128TH_TICK_HZ, AMEFP( 1, 0) ),
+
+ /* ==GPUSensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENSOR_INFO_T_ENTRY( TEMPGPU0, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_GPU, AMEC_SENSOR_NONUM, AMEEFP_EVERY_128TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( TEMPGPU1, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_GPU, AMEC_SENSOR_NONUM, AMEEFP_EVERY_128TH_TICK_HZ, AMEFP( 1, 0) ),
+ SENSOR_INFO_T_ENTRY( TEMPGPU2, "C\0", AMEC_SENSOR_TYPE_TEMP, AMEC_SENSOR_LOC_GPU, AMEC_SENSOR_NONUM, AMEEFP_EVERY_128TH_TICK_HZ, AMEFP( 1, 0) ),
+
+ /* ==PartSummarySensors== NameString Units Type Location Number Freq ScaleFactor */
+ SENSOR_INFO_T_ENTRY( UTILSLCG000, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG001, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG002, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG003, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG004, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG005, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG006, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG007, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG008, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG009, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG010, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
+ SENSOR_INFO_T_ENTRY( UTILSLCG011, "%\0", AMEC_SENSOR_TYPE_UTIL, AMEC_SENSOR_LOC_LPAR, AMEC_SENSOR_NONUM, AMEEFP_EVERY_8TH_TICK_HZ, AMEFP_SCALE_0_16384),
};
// Cause a compile error if we don't have all the sensors in the enum in the initialization list.
diff --git a/src/occ_405/topfiles.mk b/src/occ_405/topfiles.mk
index 9bb35e7..f3b85ad 100644
--- a/src/occ_405/topfiles.mk
+++ b/src/occ_405/topfiles.mk
@@ -25,6 +25,7 @@
TOP-C-SOURCES = amec/amec_analytics.c \
amec/amec_controller.c \
amec/amec_data.c \
+ amec/amec_dps.c \
amec/amec_freq.c \
amec/amec_health.c \
amec/amec_init.c \
diff --git a/src/occ_405/wof/wof.c b/src/occ_405/wof/wof.c
index 8bffd1c..3114480 100644
--- a/src/occ_405/wof/wof.c
+++ b/src/occ_405/wof/wof.c
@@ -115,20 +115,15 @@ int16_t G_wof_iddq_mult_table[][2] = {
* such that the WOF algorithm can run. This includes making
* sure the PGPE is ready to perform WOF calculations and enforcing
* when WOF should wait a tick to perform a calc or disable wof
- * entirely. Called from amec_slave_smh.c::amec_slv_state_4. Called
- * every 2ms, but calls the wof_main algorithm every other invocation
- * resulting in 4ms intervals
+ * entirely. Called from amec_slave_smh.c::amec_slv_state_4.
+ * This should run every 4ms, if HW_MICS_PER_TICK changes adjust calls
+ * to this function (use amec substates) to keep this called every 4ms
* Param: None
*
* Return: None
*/
void call_wof_main( void )
{
- // Variable to control toggling between invocations
- // Init to false to ensure init asynchronous operations have
- // the extra 2ms to finish.
- static bool L_run_wof = false;
-
// Variable to ensure we do not keep trying to send vfrt GpeRequest
// more than 1 extra time.
static bool L_vfrt_last_chance = false;
@@ -272,42 +267,36 @@ void call_wof_main( void )
if( (g_wof->wof_init_state >= PGPE_WOF_ENABLED_NO_PREV_DATA) &&
!g_wof->wof_disabled )
{
- // Make sure we run algo on appropriate tick
- if( !L_run_wof )
+ // Only check if req active quads changed if we are
+ // in the fully enabled wof state
+ if(g_wof->wof_init_state == WOF_ENABLED)
{
- // Only check if req active quads changed if we are
- // in the fully enabled wof state
- if(g_wof->wof_init_state == WOF_ENABLED)
- {
- // Read active quads from sram
- read_req_active_quads();
+ // Read active quads from sram
+ read_req_active_quads();
- // If the requested active quads changed last loop
- // Send vfrt with new req active quads
- if( g_wof->req_active_quad_update !=
- g_wof->prev_req_active_quads )
+ // If the requested active quads changed last loop
+ // Send vfrt with new req active quads
+ if( g_wof->req_active_quad_update !=
+ g_wof->prev_req_active_quads )
+ {
+ // Calculate new quad step
+ g_wof->quad_step_from_start =
+ calc_quad_step_from_start();
+ // Compute new VFRT Main Memory address using new quads
+ g_wof->next_vfrt_main_mem_addr =
+ calc_vfrt_mainstore_addr();
+ // Send new VFRT
+ send_vfrt_to_pgpe( g_wof->next_vfrt_main_mem_addr );
+ if(async_request_is_idle(&G_wof_vfrt_req.request))
{
- // Calculate new quad step
- g_wof->quad_step_from_start =
- calc_quad_step_from_start();
- // Compute new VFRT Main Memory address using new quads
- g_wof->next_vfrt_main_mem_addr =
- calc_vfrt_mainstore_addr();
- // Send new VFRT
- send_vfrt_to_pgpe( g_wof->next_vfrt_main_mem_addr );
- if(async_request_is_idle(&G_wof_vfrt_req.request))
- {
- g_wof->gpe_req_rc = gpe_request_schedule(&G_wof_vfrt_req);
- }
- else
- {
- INTR_TRAC_INFO("VFRT Request is not idle when"
- "requested active quads changed");
- }
+ g_wof->gpe_req_rc = gpe_request_schedule(&G_wof_vfrt_req);
+ }
+ else
+ {
+ INTR_TRAC_INFO("VFRT Request is not idle when"
+ "requested active quads changed");
}
}
- // Toggle for next tick
- L_run_wof = true;
}
else
{
@@ -330,8 +319,6 @@ void call_wof_main( void )
// Request is idle. Run wof algorithm
wof_main();
- // Set control variables for next tick
- L_run_wof = false;
L_vfrt_last_chance = false;
// Finally make sure we are in the fully enabled state
if( g_wof->wof_init_state == PGPE_WOF_ENABLED_NO_PREV_DATA )
@@ -339,7 +326,7 @@ void call_wof_main( void )
g_wof->wof_init_state = WOF_ENABLED;
}
}
- } // L_run_wof
+ }
} // >= PGPE_WOF_ENABLED_NO_PREV_DATA
} // IS_OCC_STATE_ACTIVE
} while( 0 );
OpenPOWER on IntegriCloud