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