summaryrefslogtreecommitdiff
path: root/meta-ibm/recipes-phosphor/fans
diff options
context:
space:
mode:
Diffstat (limited to 'meta-ibm/recipes-phosphor/fans')
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config.bbappend1
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config/mihawk/events.yaml840
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config/witherspoon/events.yaml1044
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config.bbappend1
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/mihawk/fans.yaml37
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/swift/fans.yaml21
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/witherspoon/fans.yaml21
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config.bbappend1
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/mihawk/zone_conditions.yaml9
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/swift/zone_conditions.yaml18
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/witherspoon/zone_conditions.yaml18
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config.bbappend1
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/mihawk/zones.yaml42
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/swift/zones.yaml68
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/witherspoon/zones.yaml100
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config.bbappend1
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/mihawk/monitor.yaml96
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/swift/monitor.yaml36
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/witherspoon/monitor.yaml73
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config.bbappend11
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/mihawk/config.yaml47
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/swift/config.yaml62
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/witherspoon/config.json90
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/fan-watchdog-conflicts.conf2
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/fan-watchdog-monitor.conf5
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/mihawk/obmc/phosphor-fan/phosphor-cooling-type-0.conf3
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/mihawk/phosphor-cooling-type@.service15
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/swift/obmc/phosphor-fan/phosphor-cooling-type-0.conf6
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/swift/phosphor-cooling-type@.service15
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon-tacoma/obmc/phosphor-fan/phosphor-cooling-type-0.conf5
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/obmc/phosphor-fan/phosphor-cooling-type-0.conf6
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/phosphor-cooling-type@.service15
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/phosphor-fan-control@.service11
-rw-r--r--meta-ibm/recipes-phosphor/fans/phosphor-fan_%.bbappend59
-rw-r--r--meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog.bb23
-rw-r--r--meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/obmc/witherspoon-fan-watchdog/fan-watchdog.conf3
-rw-r--r--meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/obmc/witherspoon-fan-watchdog/reset-fan-watchdog.conf4
-rw-r--r--meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-fan-watchdog-monitor@.service10
-rw-r--r--meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-fan-watchdog.service13
-rw-r--r--meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-reset-fan-watchdog.service12
40 files changed, 2845 insertions, 0 deletions
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config.bbappend b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config.bbappend
new file mode 100644
index 000000000..8f2097cc1
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config/mihawk/events.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config/mihawk/events.yaml
new file mode 100644
index 000000000..2efbb0c7d
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config/mihawk/events.yaml
@@ -0,0 +1,840 @@
+groups:
+ - name: zone0_control_mode
+ description: Thermal control mode for zone 0
+ service: xyz.openbmc_project.Control.Thermal
+ type: /xyz/openbmc_project/control/thermal
+ members:
+ - /0
+ - name: air_cooled_zone0_fans
+ description: Group of fan inventory objects for air cooled zone 0
+ type: /xyz/openbmc_project/inventory
+ members:
+ - /system/chassis/motherboard/fan0
+ - /system/chassis/motherboard/fan1
+ - /system/chassis/motherboard/fan2
+ - /system/chassis/motherboard/fan3
+ - /system/chassis/motherboard/fan4
+ - /system/chassis/motherboard/fan5
+ - name: zone0_ambient
+ description: Group of ambient temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/ambient_temp
+ - name: occ0_object
+ description: Dbus object containing OCC0 properties
+ type: /org/open_power/control
+ members:
+ - /occ0
+ - name: occ1_object
+ description: Dbus object containing OCC1 properties
+ type: /org/open_power/control
+ members:
+ - /occ1
+ - name: zone0_cores
+ description: Group of core temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/p0_core0_temp
+ - /temperature/p0_core1_temp
+ - /temperature/p0_core2_temp
+ - /temperature/p0_core3_temp
+ - /temperature/p0_core4_temp
+ - /temperature/p0_core5_temp
+ - /temperature/p0_core6_temp
+ - /temperature/p0_core7_temp
+ - /temperature/p0_core8_temp
+ - /temperature/p0_core9_temp
+ - /temperature/p0_core10_temp
+ - /temperature/p0_core11_temp
+ - /temperature/p0_core12_temp
+ - /temperature/p0_core13_temp
+ - /temperature/p0_core14_temp
+ - /temperature/p0_core15_temp
+ - /temperature/p0_core16_temp
+ - /temperature/p0_core17_temp
+ - /temperature/p0_core18_temp
+ - /temperature/p0_core19_temp
+ - /temperature/p0_core20_temp
+ - /temperature/p0_core21_temp
+ - /temperature/p0_core22_temp
+ - /temperature/p0_core23_temp
+ - /temperature/p1_core0_temp
+ - /temperature/p1_core1_temp
+ - /temperature/p1_core2_temp
+ - /temperature/p1_core3_temp
+ - /temperature/p1_core4_temp
+ - /temperature/p1_core5_temp
+ - /temperature/p1_core6_temp
+ - /temperature/p1_core7_temp
+ - /temperature/p1_core8_temp
+ - /temperature/p1_core9_temp
+ - /temperature/p1_core10_temp
+ - /temperature/p1_core11_temp
+ - /temperature/p1_core12_temp
+ - /temperature/p1_core13_temp
+ - /temperature/p1_core14_temp
+ - /temperature/p1_core15_temp
+ - /temperature/p1_core16_temp
+ - /temperature/p1_core17_temp
+ - /temperature/p1_core18_temp
+ - /temperature/p1_core19_temp
+ - /temperature/p1_core20_temp
+ - /temperature/p1_core21_temp
+ - /temperature/p1_core22_temp
+ - /temperature/p1_core23_temp
+ - name: zone0_dimms
+ description: Group of dimm temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/dimm0_temp
+ - /temperature/dimm1_temp
+ - /temperature/dimm2_temp
+ - /temperature/dimm3_temp
+ - /temperature/dimm4_temp
+ - /temperature/dimm5_temp
+ - /temperature/dimm6_temp
+ - /temperature/dimm7_temp
+ - /temperature/dimm8_temp
+ - /temperature/dimm9_temp
+ - /temperature/dimm10_temp
+ - /temperature/dimm11_temp
+ - /temperature/dimm12_temp
+ - /temperature/dimm13_temp
+ - /temperature/dimm14_temp
+ - /temperature/dimm15_temp
+ - /temperature/dimm16_temp
+ - /temperature/dimm17_temp
+ - /temperature/dimm18_temp
+ - /temperature/dimm19_temp
+ - /temperature/dimm20_temp
+ - /temperature/dimm21_temp
+ - /temperature/dimm22_temp
+ - /temperature/dimm23_temp
+ - /temperature/dimm24_temp
+ - /temperature/dimm25_temp
+ - /temperature/dimm26_temp
+ - /temperature/dimm27_temp
+ - /temperature/dimm28_temp
+ - /temperature/dimm29_temp
+ - /temperature/dimm30_temp
+ - /temperature/dimm31_temp
+ - name: zone0_onboard
+ description: Group of onboard temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/p0_pcie_temp
+ - /temperature/p1_pcie_temp
+ - name: zone0_vrd
+ description: Group of vrd temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/p0_vcs_temp
+ - /temperature/p0_vdn_temp
+ - /temperature/p1_vcs_temp
+ - /temperature/p1_vdn_temp
+ - /temperature/p0_vdd_temp
+ - /temperature/p1_vdd_temp
+ - name: zone0_gpu
+ description: Group of gpu temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/gpu0
+ - /temperature/gpu1
+ - /temperature/gpu2
+ - /temperature/gpu3
+ - /temperature/gpu4
+ - /temperature/gpu5
+ - /temperature/gpu6
+ - /temperature/gpu7
+ - name: zone0_nvme
+ description: Group of nvme temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/nvme0
+ - /temperature/nvme1
+ - /temperature/nvme2
+ - /temperature/nvme3
+ - /temperature/nvme4
+ - /temperature/nvme5
+ - /temperature/nvme6
+ - /temperature/nvme7
+ - /temperature/nvme8
+ - /temperature/nvme9
+ - /temperature/nvme10
+ - /temperature/nvme11
+ - /temperature/nvme12
+ - /temperature/nvme13
+ - /temperature/nvme14
+ - /temperature/nvme15
+ - /temperature/nvme16
+ - /temperature/nvme17
+ - /temperature/nvme18
+ - /temperature/nvme19
+ - /temperature/nvme20
+ - /temperature/nvme21
+ - /temperature/nvme22
+ - /temperature/nvme23
+matches:
+ - name: propertiesChanged
+ parameters:
+ - object
+ - interface
+ - name: interfacesAdded
+ parameters:
+ - object
+ - name: interfacesRemoved
+ parameters:
+ - object
+ - name: nameOwnerChanged
+ parameters:
+ - object
+ - interface
+
+signals:
+ - name: propertiesChanged
+ description: >
+ A property changed match
+ parameters:
+ - type
+ - object
+ - interface
+ - property
+ match: propertiesChanged
+ - name: interfacesAdded
+ description: >
+ An interfaces added match
+ parameters:
+ - type
+ - object
+ - interface
+ - property
+ match: interfacesAdded
+ - name: interfacesRemoved
+ description: >
+ An interfaces removed match
+ parameters:
+ - object
+ - interface
+ match: interfacesRemoved
+ - name: nameOwnerChanged
+ description: >
+ A name owner changed match
+ parameters:
+ match: nameOwnerChanged
+
+methods:
+ - name: getProperties
+ description: >
+ Get the property values of the given group members
+ by performing a `GetProperty` method call on each
+ parameters:
+ - type
+ - name: nameHasOwner
+ description: >
+ A NameHasOwner method call to be performed on all event group members
+ parameters:
+
+handlers:
+ - name: setProperty
+ description: >
+ Sets a value for the given object/interface/property
+ parameters:
+ - type
+ - name: setService
+ description: >
+ Sets the service name and ownership status for the given group
+ parameters:
+ - group
+ - name: removeInterface
+ description: >
+ Removes an interface(and all associated properties) on the
+ given object from use within all event actions
+ parameters:
+ - object
+ - interface
+
+preconditions:
+ - name: property_states_match
+ description: >
+ All defined properties must match the values given to
+ enable a set speed event otherwise fan speeds are set to full
+ parameters:
+ - groups
+ - name: services_missing_owner
+ description: >
+ Any services missing an owner enable the events given otherwise
+ the events are removed/disabled
+ parameters:
+
+actions:
+ - name: call_actions_based_on_timer
+ description: >
+ Sets up a list of actions to be invoked when the defined timer
+ expires (or for each expiration of a repeating timer)
+ parameters:
+ - timer
+ - actions
+ - name: default_floor_on_missing_owner
+ description: >
+ Set the fan floor to the default floor
+ - name: set_speed_on_missing_owner
+ description: >
+ Set fans to the given speed when any service within the group
+ no longer exists
+ parameters:
+ - speed
+ - name: set_request_speed_base_with_max
+ description: >
+ Set the base request speed of a zone to the max value of a group for
+ calculating a new target speed
+ - name: count_state_before_speed
+ description: Set the speed when a number of properties at a state
+ parameters:
+ - count
+ - property
+ - speed
+ - name: set_floor_from_average_sensor_value
+ description: Set floor speed from first entry with average less than key
+ parameters:
+ - map
+ - name: set_ceiling_from_average_sensor_value
+ description: Set ceiling speed based on key transition values with average
+ parameters:
+ - map
+ - name: set_net_increase_speed
+ description: >
+ Set the speed increase delta based on a factor applied to
+ the delta increase size times the given value and property's
+ value difference
+ parameters:
+ - property
+ - factor
+ - delta
+ - name: set_net_decrease_speed
+ description: >
+ Set the speed decrease delta based on a factor applied to
+ the delta decrease size times the given value and property's
+ value difference
+ parameters:
+ - property
+ - factor
+ - delta
+ - name: use_alternate_events_on_state
+ description: >
+ Replaces a set of default events with an alternate set of events
+ when all the group properties are at a given state
+ parameters:
+ - property
+ - defevents
+ - altevents
+
+events:
+ - name: default_fan_floor_on_service_fail
+ precondition:
+ name: services_missing_owner
+ groups:
+ - name: zone0_ambient
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ triggers:
+ - name: init
+ method: nameHasOwner
+ handler: setService
+ - name: signal
+ signal: nameOwnerChanged
+ handler: setService
+ events:
+ - name: default_fan_floor
+ groups:
+ - name: zone0_ambient
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ triggers:
+ - name: timer
+ interval: 5000000
+ type: oneshot
+ actions:
+ - name: default_floor_on_missing_owner
+ - name: high_speed_on_occ_service_fails
+ groups:
+ - name: occ0_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ - name: occ1_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ triggers:
+ - name: init
+ method: nameHasOwner
+ handler: setService
+ - name: signal
+ signal: nameOwnerChanged
+ handler: setService
+ actions:
+ - name: call_actions_based_on_timer
+ timer:
+ interval: 5000000
+ type: oneshot
+ actions:
+ - name: set_speed_on_missing_owner
+ speed:
+ value: 255
+ 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: 255
+ 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:
+ - 25000: 85
+ - 26000: 85
+ - 28000: 97
+ - 31000: 116
+ - 33000: 128
+ - 36000: 148
+ - 38000: 160
+ - 41000: 255
+ type: std::map<int64_t, uint64_t>
+ - name: set_ceiling_from_average_sensor_value
+ map:
+ value:
+ - 25000: 255
+ - 27000: 255
+ 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:
+ - 25000: 255
+ - 26000: 255
+ - 28000: 255
+ - 31000: 255
+ - 33000: 255
+ - 36000: 255
+ - 38000: 255
+ - 41000: 255
+ type: std::map<int64_t, uint64_t>
+ - name: set_ceiling_from_average_sensor_value
+ map:
+ value:
+ - 25000: 255
+ - 27000: 255
+ type: std::map<int64_t, uint64_t>
+ - name: occ_active_speed_changes
+ precondition:
+ name: property_states_match
+ groups:
+ - name: occ0_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ value: true
+ - name: occ1_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ value: true
+ triggers:
+ - name: init
+ method: getProperties
+ handler: setProperty
+ - name: signal
+ signal: interfacesAdded
+ handler: setProperty
+ - name: signal
+ signal: propertiesChanged
+ handler: setProperty
+ events:
+ - name: speed_control_sensors
+ groups:
+ - name: zone0_onboard
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_vrd
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_cores
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_dimms
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_gpu
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_nvme
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ triggers:
+ - name: init
+ method: getProperties
+ handler: setProperty
+ - name: signal
+ signal: interfacesAdded
+ handler: setProperty
+ - name: signal
+ signal: propertiesChanged
+ handler: setProperty
+ - name: signal
+ signal: interfacesRemoved
+ handler: removeInterface
+ - name: fails_before_high_speed_air
+ groups:
+ - name: zone0_cores
+ interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ property:
+ name: Functional
+ type: bool
+ - name: zone0_dimms
+ interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ property:
+ name: Functional
+ type: bool
+ triggers:
+ - name: init
+ method: getProperties
+ handler: setProperty
+ - name: signal
+ signal: interfacesAdded
+ handler: setProperty
+ - name: signal
+ signal: propertiesChanged
+ handler: setProperty
+ actions:
+ - name: count_state_before_speed
+ count: 1
+ property:
+ value: false
+ type: bool
+ speed:
+ value: 255
+ type: uint64_t
+ - name: 1sec_speed_change_request_sampling
+ triggers:
+ - name: timer
+ interval: 1000000
+ type: repeating
+ actions:
+ # Speed changes based on onboard temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_onboard
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 55000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 8
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_onboard
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 52000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 3
+ type: uint64_t
+ # Speed changes based on vrd temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_vrd
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 90000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 5
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_vrd
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 85000
+ type: int64_t
+ factor:
+ value: 3000
+ type: int64_t
+ delta:
+ value: 3
+ type: uint64_t
+ # Speed changes based on core temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 75000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 13
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 70000
+ type: int64_t
+ factor:
+ value: 4000
+ type: int64_t
+ delta:
+ value: 5
+ type: uint64_t
+ # Speed changes based on dimm temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_dimms
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 80000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 8
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_dimms
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 75000
+ type: int64_t
+ factor:
+ value: 3000
+ type: int64_t
+ delta:
+ value: 3
+ type: uint64_t
+ # Speed changes based on gpu temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_gpu
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 80
+ type: int64_t
+ factor:
+ value: 1
+ type: int64_t
+ delta:
+ value: 13
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_gpu
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 77
+ type: int64_t
+ factor:
+ value: 4
+ type: int64_t
+ delta:
+ value: 5
+ type: uint64_t
+ # Speed changes based on nvme temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_nvme
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 55
+ type: int64_t
+ factor:
+ value: 1
+ type: int64_t
+ delta:
+ value: 13
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_nvme
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 52
+ type: int64_t
+ factor:
+ value: 3
+ type: int64_t
+ delta:
+ value: 5
+ type: uint64_t
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config/witherspoon/events.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config/witherspoon/events.yaml
new file mode 100644
index 000000000..c1902d02b
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-events-config/witherspoon/events.yaml
@@ -0,0 +1,1044 @@
+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
+ type: /xyz/openbmc_project/control/thermal
+ members:
+ - /0
+ - name: air_cooled_zone0_fans
+ description: Group of fan inventory objects for air cooled zone 0
+ type: /xyz/openbmc_project/inventory
+ members:
+ - /system/chassis/motherboard/fan0
+ - /system/chassis/motherboard/fan1
+ - /system/chassis/motherboard/fan2
+ - /system/chassis/motherboard/fan3
+ - name: water_and_air_cooled_zone0_fans
+ description: Group of fan inventory objects for water/air cooled zone 0
+ type: /xyz/openbmc_project/inventory
+ members:
+ - /system/chassis/motherboard/fan0
+ - /system/chassis/motherboard/fan2
+ - /system/chassis/motherboard/fan3
+ - name: zone0_ambient
+ description: Group of ambient temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/ambient
+ - name: occ0_object
+ description: Dbus object containing OCC0 properties
+ type: /org/open_power/control
+ members:
+ - /occ0
+ - name: occ1_object
+ description: Dbus object containing OCC1 properties
+ type: /org/open_power/control
+ members:
+ - /occ1
+ - name: zone0_cores
+ description: Group of core temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/p0_core0_temp
+ - /temperature/p0_core1_temp
+ - /temperature/p0_core2_temp
+ - /temperature/p0_core3_temp
+ - /temperature/p0_core4_temp
+ - /temperature/p0_core5_temp
+ - /temperature/p0_core6_temp
+ - /temperature/p0_core7_temp
+ - /temperature/p0_core8_temp
+ - /temperature/p0_core9_temp
+ - /temperature/p0_core10_temp
+ - /temperature/p0_core11_temp
+ - /temperature/p0_core12_temp
+ - /temperature/p0_core13_temp
+ - /temperature/p0_core14_temp
+ - /temperature/p0_core15_temp
+ - /temperature/p0_core16_temp
+ - /temperature/p0_core17_temp
+ - /temperature/p0_core18_temp
+ - /temperature/p0_core19_temp
+ - /temperature/p0_core20_temp
+ - /temperature/p0_core21_temp
+ - /temperature/p0_core22_temp
+ - /temperature/p0_core23_temp
+ - /temperature/p1_core0_temp
+ - /temperature/p1_core1_temp
+ - /temperature/p1_core2_temp
+ - /temperature/p1_core3_temp
+ - /temperature/p1_core4_temp
+ - /temperature/p1_core5_temp
+ - /temperature/p1_core6_temp
+ - /temperature/p1_core7_temp
+ - /temperature/p1_core8_temp
+ - /temperature/p1_core9_temp
+ - /temperature/p1_core10_temp
+ - /temperature/p1_core11_temp
+ - /temperature/p1_core12_temp
+ - /temperature/p1_core13_temp
+ - /temperature/p1_core14_temp
+ - /temperature/p1_core15_temp
+ - /temperature/p1_core16_temp
+ - /temperature/p1_core17_temp
+ - /temperature/p1_core18_temp
+ - /temperature/p1_core19_temp
+ - /temperature/p1_core20_temp
+ - /temperature/p1_core21_temp
+ - /temperature/p1_core22_temp
+ - /temperature/p1_core23_temp
+ - name: zone0_regulators
+ description: Group of regulator temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/p0_vdd_temp
+ - /temperature/p1_vdd_temp
+ - name: zone0_dimms
+ description: Group of dimm temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/dimm0_temp
+ - /temperature/dimm1_temp
+ - /temperature/dimm2_temp
+ - /temperature/dimm3_temp
+ - /temperature/dimm4_temp
+ - /temperature/dimm5_temp
+ - /temperature/dimm6_temp
+ - /temperature/dimm7_temp
+ - /temperature/dimm8_temp
+ - /temperature/dimm9_temp
+ - /temperature/dimm10_temp
+ - /temperature/dimm11_temp
+ - /temperature/dimm12_temp
+ - /temperature/dimm13_temp
+ - /temperature/dimm14_temp
+ - /temperature/dimm15_temp
+ - name: zone0_gpu_cores
+ description: Group of gpu core temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/gpu0_core_temp
+ - /temperature/gpu1_core_temp
+ - /temperature/gpu2_core_temp
+ - /temperature/gpu3_core_temp
+ - /temperature/gpu4_core_temp
+ - /temperature/gpu5_core_temp
+ - name: zone0_gpu_memory
+ description: Group of gpu memory temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/gpu0_mem_temp
+ - /temperature/gpu1_mem_temp
+ - /temperature/gpu2_mem_temp
+ - /temperature/gpu3_mem_temp
+ - /temperature/gpu4_mem_temp
+ - /temperature/gpu5_mem_temp
+ - name: zone0_pcie
+ description: Group of pcie temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/pcie
+
+matches:
+ - name: propertiesChanged
+ parameters:
+ - object
+ - interface
+ - name: interfacesAdded
+ parameters:
+ - object
+ - name: interfacesRemoved
+ parameters:
+ - object
+ - name: nameOwnerChanged
+ parameters:
+ - object
+ - interface
+
+signals:
+ - name: propertiesChanged
+ description: >
+ A property changed match
+ parameters:
+ - type
+ - object
+ - interface
+ - property
+ match: propertiesChanged
+ - name: interfacesAdded
+ description: >
+ An interfaces added match
+ parameters:
+ - type
+ - object
+ - interface
+ - property
+ match: interfacesAdded
+ - name: interfacesRemoved
+ description: >
+ An interfaces removed match
+ parameters:
+ - object
+ - interface
+ match: interfacesRemoved
+ - name: nameOwnerChanged
+ description: >
+ A name owner changed match
+ parameters:
+ match: nameOwnerChanged
+
+methods:
+ - name: getProperties
+ description: >
+ Get the property values of the given group members
+ by performing a `GetProperty` method call on each
+ parameters:
+ - type
+ - name: nameHasOwner
+ description: >
+ A NameHasOwner method call to be performed on all event group members
+ parameters:
+
+handlers:
+ - name: setProperty
+ description: >
+ Sets a value for the given object/interface/property
+ parameters:
+ - type
+ - name: setService
+ description: >
+ Sets the service name and ownership status for the given group
+ parameters:
+ - group
+ - name: removeInterface
+ description: >
+ Removes an interface(and all associated properties) on the
+ given object from use within all event actions
+ parameters:
+ - object
+ - interface
+
+preconditions:
+ - name: property_states_match
+ description: >
+ All defined properties must match the values given to
+ enable a set speed event otherwise fan speeds are set to full
+ parameters:
+ - groups
+ - name: services_missing_owner
+ description: >
+ Any services missing an owner enable the events given otherwise
+ the events are removed/disabled
+ parameters:
+
+actions:
+ - name: call_actions_based_on_timer
+ description: >
+ Sets up a list of actions to be invoked when the defined timer
+ expires (or for each expiration of a repeating timer)
+ parameters:
+ - timer
+ - actions
+ - name: default_floor_on_missing_owner
+ description: >
+ Set the fan floor to the default floor
+ - name: set_speed_on_missing_owner
+ description: >
+ Set fans to the given speed when any service within the group
+ no longer exists
+ parameters:
+ - speed
+ - name: set_request_speed_base_with_max
+ description: >
+ Set the base request speed of a zone to the max value of a group for
+ calculating a new target speed
+ - name: count_state_before_speed
+ description: Set the speed when a number of properties at a state
+ parameters:
+ - count
+ - property
+ - speed
+ - name: set_floor_from_average_sensor_value
+ description: Set floor speed from first entry with average less than key
+ parameters:
+ - map
+ - name: set_ceiling_from_average_sensor_value
+ description: Set ceiling speed based on key transition values with average
+ parameters:
+ - map
+ - name: set_net_increase_speed
+ description: >
+ Set the speed increase delta based on a factor applied to
+ the delta increase size times the given value and property's
+ value difference
+ parameters:
+ - property
+ - factor
+ - delta
+ - name: set_net_decrease_speed
+ description: >
+ Set the speed decrease delta based on a factor applied to
+ the delta decrease size times the given value and property's
+ value difference
+ parameters:
+ - property
+ - factor
+ - delta
+ - name: use_alternate_events_on_state
+ description: >
+ Replaces a set of default events with an alternate set of events
+ when all the group properties are at a given state
+ parameters:
+ - property
+ - defevents
+ - altevents
+ - name: update_default_floor
+ description: >
+ Update the default fan floor to the given speed
+ parameters:
+ - property
+ - speed
+ - name: use_events_on_state
+ description: >
+ Use a set of events when all the group properties are at a given
+ state, otherwise remove the events
+ parameters:
+ - property
+ - events
+
+events:
+ - name: default_fan_floor_on_service_fail
+ precondition:
+ name: services_missing_owner
+ groups:
+ - name: zone0_ambient
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ triggers:
+ - name: init
+ method: nameHasOwner
+ handler: setService
+ - name: signal
+ signal: nameOwnerChanged
+ handler: setService
+ events:
+ - name: default_fan_floor
+ groups:
+ - name: zone0_ambient
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ triggers:
+ - name: timer
+ interval: 5000000
+ type: oneshot
+ actions:
+ - name: default_floor_on_missing_owner
+ - name: high_speed_on_occ_service_fails
+ groups:
+ - name: occ0_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ - name: occ1_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ triggers:
+ - name: init
+ method: nameHasOwner
+ handler: setService
+ - name: signal
+ signal: nameOwnerChanged
+ handler: setService
+ actions:
+ - name: call_actions_based_on_timer
+ timer:
+ interval: 5000000
+ type: oneshot
+ actions:
+ - name: set_speed_on_missing_owner
+ speed:
+ value: 10500
+ type: uint64_t
+ - name: set_speed_boundaries_based_on_ambient
+ groups:
+ - name: zone0_control_mode
+ 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: update_default_floor
+ property:
+ value: DEFAULT
+ type: std::string
+ speed:
+ value: 8000
+ type: uint64_t
+ - name: update_default_floor
+ property:
+ value: CUSTOM
+ type: std::string
+ speed:
+ value: 8000
+ type: uint64_t
+ - name: update_default_floor
+ property:
+ value: HEAVY_IO
+ type: std::string
+ speed:
+ value: 10500
+ type: uint64_t
+ - name: update_default_floor
+ property:
+ value: MAX_BASE_FAN_FLOOR
+ type: std::string
+ speed:
+ value: 10500
+ type: uint64_t
+ - name: use_events_on_state
+ property:
+ value: DEFAULT
+ type: std::string
+ events:
+ - name: default_fan_speed_boundaries
+ 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>
+ - name: default_fan_speed_boundaries
+ 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: use_events_on_state
+ property:
+ value: CUSTOM
+ type: std::string
+ events:
+ - name: custom_fan_speed_boundaries
+ groups:
+ - name: zone0_ambient
+ 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: use_events_on_state
+ property:
+ value: HEAVY_IO
+ type: std::string
+ events:
+ - name: heavy_io_fan_speed_boundaries
+ groups:
+ - name: zone0_ambient
+ 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: 5900
+ - 32000: 6800
+ - 37000: 7500
+ - 40000: 8200
+ 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: use_events_on_state
+ property:
+ value: MAX_BASE_FAN_FLOOR
+ type: std::string
+ events:
+ - name: max_base_fan_floor_fan_speed_boundaries
+ groups:
+ - name: zone0_ambient
+ 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: 7200
+ - 32000: 8800
+ - 37000: 9600
+ - 40000: 10500
+ 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: occ_active_speed_changes
+ precondition:
+ name: property_states_match
+ groups:
+ - name: occ0_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ value: true
+ - name: occ1_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ value: true
+ triggers:
+ - name: init
+ method: getProperties
+ handler: setProperty
+ - name: signal
+ signal: interfacesAdded
+ handler: setProperty
+ - name: signal
+ signal: propertiesChanged
+ handler: setProperty
+ events:
+ - name: speed_control_sensors
+ groups:
+ - name: zone0_regulators
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_pcie
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_dimms
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_gpu_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ - name: zone0_gpu_memory
+ 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: interfacesAdded
+ handler: setProperty
+ - name: signal
+ signal: propertiesChanged
+ handler: setProperty
+ - name: signal
+ signal: interfacesRemoved
+ handler: removeInterface
+ - name: fails_before_high_speed_air
+ groups:
+ - name: zone0_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ property:
+ name: Functional
+ type: bool
+ - name: zone0_dimms
+ interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ property:
+ name: Functional
+ type: bool
+ - name: zone0_gpu_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ property:
+ name: Functional
+ type: bool
+ - name: zone0_gpu_memory
+ 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: interfacesAdded
+ 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: 1sec_speed_change_request_sampling
+ triggers:
+ - name: timer
+ interval: 1000000
+ type: repeating
+ actions:
+ # Speed changes based on regulator temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_regulators
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 85000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 400
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_regulators
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 82000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 40
+ type: uint64_t
+ # Speed changes based on pcie temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_pcie
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 55000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 400
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_pcie
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 52000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 40
+ type: uint64_t
+ # Speed changes based on core temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 73000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 400
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 70000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 40
+ type: uint64_t
+ # Speed changes based on dimm temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_dimms
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 64000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 200
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_dimms
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 61000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 40
+ type: uint64_t
+ # Speed changes based on gpu core temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_gpu_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 78000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 600
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_gpu_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 75000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 40
+ type: uint64_t
+ # Speed changes based on gpu memory temps
+ - name: set_net_increase_speed
+ groups:
+ - name: zone0_gpu_memory
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 80000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 600
+ type: uint64_t
+ - name: set_net_decrease_speed
+ groups:
+ - name: zone0_gpu_memory
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ property:
+ value: 77000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 40
+ type: uint64_t
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config.bbappend b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config.bbappend
new file mode 100644
index 000000000..8f2097cc1
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/mihawk/fans.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/mihawk/fans.yaml
new file mode 100644
index 000000000..d0a09004e
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/mihawk/fans.yaml
@@ -0,0 +1,37 @@
+fans:
+ - inventory: /system/chassis/motherboard/fan0
+ cooling_zone: 0
+ sensors:
+ - fan0_0
+ - fan0_1
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ - inventory: /system/chassis/motherboard/fan1
+ cooling_zone: 0
+ sensors:
+ - fan1_0
+ - fan1_1
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ - inventory: /system/chassis/motherboard/fan2
+ cooling_zone: 0
+ sensors:
+ - fan2_0
+ - fan2_1
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ - inventory: /system/chassis/motherboard/fan3
+ cooling_zone: 0
+ sensors:
+ - fan3_0
+ - fan3_1
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ - inventory: /system/chassis/motherboard/fan4
+ cooling_zone: 0
+ sensors:
+ - fan4_0
+ - fan4_1
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ - inventory: /system/chassis/motherboard/fan5
+ cooling_zone: 0
+ sensors:
+ - fan5_0
+ - fan5_1
+ target_interface: xyz.openbmc_project.Control.FanPwm
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/swift/fans.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/swift/fans.yaml
new file mode 100644
index 000000000..a70ac85a3
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/swift/fans.yaml
@@ -0,0 +1,21 @@
+fans:
+ - inventory: /system/chassis/motherboard/fan2
+ cooling_zone: 0
+ cooling_profile: all
+ sensors:
+ - fan2_0
+ - inventory: /system/chassis/motherboard/fan0
+ cooling_zone: 0
+ cooling_profile: all
+ sensors:
+ - fan0_0
+ - inventory: /system/chassis/motherboard/fan1
+ cooling_zone: 0
+ cooling_profile: air
+ sensors:
+ - fan1_0
+ - inventory: /system/chassis/motherboard/fan3
+ cooling_zone: 0
+ cooling_profile: all
+ sensors:
+ - fan3_0
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/witherspoon/fans.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/witherspoon/fans.yaml
new file mode 100644
index 000000000..a70ac85a3
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-fan-config/witherspoon/fans.yaml
@@ -0,0 +1,21 @@
+fans:
+ - inventory: /system/chassis/motherboard/fan2
+ cooling_zone: 0
+ cooling_profile: all
+ sensors:
+ - fan2_0
+ - inventory: /system/chassis/motherboard/fan0
+ cooling_zone: 0
+ cooling_profile: all
+ sensors:
+ - fan0_0
+ - inventory: /system/chassis/motherboard/fan1
+ cooling_zone: 0
+ cooling_profile: air
+ sensors:
+ - fan1_0
+ - inventory: /system/chassis/motherboard/fan3
+ cooling_zone: 0
+ cooling_profile: all
+ sensors:
+ - fan3_0
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config.bbappend b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config.bbappend
new file mode 100644
index 000000000..8f2097cc1
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/mihawk/zone_conditions.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/mihawk/zone_conditions.yaml
new file mode 100644
index 000000000..7dc99b6a2
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/mihawk/zone_conditions.yaml
@@ -0,0 +1,9 @@
+conditions:
+ - name: air_cooled_chassis
+ type: getProperty
+ properties:
+ - property: WaterCooled
+ interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ path: /xyz/openbmc_project/inventory/system/chassis
+ type: bool
+ value: false
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/swift/zone_conditions.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/swift/zone_conditions.yaml
new file mode 100644
index 000000000..0c8b3c5ff
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/swift/zone_conditions.yaml
@@ -0,0 +1,18 @@
+conditions:
+ - name: air_cooled_chassis
+ type: getProperty
+ properties:
+ - property: WaterCooled
+ interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ path: /xyz/openbmc_project/inventory/system/chassis
+ type: bool
+ value: false
+
+ - name: water_and_air_cooled_chassis
+ type: getProperty
+ properties:
+ - property: WaterCooled
+ interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ path: /xyz/openbmc_project/inventory/system/chassis
+ type: bool
+ value: true
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/witherspoon/zone_conditions.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/witherspoon/zone_conditions.yaml
new file mode 100644
index 000000000..0c8b3c5ff
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/witherspoon/zone_conditions.yaml
@@ -0,0 +1,18 @@
+conditions:
+ - name: air_cooled_chassis
+ type: getProperty
+ properties:
+ - property: WaterCooled
+ interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ path: /xyz/openbmc_project/inventory/system/chassis
+ type: bool
+ value: false
+
+ - name: water_and_air_cooled_chassis
+ type: getProperty
+ properties:
+ - property: WaterCooled
+ interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ path: /xyz/openbmc_project/inventory/system/chassis
+ type: bool
+ value: true
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config.bbappend b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config.bbappend
new file mode 100644
index 000000000..8f2097cc1
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/mihawk/zones.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/mihawk/zones.yaml
new file mode 100644
index 000000000..4deb2523e
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/mihawk/zones.yaml
@@ -0,0 +1,42 @@
+manager_configuration:
+ power_on_delay: 20
+
+zone_configuration:
+
+#Air cooled zones
+- zone_conditions:
+ - name: air_cooled_chassis
+
+ zones:
+ - zone: 0
+ cooling_profiles:
+ - air
+ - all
+ full_speed: 255
+ default_floor: 195
+ increase_delay: 5
+ decrease_interval: 30
+ interfaces:
+ - name: xyz.openbmc_project.Control.ThermalMode
+ properties:
+ - name: Supported
+ type: array[string]
+ values:
+ - value: DEFAULT
+ description: >
+ Default thermal control mode
+ - value: CUSTOM
+ description: >
+ Custom thermal control mode for handling the use of
+ optical cables located behind the GPU exhaust that
+ could produce overtemp warnings without this mode
+ enabled.
+ - name: Current
+ type: string
+ persist: true
+ values:
+ - value: DEFAULT
+ description: >
+ Set current thermal control mode to the
+ default which will be replaced on startup if
+ another selected mode was persisted. \ No newline at end of file
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/swift/zones.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/swift/zones.yaml
new file mode 100644
index 000000000..c10c6c186
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/swift/zones.yaml
@@ -0,0 +1,68 @@
+manager_configuration:
+ power_on_delay: 20
+
+zone_configuration:
+
+#Air cooled zones
+- zone_conditions:
+ - name: air_cooled_chassis
+
+ zones:
+ - zone: 0
+ cooling_profiles:
+ - air
+ - all
+ full_speed: 9500
+ default_floor: 8000
+ increase_delay: 5
+ decrease_interval: 30
+ interfaces:
+ - name: xyz.openbmc_project.Control.ThermalMode
+ properties:
+ - name: Supported
+ type: array[string]
+ values:
+ - value: DEFAULT
+ description: >
+ Default thermal control mode
+ - name: Current
+ type: string
+ persist: true
+ values:
+ - value: DEFAULT
+ description: >
+ Set current thermal control mode to the
+ default which will be replaced on startup if
+ another supported mode was selected & persisted.
+
+#Water cooled zones
+- zone_conditions:
+ - name: water_and_air_cooled_chassis
+
+ zones:
+ - zone: 0
+ cooling_profiles:
+ - water
+ - all
+ full_speed: 9500
+ default_floor: 8000
+ increase_delay: 5
+ decrease_interval: 30
+ interfaces:
+ - name: xyz.openbmc_project.Control.ThermalMode
+ properties:
+ - name: Supported
+ type: array[string]
+ values:
+ - value: DEFAULT
+ description: >
+ Default thermal control mode
+ - name: Current
+ type: string
+ persist: true
+ values:
+ - value: DEFAULT
+ description: >
+ Set current thermal control mode to the
+ default which will be replaced on startup if
+ another supported mode was selected & persisted.
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/witherspoon/zones.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/witherspoon/zones.yaml
new file mode 100644
index 000000000..63303d7c0
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-control-zone-config/witherspoon/zones.yaml
@@ -0,0 +1,100 @@
+manager_configuration:
+ power_on_delay: 20
+
+zone_configuration:
+
+#Air cooled zones
+- zone_conditions:
+ - name: air_cooled_chassis
+
+ zones:
+ - zone: 0
+ cooling_profiles:
+ - air
+ - all
+ full_speed: 10500
+ default_floor: 8000
+ increase_delay: 5
+ decrease_interval: 30
+ interfaces:
+ - name: xyz.openbmc_project.Control.ThermalMode
+ properties:
+ - name: Supported
+ type: array[string]
+ values:
+ - value: DEFAULT
+ description: >
+ Default thermal control mode
+ - value: CUSTOM
+ description: >
+ Custom thermal control mode for handling the use of
+ PCI cards located behind the GPU exhaust that
+ could overtemp where the default mode is not
+ sufficient enough.
+ - value: HEAVY_IO
+ description: >
+ Heavy IO thermal control mode for handling the use
+ of PCI cards that produce heavy IO utilization and
+ could overtemp.
+ - value: MAX_BASE_FAN_FLOOR
+ description: >
+ Maximum base fan floor mode is for handling the
+ use of any hardware that requires the highest
+ amount of cooling even when the system may be idle.
+ - name: Current
+ type: string
+ persist: true
+ values:
+ - value: DEFAULT
+ description: >
+ Set current thermal control mode to the
+ default which will be replaced on startup if
+ another selected mode was persisted.
+
+#Water cooled zones
+- zone_conditions:
+ - name: water_and_air_cooled_chassis
+
+ zones:
+ - zone: 0
+ cooling_profiles:
+ - water
+ - all
+ full_speed: 10500
+ default_floor: 8000
+ increase_delay: 5
+ decrease_interval: 30
+ interfaces:
+ - name: xyz.openbmc_project.Control.ThermalMode
+ properties:
+ - name: Supported
+ type: array[string]
+ values:
+ - value: DEFAULT
+ description: >
+ Default thermal control mode
+ - value: CUSTOM
+ description: >
+ Custom thermal control mode for handling the use of
+ PCI cards located behind the GPU exhaust that
+ could overtemp where the default mode is not
+ sufficient enough.
+ - value: HEAVY_IO
+ description: >
+ Heavy IO thermal control mode for handling the use
+ of PCI cards that produce heavy IO utilization and
+ could overtemp.
+ - value: MAX_BASE_FAN_FLOOR
+ description: >
+ Maximum base fan floor mode is for handling the
+ use of any hardware that requires the highest
+ amount of cooling even when the system may be idle.
+ - name: Current
+ type: string
+ persist: true
+ values:
+ - value: DEFAULT
+ description: >
+ Set current thermal control mode to the
+ default which will be replaced on startup if
+ another selected mode was persisted.
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config.bbappend b/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config.bbappend
new file mode 100644
index 000000000..8f2097cc1
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/mihawk/monitor.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/mihawk/monitor.yaml
new file mode 100644
index 000000000..076349de5
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/mihawk/monitor.yaml
@@ -0,0 +1,96 @@
+fans:
+ - inventory: /system/chassis/motherboard/fan0
+ allowed_out_of_range_time: 10
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan0_0
+ has_target: true
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+ - name: fan0_1
+ has_target: false
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+
+ - inventory: /system/chassis/motherboard/fan1
+ allowed_out_of_range_time: 10
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan1_0
+ has_target: true
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+ - name: fan1_1
+ has_target: false
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+
+ - inventory: /system/chassis/motherboard/fan2
+ allowed_out_of_range_time: 10
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan2_0
+ has_target: true
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+ - name: fan2_1
+ has_target: false
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+
+ - inventory: /system/chassis/motherboard/fan3
+ allowed_out_of_range_time: 10
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan3_0
+ has_target: true
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+ - name: fan3_1
+ has_target: false
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+
+ - inventory: /system/chassis/motherboard/fan4
+ allowed_out_of_range_time: 10
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan4_0
+ has_target: true
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+ - name: fan4_1
+ has_target: false
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+
+ - inventory: /system/chassis/motherboard/fan5
+ allowed_out_of_range_time: 10
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan5_0
+ has_target: true
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
+ - name: fan5_1
+ has_target: false
+ target_interface: xyz.openbmc_project.Control.FanPwm
+ factor: 70
+ offset: 1200
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/swift/monitor.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/swift/monitor.yaml
new file mode 100644
index 000000000..2c93e65c8
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/swift/monitor.yaml
@@ -0,0 +1,36 @@
+fans:
+ - inventory: /system/chassis/motherboard/fan0
+ functional_delay: 5
+ allowed_out_of_range_time: 30
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan0_0
+ has_target: true
+
+ - inventory: /system/chassis/motherboard/fan1
+ functional_delay: 5
+ allowed_out_of_range_time: 30
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan1_0
+ has_target: true
+
+ - inventory: /system/chassis/motherboard/fan2
+ functional_delay: 5
+ allowed_out_of_range_time: 30
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan2_0
+ has_target: true
+
+ - inventory: /system/chassis/motherboard/fan3
+ functional_delay: 5
+ allowed_out_of_range_time: 30
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan3_0
+ has_target: true
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/witherspoon/monitor.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/witherspoon/monitor.yaml
new file mode 100644
index 000000000..5db7966fa
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-monitor-config/witherspoon/monitor.yaml
@@ -0,0 +1,73 @@
+fans:
+ - inventory: /system/chassis/motherboard/fan0
+ functional_delay: 5
+ allowed_out_of_range_time: 30
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan0_0
+ has_target: true
+ - name: fan0_1
+ 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
+ sensors:
+ - name: fan1_0
+ has_target: true
+ - name: fan1_1
+ has_target: false
+ # Create fan1 inventory & sensors on air cooled only
+ condition:
+ name: propertiesMatch
+ properties:
+ - object: /xyz/openbmc_project/inventory/system/chassis
+ interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ property:
+ name: WaterCooled
+ type: bool
+ value: false
+
+ - inventory: /system/chassis/motherboard/fan2
+ functional_delay: 5
+ allowed_out_of_range_time: 30
+ deviation: 15
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan2_0
+ has_target: true
+ - name: fan2_1
+ 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
+ sensors:
+ - name: fan3_0
+ has_target: true
+ - name: fan3_1
+ has_target: false
+
+sensor_trust_groups:
+ - class: NonzeroSpeed
+ 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
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config.bbappend b/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config.bbappend
new file mode 100644
index 000000000..9442477af
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config.bbappend
@@ -0,0 +1,11 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
+
+SRC_URI_witherspoon = "file://config.json"
+
+do_install_witherspoon() {
+ install -d ${D}/${datadir}/phosphor-fan-presence/presence/
+ install -m 0644 ${WORKDIR}/config.json ${D}/${datadir}/phosphor-fan-presence/presence/
+}
+
+FILES_${PN}_append_witherspoon = " ${datadir}/phosphor-fan-presence/presence/config.json"
+FILES_${PN}_remove_witherspoon = "${presence_datadir}/config.yaml"
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/mihawk/config.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/mihawk/config.yaml
new file mode 100644
index 000000000..9cb5ecddb
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/mihawk/config.yaml
@@ -0,0 +1,47 @@
+- name: fan0
+ path: /system/chassis/motherboard/fan0
+ methods:
+ - type: gpio
+ key: 9
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan1
+ path: /system/chassis/motherboard/fan1
+ methods:
+ - type: gpio
+ key: 10
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan2
+ path: /system/chassis/motherboard/fan2
+ methods:
+ - type: gpio
+ key: 11
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan3
+ path: /system/chassis/motherboard/fan3
+ methods:
+ - type: gpio
+ key: 12
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan4
+ path: /system/chassis/motherboard/fan4
+ methods:
+ - type: gpio
+ key: 13
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan5
+ path: /system/chassis/motherboard/fan5
+ methods:
+ - type: gpio
+ key: 14
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/swift/config.yaml b/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/swift/config.yaml
new file mode 100644
index 000000000..20dc31c40
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/swift/config.yaml
@@ -0,0 +1,62 @@
+- name: fan0
+ path: /system/chassis/motherboard/fan0
+ methods:
+ - type: gpio
+ key: 5
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+ - type: tach
+ sensors:
+ - fan0_0
+ rpolicy:
+ type: anyof
+
+- name: fan1
+ path: /system/chassis/motherboard/fan1
+ methods:
+ - type: gpio
+ key: 6
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+ - type: tach
+ sensors:
+ - fan1_0
+ rpolicy:
+ type: anyof
+
+- name: fan2
+ path: /system/chassis/motherboard/fan2
+ methods:
+ - type: gpio
+ key: 7
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+ - type: tach
+ sensors:
+ - fan2_0
+ rpolicy:
+ type: anyof
+
+- name: fan3
+ path: /system/chassis/motherboard/fan3
+ methods:
+ - type: gpio
+ key: 8
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+ - type: tach
+ sensors:
+ - fan3_0
+ rpolicy:
+ type: anyof
+
+# Boost fan presence
+- name: fan4
+ path: /system/chassis/motherboard/fan4
+ methods:
+ - type: gpio
+ key: 9
+ physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+ devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+ rpolicy:
+ type: anyof
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/witherspoon/config.json b/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/witherspoon/config.json
new file mode 100644
index 000000000..36cdae85b
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan-presence-config/witherspoon/config.json
@@ -0,0 +1,90 @@
+[
+ {
+ "name": "fan0",
+ "path": "/system/chassis/motherboard/fan0",
+ "methods": [
+ {
+ "type": "gpio",
+ "key": 4,
+ "physpath": "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060",
+ "devpath": "/dev/input/by-path/platform-gpio-keys-polled-event"
+ },
+ {
+ "type": "tach",
+ "sensors": [
+ "fan0_0",
+ "fan0_1"
+ ]
+ }
+ ],
+ "rpolicy": {
+ "type": "anyof"
+ }
+ },
+ {
+ "name": "fan1",
+ "path": "/system/chassis/motherboard/fan1",
+ "methods": [
+ {
+ "type": "gpio",
+ "key": 5,
+ "physpath": "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060",
+ "devpath": "/dev/input/by-path/platform-gpio-keys-polled-event"
+ },
+ {
+ "type": "tach",
+ "sensors": [
+ "fan1_0",
+ "fan1_1"
+ ]
+ }
+ ],
+ "rpolicy": {
+ "type": "anyof"
+ }
+ },
+ {
+ "name": "fan2",
+ "path": "/system/chassis/motherboard/fan2",
+ "methods": [
+ {
+ "type": "gpio",
+ "key": 6,
+ "physpath": "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060",
+ "devpath": "/dev/input/by-path/platform-gpio-keys-polled-event"
+ },
+ {
+ "type": "tach",
+ "sensors": [
+ "fan2_0",
+ "fan2_1"
+ ]
+ }
+ ],
+ "rpolicy": {
+ "type": "anyof"
+ }
+ },
+ {
+ "name": "fan3",
+ "path": "/system/chassis/motherboard/fan3",
+ "methods": [
+ {
+ "type": "gpio",
+ "key": 7,
+ "physpath": "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060",
+ "devpath": "/dev/input/by-path/platform-gpio-keys-polled-event"
+ },
+ {
+ "type": "tach",
+ "sensors": [
+ "fan3_0",
+ "fan3_1"
+ ]
+ }
+ ],
+ "rpolicy": {
+ "type": "anyof"
+ }
+ }
+]
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/fan-watchdog-conflicts.conf b/meta-ibm/recipes-phosphor/fans/phosphor-fan/fan-watchdog-conflicts.conf
new file mode 100644
index 000000000..90b1e810e
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/fan-watchdog-conflicts.conf
@@ -0,0 +1,2 @@
+[Unit]
+Conflicts=obmc-fan-watchdog-takeover.target
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/fan-watchdog-monitor.conf b/meta-ibm/recipes-phosphor/fans/phosphor-fan/fan-watchdog-monitor.conf
new file mode 100644
index 000000000..023e61a64
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/fan-watchdog-monitor.conf
@@ -0,0 +1,5 @@
+[Unit]
+#These overrides allow the fan watchdog to take over when this service dies
+OnFailure=witherspoon-fan-watchdog-monitor@%n.service
+StartLimitIntervalSec=5
+StartLimitBurst=3
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/mihawk/obmc/phosphor-fan/phosphor-cooling-type-0.conf b/meta-ibm/recipes-phosphor/fans/phosphor-fan/mihawk/obmc/phosphor-fan/phosphor-cooling-type-0.conf
new file mode 100644
index 000000000..21fcfcb49
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/mihawk/obmc/phosphor-fan/phosphor-cooling-type-0.conf
@@ -0,0 +1,3 @@
+OBJPATH="--path=/system/chassis"
+AIR="--air"
+
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/mihawk/phosphor-cooling-type@.service b/meta-ibm/recipes-phosphor/fans/phosphor-fan/mihawk/phosphor-cooling-type@.service
new file mode 100644
index 000000000..9232b13fc
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/mihawk/phosphor-cooling-type@.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Phosphor Cooling Type
+Wants=mapper-wait@-xyz-openbmc_project-inventory.service
+After=mapper-wait@-xyz-openbmc_project-inventory.service
+ConditionPathExists={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+EnvironmentFile={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
+ExecStart=/usr/bin/env phosphor-cooling-type ${{OBJPATH}} ${{AIR}}
+SyslogIdentifier=phosphor-cooling-type
+
+[Install]
+RequiredBy=multi-user.target
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/swift/obmc/phosphor-fan/phosphor-cooling-type-0.conf b/meta-ibm/recipes-phosphor/fans/phosphor-fan/swift/obmc/phosphor-fan/phosphor-cooling-type-0.conf
new file mode 100644
index 000000000..e5e8f435e
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/swift/obmc/phosphor-fan/phosphor-cooling-type-0.conf
@@ -0,0 +1,6 @@
+OBJPATH="--path=/system/chassis"
+AIR="--air"
+WATER=""
+DEVICE="--dev=/dev/input/by-path/platform-gpio-keys-event"
+CODE="--event=13"
+
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/swift/phosphor-cooling-type@.service b/meta-ibm/recipes-phosphor/fans/phosphor-fan/swift/phosphor-cooling-type@.service
new file mode 100644
index 000000000..c1f5ae293
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/swift/phosphor-cooling-type@.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Phosphor Cooling Type
+Wants=mapper-wait@-xyz-openbmc_project-inventory.service
+After=mapper-wait@-xyz-openbmc_project-inventory.service
+ConditionPathExists={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+EnvironmentFile={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
+ExecStart=/usr/bin/env phosphor-cooling-type ${{OBJPATH}} ${{AIR}} ${{WATER}} ${{DEVICE}} ${{CODE}}
+SyslogIdentifier=phosphor-cooling-type
+
+[Install]
+RequiredBy=multi-user.target
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon-tacoma/obmc/phosphor-fan/phosphor-cooling-type-0.conf b/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon-tacoma/obmc/phosphor-fan/phosphor-cooling-type-0.conf
new file mode 100644
index 000000000..dcab0ee98
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon-tacoma/obmc/phosphor-fan/phosphor-cooling-type-0.conf
@@ -0,0 +1,5 @@
+OBJPATH="--path=/system/chassis"
+AIR="--air"
+WATER=""
+DEVICE=""
+CODE=""
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/obmc/phosphor-fan/phosphor-cooling-type-0.conf b/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/obmc/phosphor-fan/phosphor-cooling-type-0.conf
new file mode 100644
index 000000000..e5e8f435e
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/obmc/phosphor-fan/phosphor-cooling-type-0.conf
@@ -0,0 +1,6 @@
+OBJPATH="--path=/system/chassis"
+AIR="--air"
+WATER=""
+DEVICE="--dev=/dev/input/by-path/platform-gpio-keys-event"
+CODE="--event=13"
+
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/phosphor-cooling-type@.service b/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/phosphor-cooling-type@.service
new file mode 100644
index 000000000..c1f5ae293
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/phosphor-cooling-type@.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Phosphor Cooling Type
+Wants=mapper-wait@-xyz-openbmc_project-inventory.service
+After=mapper-wait@-xyz-openbmc_project-inventory.service
+ConditionPathExists={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+EnvironmentFile={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
+ExecStart=/usr/bin/env phosphor-cooling-type ${{OBJPATH}} ${{AIR}} ${{WATER}} ${{DEVICE}} ${{CODE}}
+SyslogIdentifier=phosphor-cooling-type
+
+[Install]
+RequiredBy=multi-user.target
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/phosphor-fan-control@.service b/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/phosphor-fan-control@.service
new file mode 100644
index 000000000..267907776
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan/witherspoon/phosphor-fan-control@.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Phosphor Fan Control Daemon
+Requires=max31785-hwmon-helper@ahb-apb-bus\x401e78a000-i2c\x2dbus\x40{ADDR}-max31785\x4052.service
+After=max31785-hwmon-helper@ahb-apb-bus\x401e78a000-i2c\x2dbus\x40{ADDR}-max31785\x4052.service
+
+[Service]
+Restart=on-failure
+ExecStart=/usr/bin/phosphor-fan-control --control
+
+[Install]
+RequiredBy=obmc-chassis-poweron@%i.target
diff --git a/meta-ibm/recipes-phosphor/fans/phosphor-fan_%.bbappend b/meta-ibm/recipes-phosphor/fans/phosphor-fan_%.bbappend
new file mode 100644
index 000000000..713c0c6a2
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/phosphor-fan_%.bbappend
@@ -0,0 +1,59 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
+
+# Package configuration
+FAN_PACKAGES_append_ibm-ac-server = " \
+ phosphor-cooling-type \
+ "
+
+FAN_PACKAGES_append_mihawk = " \
+ phosphor-cooling-type \
+ "
+
+PACKAGECONFIG_append_ibm-ac-server = " cooling-type"
+PACKAGECONFIG_append_mihawk = " cooling-type"
+
+TMPL_COOLING = "phosphor-cooling-type@.service"
+INSTFMT_COOLING = "phosphor-cooling-type@{0}.service"
+MULTI_USR_TGT = "multi-user.target"
+FMT_COOLING = "../${TMPL_COOLING}:${MULTI_USR_TGT}.requires/${INSTFMT_COOLING}"
+
+FILES_phosphor-cooling-type_append_ibm-ac-server = " ${bindir}/phosphor-cooling-type"
+SYSTEMD_SERVICE_phosphor-cooling-type_append_ibm-ac-server = " ${TMPL_COOLING}"
+SYSTEMD_LINK_phosphor-cooling-type_append_ibm-ac-server = " ${@compose_list(d, 'FMT_COOLING', 'OBMC_CHASSIS_INSTANCES')}"
+FILES_phosphor-cooling-type_append_mihawk = " ${bindir}/phosphor-cooling-type"
+SYSTEMD_SERVICE_phosphor-cooling-type_append_mihawk = " ${TMPL_COOLING}"
+SYSTEMD_LINK_phosphor-cooling-type_append_mihawk = " ${@compose_list(d, 'FMT_COOLING', 'OBMC_CHASSIS_INSTANCES')}"
+
+COOLING_ENV_FMT = "obmc/phosphor-fan/phosphor-cooling-type-{0}.conf"
+
+SYSTEMD_ENVIRONMENT_FILE_phosphor-cooling-type_append_ibm-ac-server = " ${@compose_list(d, 'COOLING_ENV_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+SYSTEMD_ENVIRONMENT_FILE_phosphor-cooling-type_append_mihawk = " ${@compose_list(d, 'COOLING_ENV_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+
+#These services are protected by the watchdog
+SYSTEMD_OVERRIDE_phosphor-fan-control_witherspoon += "fan-watchdog-monitor.conf:phosphor-fan-control-init@0.service.d/fan-watchdog-monitor.conf"
+SYSTEMD_OVERRIDE_phosphor-fan-control_witherspoon += "fan-watchdog-monitor.conf:phosphor-fan-control@0.service.d/fan-watchdog-monitor.conf"
+SYSTEMD_OVERRIDE_phosphor-fan-monitor_witherspoon += "fan-watchdog-monitor.conf:phosphor-fan-monitor-init@0.service.d/fan-watchdog-monitor.conf"
+SYSTEMD_OVERRIDE_phosphor-fan-monitor_witherspoon += "fan-watchdog-monitor.conf:phosphor-fan-monitor@0.service.d/fan-watchdog-monitor.conf"
+
+#These services need to be stopped when watchdog expires
+SYSTEMD_OVERRIDE_phosphor-fan-control_witherspoon += "fan-watchdog-conflicts.conf:phosphor-fan-control@0.service.d/fan-watchdog-conflicts.conf"
+SYSTEMD_OVERRIDE_phosphor-fan-monitor_witherspoon += "fan-watchdog-conflicts.conf:phosphor-fan-monitor@0.service.d/fan-watchdog-conflicts.conf"
+
+# Witherspoon fan control service linking
+# Link fan control init service
+SYSTEMD_LINK_${PN}-control_witherspoon += "${@compose_list(d, 'FMT_CONTROL_INIT', 'OBMC_CHASSIS_INSTANCES')}"
+# Link fan control service to be started at standby
+FMT_CONTROL_STDBY_witherspoon = "../${TMPL_CONTROL}:${MULTI_USR_TGT}.wants/${INSTFMT_CONTROL}"
+SYSTEMD_LINK_${PN}-control_witherspoon += "${@compose_list(d, 'FMT_CONTROL_STDBY', 'OBMC_CHASSIS_INSTANCES')}"
+# Link fan control service to also start at poweron
+FMT_CONTROL_PWRON_witherspoon = "../${TMPL_CONTROL}:${POWERON_TGT}.requires/${INSTFMT_CONTROL}"
+SYSTEMD_LINK_${PN}-control_witherspoon += "${@compose_list(d, 'FMT_CONTROL_PWRON', 'OBMC_CHASSIS_INSTANCES')}"
+
+# Enable the use of JSON on the fan applications that support it
+EXTRA_OECONF_append_witherspoon = " --enable-json"
+RDEPENDS_${PN}-presence-tach_append_witherspoon = " phosphor-fan-presence-config"
+
+# Set the appropriate i2c address used within the overridden phosphor-fan-control@.service
+# file that's used for witherspoon type(including witherspoon-tacoma) machines
+SYSTEMD_SUBSTITUTIONS_witherspoon = "ADDR:100:phosphor-fan-control@.service"
+SYSTEMD_SUBSTITUTIONS_witherspoon-tacoma = "ADDR:200:phosphor-fan-control@.service"
diff --git a/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog.bb b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog.bb
new file mode 100644
index 000000000..93c8d457b
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Witherspoon fan watchdog services"
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+inherit obmc-phosphor-systemd
+
+RDEPENDS_${PN} += "virtual/obmc-gpio-monitor"
+RDEPENDS_${PN} += "busybox"
+
+RESET_SERVICE = "witherspoon-reset-fan-watchdog.service"
+TGTFMT = "obmc-chassis-poweron@0.target"
+RESET_FMT = "../${RESET_SERVICE}:${TGTFMT}.requires/${RESET_SERVICE}"
+
+MONITOR_SERVICE = "witherspoon-fan-watchdog-monitor@.service"
+
+WATCHDOG_SERVICE = "witherspoon-fan-watchdog.service"
+WATCHDOG_FMT = "../${WATCHDOG_SERVICE}:${TGTFMT}.requires/${WATCHDOG_SERVICE}"
+
+SYSTEMD_SERVICE_${PN} += "${RESET_SERVICE} ${MONITOR_SERVICE} ${WATCHDOG_SERVICE}"
+SYSTEMD_LINK_${PN} += "${RESET_FMT} ${WATCHDOG_FMT}"
+SYSTEMD_ENVIRONMENT_FILE_${PN} += "obmc/witherspoon-fan-watchdog/reset-fan-watchdog.conf"
+SYSTEMD_ENVIRONMENT_FILE_${PN} += "obmc/witherspoon-fan-watchdog/fan-watchdog.conf"
diff --git a/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/obmc/witherspoon-fan-watchdog/fan-watchdog.conf b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/obmc/witherspoon-fan-watchdog/fan-watchdog.conf
new file mode 100644
index 000000000..ce7824ccb
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/obmc/witherspoon-fan-watchdog/fan-watchdog.conf
@@ -0,0 +1,3 @@
+TIMEOUT=5
+INTERVAL=1
+DEVICE=/dev/watchdog0
diff --git a/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/obmc/witherspoon-fan-watchdog/reset-fan-watchdog.conf b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/obmc/witherspoon-fan-watchdog/reset-fan-watchdog.conf
new file mode 100644
index 000000000..b4e5ce74e
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/obmc/witherspoon-fan-watchdog/reset-fan-watchdog.conf
@@ -0,0 +1,4 @@
+GPIO_PATH=/dev/gpiochip0
+GPIO=109
+DELAY=1
+ACTION=low_high
diff --git a/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-fan-watchdog-monitor@.service b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-fan-watchdog-monitor@.service
new file mode 100644
index 000000000..945561b50
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-fan-watchdog-monitor@.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Fan Watchdog Failure Monitor
+
+#This can get called every time a process dies, so ensure it's never limited
+StartLimitIntervalSec=0
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/env phosphor-unit-failure-monitor --source %i --target obmc-fan-watchdog-takeover.target --action start
+SyslogIdentifier=phosphor-unit-failure-monitor
diff --git a/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-fan-watchdog.service b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-fan-watchdog.service
new file mode 100644
index 000000000..597ee03cb
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-fan-watchdog.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Witherspoon Fan Watchdog Daemon
+Wants=phosphor-fan-monitor-init@0.service
+Before=phosphor-fan-monitor-init@0.service
+Conflicts=obmc-fan-watchdog-takeover.target
+
+[Service]
+EnvironmentFile={envfiledir}/obmc/witherspoon-fan-watchdog/fan-watchdog.conf
+ExecStart=/sbin/watchdog -T ${{TIMEOUT}} -t ${{INTERVAL}} -F ${{DEVICE}}
+KillSignal=SIGKILL
+
+[Install]
+RequiredBy=obmc-chassis-poweron@0.target
diff --git a/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-reset-fan-watchdog.service b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-reset-fan-watchdog.service
new file mode 100644
index 000000000..675a67269
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/fans/witherspoon-fan-watchdog/witherspoon-reset-fan-watchdog.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Witherspoon Fan Watchdog Reset
+Wants=phosphor-fan-monitor-init@0.service
+Before=phosphor-fan-monitor-init@0.service
+Conflicts=obmc-chassis-poweroff@0.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+EnvironmentFile={envfiledir}/obmc/witherspoon-fan-watchdog/reset-fan-watchdog.conf
+ExecStart=/usr/bin/env phosphor-gpio-util -p ${{GPIO_PATH}} -g ${{GPIO}} -a ${{ACTION}} -d ${{DELAY}}
+SyslogIdentifier=phosphor-gpio-util