wspoon: Activate fan control events at poweron

Utilize the pgood property as a precondition to loading fan control
events based on property states other than the OCC active events. Since
the OCCs are not active when powered off (pgood = 0) those events having
OCCs active as a precondition are not necessary to be added.

This is the first step to enabling fan control to run at BMC standby.
When the default phosphor-fan-control@.service starts after power on,
the pgood property value is already set to 1. Therefore this produces no
change in fan control activity.

Tested:
    No change in fan speed control

(From meta-ibm rev: dadf39cdbb093e0c2566189f3e876dd3c01e13d0)

Change-Id: Ieb010804d59ed318463fca1fcbdce5b5123b81df
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/meta-ibm/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-events-config/witherspoon/events.yaml b/meta-ibm/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-events-config/witherspoon/events.yaml
index 74a34e0..5534cb6 100644
--- a/meta-ibm/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-events-config/witherspoon/events.yaml
+++ b/meta-ibm/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-events-config/witherspoon/events.yaml
@@ -1,4 +1,9 @@
 groups:
+    - name: poweron_pgood
+      description: System poweron pgood state
+      type: /org/openbmc/control
+      members:
+          - /power0
     - name: zone0_control_mode
       description: Thermal control mode for zone 0
       service: xyz.openbmc_project.Control.Thermal
@@ -353,202 +358,220 @@
                   speed:
                       value: 10500
                       type: uint64_t
