wspoon: MAX31785revA fan controller workaround

The MAX31785revA specification does not match how it functions.

The MAX31785revA's functionality reports the rotor feedback speeds in a
slow/fast relationship instead of rotor positions, therefore the fan*_0
object will always represent the slowest rotor. In combination with how
the MAX31785revA latches its TACHSEL = 0 during a speed transition, it
made it difficult to fault isolate the rear rotor of a fan.

Using a combination of the fan monitor trust groups on all fan rotors
and enabling a delay timer to determine when a fan rotor becomes
functional, fan monitor is able to correctly reflect each fan rotor and
fan enclosure's functional state in inventory.

Fan faults are unable to be monitored on all fans when transitioning to
a target speed.

Tested:
    Each fan rotor's functional state is updated when blocked
    Correct amount of time to mark a fan nonfunctional is still honored
    A fan is functional after remaining in spec for 5 seconds

Resolves openbmc/openbmc#2798

Change-Id: I834d63f6082eae4cb03ec501f0fb8272a9f5b673
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml
index 91a7e29..feda646 100644
--- a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml
@@ -1,5 +1,6 @@
 fans:
   - inventory: /system/chassis/motherboard/fan0
+    functional_delay: 5
     allowed_out_of_range_time: 30
     deviation: 15
     num_sensors_nonfunc_for_fan_nonfunc: 1
@@ -10,6 +11,7 @@
         has_target: false
 
   - inventory: /system/chassis/motherboard/fan1
+    functional_delay: 5
     allowed_out_of_range_time: 30
     deviation: 15
     num_sensors_nonfunc_for_fan_nonfunc: 1
@@ -20,6 +22,7 @@
         has_target: false
 
   - inventory: /system/chassis/motherboard/fan2
+    functional_delay: 5
     allowed_out_of_range_time: 30
     deviation: 15
     num_sensors_nonfunc_for_fan_nonfunc: 1
@@ -30,6 +33,7 @@
         has_target: false
 
   - inventory: /system/chassis/motherboard/fan3
+    functional_delay: 5
     allowed_out_of_range_time: 30
     deviation: 15
     num_sensors_nonfunc_for_fan_nonfunc: 1
@@ -41,8 +45,19 @@
 
 sensor_trust_groups:
   - class: NonzeroSpeed
-    sensors:
+    group:
+        # Include all _1 fans to determine trust
       - name: fan0_1
       - name: fan1_1
       - name: fan2_1
       - name: fan3_1
+        # Add all _0 fans to be included in trust result effects,
+        # but not in determining trust
+      - name: fan0_0
+        in_trust: false
+      - name: fan1_0
+        in_trust: false
+      - name: fan2_0
+        in_trust: false
+      - name: fan3_0
+        in_trust: false