From a85a8f8c44e76c0edfeca53835cebbc7d2fdd383 Mon Sep 17 00:00:00 2001 From: "Richard J. Knight" Date: Mon, 27 Apr 2015 12:10:21 -0500 Subject: Return valid fault sensors for all types of callouts - Update code to return sensor numbers for targets which represent replaceable parts. - Use System Event sensor for procedure callouts. - Update code to handle all hw callout types. Change-Id: I626bce5c8c0c8b7d0a44408280de178c7a86a83f CQ:SW306556 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/18097 Reviewed-by: WILLIAM G. HOFFA Reviewed-by: A. Patrick Williams III Tested-by: FSP CI Jenkins Reviewed-by: Daniel M. Crowell Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW --- src/usr/ipmi/ipmisel.C | 2 +- src/usr/ipmi/ipmisensor.C | 51 +++++++++++++++++++++++++++++++++-------------- 2 files changed, 37 insertions(+), 16 deletions(-) (limited to 'src/usr/ipmi') diff --git a/src/usr/ipmi/ipmisel.C b/src/usr/ipmi/ipmisel.C index 6ae3e4b63..d2381efad 100644 --- a/src/usr/ipmi/ipmisel.C +++ b/src/usr/ipmi/ipmisel.C @@ -84,7 +84,7 @@ namespace IPMISEL void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize, uint32_t i_eid, uint8_t i_eventDirType, uint8_t i_eventOffset, - uint8_t i_sensorType, uint8_t i_sensorNumber) + uint8_t i_sensorType, uint8_t i_sensorNumber ) { IPMI_TRAC(ENTER_MRK "sendESEL()"); diff --git a/src/usr/ipmi/ipmisensor.C b/src/usr/ipmi/ipmisensor.C index 094231152..621aa7cf1 100644 --- a/src/usr/ipmi/ipmisensor.C +++ b/src/usr/ipmi/ipmisensor.C @@ -1046,7 +1046,9 @@ namespace SENSOR updateBMCFaultSensorStatus(); }; - // returns a sensor number based on input target type + // returns a sensor number for the FRU based on input target type + // there are currently 4 frus defined system, backplane, DIMM, PROC + // uint32_t getFaultSensorNumber( TARGETING::ConstTargetHandle_t i_pTarget ) { TRACDCOMP(g_trac_ipmi,">>getFaultSensorNumber()"); @@ -1064,46 +1066,51 @@ namespace SENSOR l_sensor_number = TARGETING::UTIL::getSensorNumber( i_pTarget, TARGETING::SENSOR_NAME_SYSTEM_EVENT ); + + TRACDCOMP(g_trac_ipmi,"Sensor Number = 0x%x", l_sensor_number); break; } case TARGETING::TYPE_NODE: { - - TRACDCOMP(g_trac_ipmi, "return backplane fault sensor\n"); + TRACDCOMP(g_trac_ipmi, "returning the \"BACKPLANE_FAULT\" sensor\n"); l_sensor_number = TARGETING::UTIL::getSensorNumber( i_pTarget, TARGETING::SENSOR_NAME_BACKPLANE_FAULT ); + + TRACDCOMP(g_trac_ipmi,"Sensor Number = 0x%x", l_sensor_number); break; } + // these targets have specific status sensors case TARGETING::TYPE_DIMM: case TARGETING::TYPE_MEMBUF: case TARGETING::TYPE_PROC: - case TARGETING::TYPE_CORE: { l_sensor_number = StatusSensor(i_pTarget).getSensorNumber(); + + TRACDCOMP(g_trac_ipmi,"Sensor Number = 0x%x", l_sensor_number); break; } - case TARGETING::TYPE_EX: + default: { - // sensor number attribute is associated with the core - const TARGETING::Target * targ = getCoreChiplet(i_pTarget); - l_sensor_number = getFaultSensorNumber( targ ); + TARGETING::EntityPath l_targetPath = + i_pTarget->getAttr(); - break; - } + // chop off the last part and go again. + l_targetPath.removeLast(); - default: - { + TARGETING::TargetHandle_t l_target = NULL; + l_target = + TARGETING::targetService().toTarget(l_targetPath); - TARGETING::ConstTargetHandle_t targ = - getParentChip( i_pTarget); + l_sensor_number = getFaultSensorNumber( + static_cast(l_target)); - l_sensor_number = getFaultSensorNumber( targ ); + break; } } @@ -1216,4 +1223,18 @@ namespace SENSOR return offsets; } + uint8_t getBackPlaneFaultSensor() + { + TARGETING::TargetHandle_t sys = NULL; + TARGETING::TargetHandleList nodes; + TARGETING::targetService().getTopLevelTarget(sys); + assert(sys != NULL); + getChildAffinityTargets(nodes, sys, TARGETING::CLASS_ENC, + TARGETING::TYPE_NODE); + assert(!nodes.empty()); + + //Backplane sensor ID + return TARGETING::UTIL::getSensorNumber(nodes[0], + TARGETING::SENSOR_NAME_BACKPLANE_FAULT); + } }; // end name space -- cgit v1.2.1