summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/occ_405/cent/centaur_data.c1
-rwxr-xr-xsrc/occ_405/cent/centaur_data.h1
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds_datacnfg.c4
-rwxr-xr-xsrc/occ_405/dimm/dimm.c14
-rwxr-xr-xsrc/occ_405/occbuildname.c2
-rw-r--r--src/occ_405/pss/avsbus.c4
-rwxr-xr-xsrc/occ_gpe1/gpe1_dimm.h4
-rw-r--r--src/occ_gpe1/gpe1_dimm_read.c2
-rw-r--r--src/occ_gpe1/gpe1_dimm_reset.c2
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);
OpenPOWER on IntegriCloud