diff options
Diffstat (limited to 'src/occ_405/amec')
-rwxr-xr-x | src/occ_405/amec/amec_health.c | 11 | ||||
-rw-r--r-- | src/occ_405/amec/amec_sensors_centaur.c | 26 |
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]; |