psu-ng: Add in handling of specific MFR faults
Add in a function to determine what the various bits in statusMFR may be
indicating for a fault, based on the type of power supply (device driver
bound).
Add in PS_Kill, 12Vcs, and 12V CS faults for IBM power supply types.
Add in creating error logs for PS_Kill, 12Vcs, and 12V CS faults. The
12Vcs and 12V CS faults can essentially be treated the same as VOUT_UV
faults (same error type, same call out).
Tested:
Verified no PS_Kill, 12Vcs, or 12V CS fault on normal Rainier 2S4U
Simulated PS_Kill fault:
MFR fault: STATUS_WORD = 0x1840 STATUS_MFR_SPECIFIC = 0x10
Simulated 12Vcs fault:
PGOOD fault: STATUS_WORD = 0x1840, STATUS_MFR_SPECIFIC = 0x40
MFR fault: STATUS_WORD = 0x1840 STATUS_MFR_SPECIFIC = 0x40
Simulated 12V CS fault/warning:
MFR fault: STATUS_WORD = 0x1000 STATUS_MFR_SPECIFIC = 0x80
Change-Id: Ie89a58836ecec86dfa2e124eb6ab03e9dccce929
Signed-off-by: Brandon Wyman <bjwyman@gmail.com>
diff --git a/phosphor-power-supply/psu_manager.cpp b/phosphor-power-supply/psu_manager.cpp
index 6fa824a..ac0901b 100644
--- a/phosphor-power-supply/psu_manager.cpp
+++ b/phosphor-power-supply/psu_manager.cpp
@@ -429,7 +429,7 @@
for (auto& psu : psus)
{
additionalData.clear();
- // TODO: Fault priorities #918
+
if (!psu->isFaultLogged() && !psu->isPresent())
{
std::map<std::string, std::string> requiredPSUsData;
@@ -494,6 +494,13 @@
additionalData);
psu->setFaultLogged();
}
+ else if (psu->hasPSKillFault())
+ {
+ createError(
+ "xyz.openbmc_project.Power.PowerSupply.Error.PSKillFault",
+ additionalData);
+ psu->setFaultLogged();
+ }
else if (psu->hasVoutOVFault())
{
// Include STATUS_VOUT for Vout faults.
@@ -521,7 +528,8 @@
psu->setFaultLogged();
}
- else if (psu->hasVoutUVFault())
+ else if (psu->hasVoutUVFault() || psu->hasPS12VcsFault() ||
+ psu->hasPSCS12VFault())
{
// Include STATUS_VOUT for Vout faults.
additionalData["STATUS_VOUT"] =