summaryrefslogtreecommitdiffstats
path: root/src/occ_405/amec
diff options
context:
space:
mode:
Diffstat (limited to 'src/occ_405/amec')
-rwxr-xr-xsrc/occ_405/amec/amec_health.c11
-rw-r--r--src/occ_405/amec/amec_sensors_centaur.c26
2 files changed, 36 insertions, 1 deletions
diff --git a/src/occ_405/amec/amec_health.c b/src/occ_405/amec/amec_health.c
index b80d043..ce3637a 100755
--- a/src/occ_405/amec/amec_health.c
+++ b/src/occ_405/amec/amec_health.c
@@ -311,8 +311,17 @@ void amec_health_check_dimm_timeout()
break;
}
+ uint8_t l_max_port; // #ports in nimbus/#centaurs in cumulus
+ if(G_sysConfigData.mem_type == MEM_TYPE_NIMBUS)
+ {
+ l_max_port = NUM_DIMM_PORTS;
+ }
+ else // MEM_TYPE_CUMULUS
+ {
+ l_max_port = MAX_NUM_CENTAURS;
+ }
//iterate across all ports incrementing dimm sensor timers as needed
- for(l_port = 0; l_port < NUM_DIMM_PORTS; l_port++)
+ for(l_port = 0; l_port < l_max_port; l_port++)
{
//any dimm timers on this port need incrementing?
if(!l_need_inc.bytes[l_port])
diff --git a/src/occ_405/amec/amec_sensors_centaur.c b/src/occ_405/amec/amec_sensors_centaur.c
index f4327ea..a883993 100644
--- a/src/occ_405/amec/amec_sensors_centaur.c
+++ b/src/occ_405/amec/amec_sensors_centaur.c
@@ -54,6 +54,9 @@ uint8_t G_cent_overtemp_bitmap = 0;
uint8_t G_cent_temp_updated_bitmap = 0;
extern uint8_t G_centaur_needs_recovery;
extern uint8_t G_centaur_nest_lfir6;
+extern uint64_t G_inject_dimm;
+extern uint32_t G_inject_dimm_trace[MAX_NUM_CENTAURS][NUM_DIMMS_PER_CENTAUR];
+
/******************************************************************************/
/* Forward Declarations */
@@ -122,6 +125,29 @@ void amec_update_dimm_dts_sensors(CentaurMemData * i_sensor_cache, uint8_t i_cen
continue;
}
+
+ if (g_amec->proc[0].memctl[i_centaur].centaur.dimm_temps[k].temp_sid) // DIMM has sensor ID
+ {
+ if ((G_inject_dimm & ((uint64_t)1 << ((i_centaur * 8) + k))) == 0)
+ {
+ if (G_inject_dimm_trace[i_centaur][k] != 0)
+ {
+ TRAC_INFO("amec_update_dimm_dts_sensors: stopping injection of errors for DIMM%04X", (i_centaur<<8)|k);
+ G_inject_dimm_trace[i_centaur][k] = 0;
+ }
+ }
+ else
+ {
+ if (G_inject_dimm_trace[i_centaur][k] == 0)
+ {
+ TRAC_INFO("amec_update_dimm_dts_sensors: injecting errors for DIMM%04X", (i_centaur<<8)|k);
+ G_inject_dimm_trace[i_centaur][k] = 1;
+ }
+ continue; // Skip this DIMM
+ }
+ }
+
+
l_sens_status = i_sensor_cache->scache.dimm_thermal_sensor[k].fields.status;
fru_temp_t* l_fru = &g_amec->proc[0].memctl[i_centaur].centaur.dimm_temps[k];
OpenPOWER on IntegriCloud