-    - name: missing_or_fails_before_high_speed_air
-      groups:
-          - name: air_cooled_zone0_fans
-            zone_conditions:
-                - name: air_cooled_chassis
-                  zones:
-                      - 0
-            interface: xyz.openbmc_project.Inventory.Item
-            property:
-                name: Present
-                type: bool
-          - name: air_cooled_zone0_fans
-            zone_conditions:
-                - name: air_cooled_chassis
-                  zones:
-                      - 0
-            interface: xyz.openbmc_project.State.Decorator.OperationalStatus
-            property:
-                name: Functional
-                type: bool
-      triggers:
-          - name: init
-            method: getProperties
-            handler: setProperty
-          - name: signal
-            signal: propertiesChanged
-            handler: setProperty
-      actions:
-          - name: count_state_before_speed
-            count: 1
-            property:
-                value: false
-                type: bool
-            speed:
-                value: 10500
-                type: uint64_t
-    - name: missing_or_fails_before_high_speed_water_and_air
-      groups:
-          - name: water_and_air_cooled_zone0_fans
-            zone_conditions:
-                - name: water_and_air_cooled_chassis
-                  zones:
-                      - 0
-            interface: xyz.openbmc_project.Inventory.Item
-            property:
-                name: Present
-                type: bool
-          - name: water_and_air_cooled_zone0_fans
-            zone_conditions:
-                - name: water_and_air_cooled_chassis
-                  zones:
-                      - 0
-            interface: xyz.openbmc_project.State.Decorator.OperationalStatus
-            property:
-                name: Functional
-                type: bool
-      triggers:
-          - name: init
-            method: getProperties
-            handler: setProperty
-          - name: signal
-            signal: propertiesChanged
-            handler: setProperty
-      actions:
-          - name: count_state_before_speed
-            count: 1
-            property:
-                value: false
-                type: bool
-            speed:
-                value: 10500
-                type: uint64_t
-    - name: set_air_cooled_speed_boundaries_based_on_ambient
-      groups:
-          - name: zone0_control_mode
-            zone_conditions:
-                - name: air_cooled_chassis
-                  zones:
-                      - 0
-            interface: xyz.openbmc_project.Control.ThermalMode
-            property:
-                name: Current
-                type: std::string
-      triggers:
-          - name: init
-            method: getProperties
-            handler: setProperty
-          - name: signal
-            signal: propertiesChanged
-            handler: setProperty
-      actions:
-          - name: use_alternate_events_on_state
-            property:
-                value: CUSTOM
-                type: std::string
-            defevents:
-                - name: default_floor_boundary
-                  groups:
-                      - name: zone0_ambient
-                        zone_conditions:
-                            - name: air_cooled_chassis
-                              zones:
-                                  - 0
-                        interface: xyz.openbmc_project.Sensor.Value
-                        property:
-                            name: Value
-                            type: int64_t
-                  triggers:
-                      - name: init
-                        method: getProperties
-                        handler: setProperty
-                      - name: signal
-                        signal: propertiesChanged
-                        handler: setProperty
-                  actions:
-                      - name: set_floor_from_average_sensor_value
-                        map:
-                            value:
-                                - 27000: 3500
-                                - 32000: 4600
-                                - 37000: 5200
-                                - 40000: 5800
-                            type: std::map<int64_t, uint64_t>
-                      - name: set_ceiling_from_average_sensor_value
-                        map:
-                            value:
-                                - 25000: 7200
-                                - 27000: 10500
-                            type: std::map<int64_t, uint64_t>
-            altevents:
-                - name: alternate_floor_boundary
-                  groups:
-                      - name: zone0_ambient
-                        zone_conditions:
-                            - name: air_cooled_chassis
-                              zones:
-                                  - 0
-                        interface: xyz.openbmc_project.Sensor.Value
-                        property:
-                            name: Value
-                            type: int64_t
-                  triggers:
-                      - name: init
-                        method: getProperties
-                        handler: setProperty
-                      - name: signal
-                        signal: propertiesChanged
-                        handler: setProperty
-                  actions:
-                      - name: set_floor_from_average_sensor_value
-                        map:
-                            value:
-                                - 27000: 4600
-                                - 32000: 5000
-                                - 37000: 5400
-                                - 40000: 5800
-                            type: std::map<int64_t, uint64_t>
-                      - name: set_ceiling_from_average_sensor_value
-                        map:
-                            value:
-                                - 25000: 7200
-                                - 27000: 10500
-                            type: std::map<int64_t, uint64_t>
-    - name: set_water_cooled_speed_boundaries_based_on_ambient
-      groups:
-          - name: zone0_ambient
-            zone_conditions:
-                - name: water_and_air_cooled_chassis
-                  zones:
-                      - 0
-            interface: xyz.openbmc_project.Sensor.Value
-            property:
-                name: Value
-                type: int64_t
-      triggers:
-          - name: init
-            method: getProperties
-            handler: setProperty
-          - name: signal
-            signal: propertiesChanged
-            handler: setProperty
-      actions:
-          - name: set_floor_from_average_sensor_value
-            map:
-                value:
-                    - 27000: 3000
-                    - 32000: 4300
-                    - 37000: 5000
-                    - 40000: 5800
-                type: std::map<int64_t, uint64_t>
-          - name: set_ceiling_from_average_sensor_value
-            map:
-                value:
-                    - 25000: 7200
-                    - 27000: 10500
-                type: std::map<int64_t, uint64_t>
+    - name: full_speed_at_power_on
+      precondition:
+          name: property_states_match
+          groups:
+              - name: poweron_pgood
+                interface: org.openbmc.control.Power
+                property:
+                    name: pgood
+                    type: int32_t
+                    value: 1
+          triggers:
+              - name: init
+                method: getProperties
+                handler: setProperty
+              - name: signal
+                signal: propertiesChanged
+                handler: setProperty
+          events:
+            - name: missing_or_fails_before_high_speed_air
+              groups:
+                  - name: air_cooled_zone0_fans
+                    zone_conditions:
+                        - name: air_cooled_chassis
+                          zones:
+                              - 0
+                    interface: xyz.openbmc_project.Inventory.Item
+                    property:
+                        name: Present
+                        type: bool
+                  - name: air_cooled_zone0_fans
+                    zone_conditions:
+                        - name: air_cooled_chassis
+                          zones:
+                              - 0
+                    interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+                    property:
+                        name: Functional
+                        type: bool
+              triggers:
+                  - name: init
+                    method: getProperties
+                    handler: setProperty
+                  - name: signal
+                    signal: propertiesChanged
+                    handler: setProperty
+              actions:
+                  - name: count_state_before_speed
+                    count: 1
+                    property:
+                        value: false
+                        type: bool
+                    speed:
+                        value: 10500
+                        type: uint64_t
+            - name: missing_or_fails_before_high_speed_water_and_air
+              groups:
+                  - name: water_and_air_cooled_zone0_fans
+                    zone_conditions:
+                        - name: water_and_air_cooled_chassis
+                          zones:
+                              - 0
+                    interface: xyz.openbmc_project.Inventory.Item
+                    property:
+                        name: Present
+                        type: bool
+                  - name: water_and_air_cooled_zone0_fans
+                    zone_conditions:
+                        - name: water_and_air_cooled_chassis
+                          zones:
+                              - 0
+                    interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+                    property:
+                        name: Functional
+                        type: bool
+              triggers:
+                  - name: init
+                    method: getProperties
+                    handler: setProperty
+                  - name: signal
+                    signal: propertiesChanged
+                    handler: setProperty
+              actions:
+                  - name: count_state_before_speed
+                    count: 1
+                    property:
+                        value: false
+                        type: bool
+                    speed:
+                        value: 10500
+                        type: uint64_t
+            - name: set_air_cooled_speed_boundaries_based_on_ambient
+              groups:
+                  - name: zone0_control_mode
+                    zone_conditions:
+                        - name: air_cooled_chassis
+                          zones:
+                              - 0
+                    interface: xyz.openbmc_project.Control.ThermalMode
+                    property:
+                        name: Current
+                        type: std::string
+              triggers:
+                  - name: init
+                    method: getProperties
+                    handler: setProperty
+                  - name: signal
+                    signal: propertiesChanged
+                    handler: setProperty
+              actions:
+                  - name: use_alternate_events_on_state
+                    property:
+                        value: CUSTOM
+                        type: std::string
+                    defevents:
+                        - name: default_floor_boundary
+                          groups:
+                              - name: zone0_ambient
+                                zone_conditions:
+                                    - name: air_cooled_chassis
+                                      zones:
+                                          - 0
+                                interface: xyz.openbmc_project.Sensor.Value
+                                property:
+                                    name: Value
+                                    type: int64_t
+                          triggers:
+                              - name: init
+                                method: getProperties
+                                handler: setProperty
+                              - name: signal
+                                signal: propertiesChanged
+                                handler: setProperty
+                          actions:
+                              - name: set_floor_from_average_sensor_value
+                                map:
+                                    value:
+                                        - 27000: 3500
+                                        - 32000: 4600
+                                        - 37000: 5200
+                                        - 40000: 5800
+                                    type: std::map<int64_t, uint64_t>
+                              - name: set_ceiling_from_average_sensor_value
+                                map:
+                                    value:
+                                        - 25000: 7200
+                                        - 27000: 10500
+                                    type: std::map<int64_t, uint64_t>
+                    altevents:
+                        - name: alternate_floor_boundary
+                          groups:
+                              - name: zone0_ambient
+                                zone_conditions:
+                                    - name: air_cooled_chassis
+                                      zones:
+                                          - 0
+                                interface: xyz.openbmc_project.Sensor.Value
+                                property:
+                                    name: Value
+                                    type: int64_t
+                          triggers:
+                              - name: init
+                                method: getProperties
+                                handler: setProperty
+                              - name: signal
+                                signal: propertiesChanged
+                                handler: setProperty
+                          actions:
+                              - name: set_floor_from_average_sensor_value
+                                map:
+                                    value:
+                                        - 27000: 4600
+                                        - 32000: 5000
+                                        - 37000: 5400
+                                        - 40000: 5800
+                                    type: std::map<int64_t, uint64_t>
+                              - name: set_ceiling_from_average_sensor_value
+                                map:
+                                    value:
+                                        - 25000: 7200
+                                        - 27000: 10500
+                                    type: std::map<int64_t, uint64_t>
+            - name: set_water_cooled_speed_boundaries_based_on_ambient
+              groups:
+                  - name: zone0_ambient
+                    zone_conditions:
+                        - name: water_and_air_cooled_chassis
+                          zones:
+                              - 0
+                    interface: xyz.openbmc_project.Sensor.Value
+                    property:
+                        name: Value
+                        type: int64_t
+              triggers:
+                  - name: init
+                    method: getProperties
+                    handler: setProperty
+                  - name: signal
+                    signal: propertiesChanged
+                    handler: setProperty
+              actions:
+                  - name: set_floor_from_average_sensor_value
+                    map:
+                        value:
+                            - 27000: 3000
+                            - 32000: 4300
+                            - 37000: 5000
+                            - 40000: 5800
+                        type: std::map<int64_t, uint64_t>
+                  - name: set_ceiling_from_average_sensor_value
+                    map:
+                        value:
+                            - 25000: 7200
+                            - 27000: 10500
+                        type: std::map<int64_t, uint64_t>
     - name: occ_active_speed_changes
       precondition:
           name: property_states_match