diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/occ_405/cent/centaur_data.c | 1 | ||||
-rwxr-xr-x | src/occ_405/cent/centaur_data.h | 1 | ||||
-rwxr-xr-x | src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c | 4 | ||||
-rwxr-xr-x | src/occ_405/dimm/dimm.c | 14 | ||||
-rwxr-xr-x | src/occ_405/occbuildname.c | 2 | ||||
-rw-r--r-- | src/occ_405/pss/avsbus.c | 4 | ||||
-rwxr-xr-x | src/occ_gpe1/gpe1_dimm.h | 4 | ||||
-rw-r--r-- | src/occ_gpe1/gpe1_dimm_read.c | 2 | ||||
-rw-r--r-- | src/occ_gpe1/gpe1_dimm_reset.c | 2 |
9 files changed, 27 insertions, 7 deletions
diff --git a/src/occ_405/cent/centaur_data.c b/src/occ_405/cent/centaur_data.c index 5e96736..98636f2 100755 --- a/src/occ_405/cent/centaur_data.c +++ b/src/occ_405/cent/centaur_data.c @@ -132,6 +132,7 @@ centaur_data_task_t G_centaur_data_task = { #endif dimm_sensor_flags_t G_dimm_enabled_sensors = {0}; +dimm_sensor_flags_t G_dimm_present_sensors = {0}; //AMEC needs to know when data for a centaur has been collected. uint32_t G_updated_centaur_mask = 0; diff --git a/src/occ_405/cent/centaur_data.h b/src/occ_405/cent/centaur_data.h index f6596f0..17831e4 100755 --- a/src/occ_405/cent/centaur_data.h +++ b/src/occ_405/cent/centaur_data.h @@ -136,6 +136,7 @@ extern uint32_t G_updated_centaur_mask; //global bitmap of enabled dimm sensors extern dimm_sensor_flags_t G_dimm_enabled_sensors; +extern dimm_sensor_flags_t G_dimm_present_sensors; //global bitmap of dimms that have ever gone over the error temperature extern dimm_sensor_flags_t G_dimm_overtemp_bitmap; diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c b/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c index 34f2e0d..7edcba9 100755 --- a/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c +++ b/src/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c @@ -1906,8 +1906,8 @@ errlHndl_t data_store_mem_cfg(const cmdh_fsp_cmd_t * i_cmd_ptr, // Store the hardware sensor ID G_sysConfigData.dimm_huids[l_i2c_port][l_dimm_num] = l_data_set->hw_sensor_id; - // Set bit vector of enabled DIMM sensors - G_dimm_enabled_sensors.bytes[l_i2c_port] |= 0x80 >> l_dimm_num; + // Set bit vector of present DIMM sensors (they will be enabled in task_dimm_sm) + G_dimm_present_sensors.bytes[l_i2c_port] |= 0x80 >> l_dimm_num; // Store the temperature sensor ID g_amec->proc[0].memctl[l_i2c_port].centaur.dimm_temps[l_dimm_num].temp_sid = diff --git a/src/occ_405/dimm/dimm.c b/src/occ_405/dimm/dimm.c index 7a026b1..2f2289b 100755 --- a/src/occ_405/dimm/dimm.c +++ b/src/occ_405/dimm/dimm.c @@ -293,7 +293,7 @@ void mark_dimm_failed() * @reasoncode DIMM_GPE_FAILURE * @userdata1 GPE returned rc code * @userdata4 ERC_DIMM_COMPLETE_FAILURE - * @devdesc Failure writing dimm i2c mode register + * @devdesc Disabling DIMM due to repeated I2C failures */ l_err = createErrl(DIMM_MID_MARK_DIMM_FAILED, DIMM_GPE_FAILURE, @@ -735,8 +735,18 @@ void task_dimm_sm(struct task *i_self) static bool L_readIssued = false; const uint8_t engine = G_sysConfigData.dimm_i2c_engine; static bool L_occ_owns_lock = false; + // 60,000 x 500us (tick time) x 2 (called every other tick) = 60 seconds + static unsigned int L_startup_delay = 60000; - if (G_mem_monitoring_allowed) + if (L_startup_delay > 0) + { + if (--L_startup_delay == 0) + { + TRAC_INFO("task_dimm_sm: Startup delay completed, DIMM temp collection will be started (0x%08X)", G_dimm_present_sensors.words[0]); + G_dimm_enabled_sensors = G_dimm_present_sensors; + } + } + else if (G_mem_monitoring_allowed) { #ifdef DEBUG_LOCK_TESTING SIMULATE_HOST(); diff --git a/src/occ_405/occbuildname.c b/src/occ_405/occbuildname.c index 2943093..c604412 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_170803a\0" /*</BuildName>*/ ; +volatile const char G_occ_buildname[16] __attribute__((section(".buildname"))) = /*<BuildName>*/ "op_occ_170816a\0" /*</BuildName>*/ ; #endif diff --git a/src/occ_405/pss/avsbus.c b/src/occ_405/pss/avsbus.c index b008020..815979f 100644 --- a/src/occ_405/pss/avsbus.c +++ b/src/occ_405/pss/avsbus.c @@ -978,6 +978,8 @@ uint8_t process_avsbus_status() if ((foundOT == 1) && !loggedOT) { loggedOT = TRUE; + TRAC_ERR("process_avsbus_status: AVSBUS Over Temperature Warning (Vdd: 0x%08X, Vdn: 0x%08X)", + vdd_status, vdn_status); /* @ * @errortype * @moduleid PSS_MID_AVSBUS_READ @@ -1004,6 +1006,8 @@ uint8_t process_avsbus_status() if ((foundOC == 1) && !loggedOC) { loggedOC = TRUE; + TRAC_ERR("process_avsbus_status: AVSBUS Over Current Warning (Vdd: 0x%08X, Vdn: 0x%08X)", + vdd_status, vdn_status); /* @ * @errortype * @moduleid PSS_MID_AVSBUS_READ diff --git a/src/occ_gpe1/gpe1_dimm.h b/src/occ_gpe1/gpe1_dimm.h index b151f87..59dbdac 100755 --- a/src/occ_gpe1/gpe1_dimm.h +++ b/src/occ_gpe1/gpe1_dimm.h @@ -51,6 +51,10 @@ #define PEEK_ERROR_MASK 0x00000000FC000000 #define PEEK_MORE_DATA 0x0000000002000000 +// 0-15: Bit Rate Divisor - 0x0049 gives approx 391kHz (and allows margin for clock variation) +// 16-21: Port Number (0-5) +// 22-26: reserved (0s) +#define I2C_MODE_REG_DIVISOR 0x0049000000000000 void dimm_set_ffdc(GpeErrorStruct *o_error, uint32_t i_addr, uint32_t i_rc, uint64_t i_ffdc); diff --git a/src/occ_gpe1/gpe1_dimm_read.c b/src/occ_gpe1/gpe1_dimm_read.c index 133ad9f..90f4a4b 100644 --- a/src/occ_gpe1/gpe1_dimm_read.c +++ b/src/occ_gpe1/gpe1_dimm_read.c @@ -268,7 +268,7 @@ void dimm_write_mode(ipc_msg_t* cmd, void* arg) // 0-15: Bit Rate Divisor - 0x0049 gives approx 391kHz (and allows margin for clock variation) // 16-21: Port Number (0-5) // 22-26: reserved (0s) - regValue = 0x0049000000000000; + regValue = I2C_MODE_REG_DIVISOR; if ((args->i2cPort > 0) && (args->i2cPort < 6)) { regValue |= ((uint64_t)args->i2cPort << 42); diff --git a/src/occ_gpe1/gpe1_dimm_reset.c b/src/occ_gpe1/gpe1_dimm_reset.c index 161bd43..16cf8da 100644 --- a/src/occ_gpe1/gpe1_dimm_reset.c +++ b/src/occ_gpe1/gpe1_dimm_reset.c @@ -126,7 +126,7 @@ void dimm_reset_slave(ipc_msg_t* cmd, void* arg) // 0-15: Bit Rate Divisor - 0x0049 gives approx 391kHz (and allows margin for clock variation) // 16-21: Port Number (0-5) // 22-26: reserved (0s) - regValue = 0x0049000000000000; + regValue = I2C_MODE_REG_DIVISOR; if ((args->i2cPort > 0) && (args->i2cPort < 6)) { regValue |= ((uint64_t)args->i2cPort << 42); |