psu-ng: Detect CML fault
If the STATUS_WORD has the CML (Communication, Memory, Logic) fault bit
on, bit 1 in lower byte of STATUS_WORD, then read STATUS_CML, and treat
the fault as another variety of a communication fault/error.
Change-Id: Iba368683734777874ba54ec845cbc94b00010b68
Signed-off-by: Brandon Wyman <bjwyman@gmail.com>
diff --git a/phosphor-power-supply/power_supply.cpp b/phosphor-power-supply/power_supply.cpp
index 64e0f26..ca9c084 100644
--- a/phosphor-power-supply/power_supply.cpp
+++ b/phosphor-power-supply/power_supply.cpp
@@ -210,6 +210,21 @@
{
statusInput = pmbusIntf->read(STATUS_INPUT, Type::Debug);
statusMFR = pmbusIntf->read(STATUS_MFR, Type::Debug);
+ statusCML = pmbusIntf->read(STATUS_CML, Type::Debug);
+ if (statusWord & status_word::CML_FAULT)
+ {
+ if (!cmlFault)
+ {
+ log<level::INFO>(
+ fmt::format("CML fault: STATUS_WORD = {:#04x}, "
+ "STATUS_CML = {:#02x}",
+ statusWord, statusCML)
+ .c_str());
+ }
+ faultFound = true;
+ cmlFault = true;
+ }
+
if (statusWord & status_word::INPUT_FAULT_WARN)
{
if (!inputFault)
@@ -260,6 +275,7 @@
else
{
faultFound = false;
+ cmlFault = false;
inputFault = false;
mfrFault = false;
vinUVFault = false;
@@ -313,6 +329,7 @@
mfrFault = false;
statusMFR = 0;
vinUVFault = false;
+ cmlFault = false;
readFail = 0;
try