psu-ng: PGOOD_DEGLITCH_LIMIT of five

Turns out that the (IBM) power supplies take up to around 3 seconds to
get the PGOOD# bit in STATUS_WORD set to the good (0) state after the
input power is within range. Adjust the de-glitch value to avoid logging
PGOOD errors for the power supplies, as they mostly ride through the
momentary drops in the input power.

Use PGOOD_DEGLITCH_LIMIT instead of DEGLITCH_LIMIT for the pgoodFault.

Tested:
    Rainier 2S4U
        1. Drop outlet power for 0.5 seconds, verify no 110015F1.
        2. Drop outlet power for 1 second, verify no 110015F1.
        3. Drop outlet power for 1.5 seconds, verify no 110015F1.
    Rainier 2S2U
        1. Drop outlet power for 1 second, verify no 110015F1.
        2. Drop outlet power for 5 seconds, verify 110015F0 (VIN_UV) IS logged.
        3. Drop outlet power for 1.5 seconds, verify no 110015F1.
    Everest (powersupply0 unplugged, powersupply3 missing)
        1. Drop outlet power for 0.5 seconds, verify no 110015F1.
        2. Drop outlet power for 1 second, verify no 110015F1.
        3. Drop outlet power for 1.5 seconds, verify no 110015F1.
        4. Drop outlet power for 3 seconds, verify 110015F0 IS logged.
        5. Drop all outlet power for 5 seconds, verify 110000AC.

Change-Id: I6ba12209e6c84548fec036101ca02d857ed900f6
Signed-off-by: Brandon Wyman <bjwyman@gmail.com>
diff --git a/phosphor-power-supply/test/power_supply_tests.cpp b/phosphor-power-supply/test/power_supply_tests.cpp
index 1e47b9c..278326d 100644
--- a/phosphor-power-supply/test/power_supply_tests.cpp
+++ b/phosphor-power-supply/test/power_supply_tests.cpp
@@ -696,7 +696,7 @@
         // POWER_GOOD# inactive, and OFF bit on.
         expectations.statusWordValue =
             ((status_word::POWER_GOOD_NEGATED) | (status_word::UNIT_IS_OFF));
-        for (auto x = 1; x <= DEGLITCH_LIMIT; x++)
+        for (auto x = 1; x <= PGOOD_DEGLITCH_LIMIT; x++)
         {
             // STATUS_INPUT, STATUS_MFR, STATUS_CML, STATUS_VOUT, and
             // STATUS_TEMPERATURE: Don't care if bits set or not (defaults).
@@ -706,7 +706,7 @@
                 .WillOnce(Return("124000"));
             psu2.analyze();
             EXPECT_EQ(psu2.isPresent(), true);
-            EXPECT_EQ(psu2.isFaulted(), x >= DEGLITCH_LIMIT);
+            EXPECT_EQ(psu2.isFaulted(), x >= PGOOD_DEGLITCH_LIMIT);
             EXPECT_EQ(psu2.hasInputFault(), false);
             EXPECT_EQ(psu2.hasMFRFault(), false);
             EXPECT_EQ(psu2.hasVINUVFault(), false);
@@ -716,7 +716,7 @@
             EXPECT_EQ(psu2.hasIoutOCFault(), false);
             EXPECT_EQ(psu2.hasFanFault(), false);
             EXPECT_EQ(psu2.hasTempFault(), false);
-            EXPECT_EQ(psu2.hasPgoodFault(), x >= DEGLITCH_LIMIT);
+            EXPECT_EQ(psu2.hasPgoodFault(), x >= PGOOD_DEGLITCH_LIMIT);
         }
     }
 
@@ -844,7 +844,7 @@
     // STATUS_TEMPERATURE with bits on.
     expectations.statusTempValue = 0xFF;
 
