summaryrefslogtreecommitdiffstats
path: root/src/usr/ipmi
diff options
context:
space:
mode:
authorRichard J. Knight <rjknight@us.ibm.com>2015-04-27 12:10:21 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-08-18 18:10:19 -0500
commita85a8f8c44e76c0edfeca53835cebbc7d2fdd383 (patch)
treec56023e602d9b309e14c8eeaf85d186762af0abc /src/usr/ipmi
parent9f01b555b7eeced597c0ff658ac3412d85991d10 (diff)
downloadtalos-hostboot-a85a8f8c44e76c0edfeca53835cebbc7d2fdd383.tar.gz
talos-hostboot-a85a8f8c44e76c0edfeca53835cebbc7d2fdd383.zip
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 <wghoffa@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Tested-by: FSP CI Jenkins Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW
Diffstat (limited to 'src/usr/ipmi')
-rw-r--r--src/usr/ipmi/ipmisel.C2
-rw-r--r--src/usr/ipmi/ipmisensor.C51
2 files changed, 37 insertions, 16 deletions
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<TARGETING::ATTR_PHYS_PATH>();
- 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<TARGETING::ConstTargetHandle_t>(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
OpenPOWER on IntegriCloud