-    for (auto x = 1; x <= DEGLITCH_LIMIT; x++)
+    for (auto x = 1; x <= PGOOD_DEGLITCH_LIMIT; x++)
     {
         setPMBusExpectations(mockPMBus, expectations);
         EXPECT_CALL(mockPMBus, readString(READ_VIN, _))
@@ -859,7 +859,8 @@
         // Cannot have VOUT_OV_FAULT and VOUT_UV_FAULT.
         // Rely on HasVoutUVFault() to verify this sets and clears.
         EXPECT_EQ(psu.hasVoutUVFault(), false);
-        // All faults are deglitched up to DEGLITCH_LIMIT
+        // pgoodFault at PGOOD_DEGLITCH_LIMIT, all other faults are deglitched
+        // up to DEGLITCH_LIMIT
         EXPECT_EQ(psu.isFaulted(), x >= DEGLITCH_LIMIT);
         EXPECT_EQ(psu.hasInputFault(), x >= DEGLITCH_LIMIT);
         EXPECT_EQ(psu.hasMFRFault(), x >= DEGLITCH_LIMIT);
@@ -869,7 +870,7 @@
         EXPECT_EQ(psu.hasIoutOCFault(), x >= DEGLITCH_LIMIT);
         EXPECT_EQ(psu.hasFanFault(), x >= DEGLITCH_LIMIT);
         EXPECT_EQ(psu.hasTempFault(), x >= DEGLITCH_LIMIT);
-        EXPECT_EQ(psu.hasPgoodFault(), x >= DEGLITCH_LIMIT);
+        EXPECT_EQ(psu.hasPgoodFault(), x >= PGOOD_DEGLITCH_LIMIT);
         EXPECT_EQ(psu.hasPSKillFault(), x >= DEGLITCH_LIMIT);
         EXPECT_EQ(psu.hasPS12VcsFault(), x >= DEGLITCH_LIMIT);
         EXPECT_EQ(psu.hasPSCS12VFault(), x >= DEGLITCH_LIMIT);
@@ -918,7 +919,7 @@
     // STATUS_TEMPERATURE with bits on.
     expectations.statusTempValue = 0xFF;
 
-    // All faults degltiched now. Check for false before limit above.
+    // All faults deglitched now. Check for false before limit above.
     for (auto x = 1; x <= DEGLITCH_LIMIT; x++)
     {
         setPMBusExpectations(mockPMBus, expectations);
@@ -946,7 +947,8 @@
     EXPECT_EQ(psu.hasVoutUVFault(), false);
     EXPECT_EQ(psu.hasFanFault(), true);
     EXPECT_EQ(psu.hasTempFault(), true);
-    EXPECT_EQ(psu.hasPgoodFault(), true);
+    // No PGOOD fault, as less than PGOOD_DEGLITCH_LIMIT
+    EXPECT_EQ(psu.hasPgoodFault(), false);
     EXPECT_EQ(psu.hasPSKillFault(), true);
     EXPECT_EQ(psu.hasPS12VcsFault(), true);
     EXPECT_EQ(psu.hasPSCS12VFault(), true);
@@ -977,7 +979,8 @@
     EXPECT_EQ(psu.hasVoutUVFault(), false);
     EXPECT_EQ(psu.hasFanFault(), true);
     EXPECT_EQ(psu.hasTempFault(), true);
-    EXPECT_EQ(psu.hasPgoodFault(), true);
+    // No PGOOD fault, as less than PGOOD_DEGLITCH_LIMIT
+    EXPECT_EQ(psu.hasPgoodFault(), false);
     EXPECT_EQ(psu.hasPSKillFault(), true);
     EXPECT_EQ(psu.hasPS12VcsFault(), true);
     EXPECT_EQ(psu.hasPSCS12VFault(), true);
@@ -1670,21 +1673,35 @@
         .Times(1)
         .WillOnce(Return("207400"));
     psu.analyze();
-    // Expect false until reaches DEGLITCH_LIMIT
+    // Expect false until reaches PGOOD_DEGLITCH_LIMIT @ 1
     EXPECT_EQ(psu.hasPgoodFault(), false);
     setPMBusExpectations(mockPMBus, expectations);
     EXPECT_CALL(mockPMBus, readString(READ_VIN, _))
         .Times(1)
         .WillOnce(Return("207500"));
     psu.analyze();
-    // Expect false until reaches DEGLITCH_LIMIT
+    // Expect false until reaches PGOOD_DEGLITCH_LIMIT @ 2
     EXPECT_EQ(psu.hasPgoodFault(), false);
     setPMBusExpectations(mockPMBus, expectations);
     EXPECT_CALL(mockPMBus, readString(READ_VIN, _))
         .Times(1)
         .WillOnce(Return("207600"));
     psu.analyze();
-    // DEGLITCH_LIMIT reached, expect true.
+    // Expect false until reaches PGOOD_DEGLITCH_LIMIT @ 3
+    EXPECT_EQ(psu.hasPgoodFault(), false);
+    setPMBusExpectations(mockPMBus, expectations);
+    EXPECT_CALL(mockPMBus, readString(READ_VIN, _))
+        .Times(1)
+        .WillOnce(Return("207700"));
+    psu.analyze();
+    // Expect false until reaches PGOOD_DEGLITCH_LIMIT @ 4
+    EXPECT_EQ(psu.hasPgoodFault(), false);
+    setPMBusExpectations(mockPMBus, expectations);
+    EXPECT_CALL(mockPMBus, readString(READ_VIN, _))
+        .Times(1)
+        .WillOnce(Return("207800"));
+    psu.analyze();
+    // Expect true. PGOOD_DEGLITCH_LIMIT @ 5
     EXPECT_EQ(psu.hasPgoodFault(), true);
     // Back to no fault bits on in STATUS_WORD
     expectations.statusWordValue = 0;
@@ -1716,6 +1733,18 @@
         .Times(1)
         .WillOnce(Return("208300"));
     psu.analyze();
+    EXPECT_EQ(psu.hasPgoodFault(), false);
+    setPMBusExpectations(mockPMBus, expectations);
+    EXPECT_CALL(mockPMBus, readString(READ_VIN, _))
+        .Times(1)
+        .WillOnce(Return("208400"));
+    psu.analyze();
+    EXPECT_EQ(psu.hasPgoodFault(), false);
+    setPMBusExpectations(mockPMBus, expectations);
+    EXPECT_CALL(mockPMBus, readString(READ_VIN, _))
+        .Times(1)
+        .WillOnce(Return("208500"));
+    psu.analyze();
     EXPECT_EQ(psu.hasPgoodFault(), true);
     // Back to no fault bits on in STATUS_WORD
     expectations.statusWordValue = 0;
@@ -1723,7 +1752,7 @@
     // Call to analyze will trigger read of "in1_input" to check voltage.
     EXPECT_CALL(mockPMBus, readString(READ_VIN, _))
         .Times(1)
-        .WillOnce(Return("208400"));
+        .WillOnce(Return("208000"));
     psu.analyze();
     EXPECT_EQ(psu.hasPgoodFault(), false);
 }