summaryrefslogtreecommitdiffstats
path: root/meta-openbmc-machines/meta-openpower
diff options
context:
space:
mode:
authorGunnar Mills <gmills@us.ibm.com>2017-10-30 16:43:57 -0500
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2017-11-07 02:54:43 +0000
commit557e1ecf43fb2c765814497b0873a72180d514ab (patch)
treede67299aef2fa201f5cfe938376914bb87043c52 /meta-openbmc-machines/meta-openpower
parentf000c84ef9e47aadad1b4a8784f91b254fab6f1b (diff)
downloadtalos-openbmc-557e1ecf43fb2c765814497b0873a72180d514ab.tar.gz
talos-openbmc-557e1ecf43fb2c765814497b0873a72180d514ab.zip
Create Witherspoon fan errors
Moved the code to create NotPresent and Nonfunctional errors to a new yaml, fan-errors.yaml. Fixed the problem with duplicate errors, caused by a 2nd fan going nonfunctional or not present which would create a 2nd error for the 1st fan previously nonfunctional or not present. Create a notpresent error if fan 0, 1, 2, or 3 is not present for more than 20 seconds. Create a Nonfunctional error if fan 0, 1, 2, or 3 is not functional for any amount of time. The system must be powered on in both of these cases. If a water cooled system, don't create errors for fan 1. An error is created each time the chassis powers on if a fan is removed or nonfunctional. Resolves openbmc/openbmc#2472 Change-Id: Ibd71bf3a3b2381df623e7310a510a2f044c525e4 Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
Diffstat (limited to 'meta-openbmc-machines/meta-openpower')
-rw-r--r--meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy-native.bb2
-rw-r--r--meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/air-cooled.yaml251
-rw-r--r--meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/fan-errors.yaml541
-rw-r--r--meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/water-cooled.yaml193
4 files changed, 545 insertions, 442 deletions
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy-native.bb b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy-native.bb
index c2e843f2a..b7da45c01 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy-native.bb
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy-native.bb
@@ -7,8 +7,10 @@ inherit phosphor-dbus-monitor
SRC_URI += "file://air-cooled.yaml"
SRC_URI += "file://water-cooled.yaml"
+SRC_URI += "file://fan-errors.yaml"
do_install() {
install -D ${WORKDIR}/air-cooled.yaml ${D}${config_dir}/air-cooled.yaml
install -D ${WORKDIR}/water-cooled.yaml ${D}${config_dir}/water-cooled.yaml
+ install -D ${WORKDIR}/fan-errors.yaml ${D}${config_dir}/fan-errors.yaml
}
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/air-cooled.yaml b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/air-cooled.yaml
index 3ee490f9e..449a77db8 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/air-cooled.yaml
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/air-cooled.yaml
@@ -4,34 +4,6 @@
# If the number of functional fans drops below that
# power the system off.
-- name: fan0
- class: group
- group: path
- members:
- - meta: FAN
- path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
-
-- name: fan1
- class: group
- group: path
- members:
- - meta: FAN
- path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
-
-- name: fan2
- class: group
- group: path
- members:
- - meta: FAN
- path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
-
-- name: fan3
- class: group
- group: path
- members:
- - meta: FAN
- path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
-
- name: fans
description: >
'An air cooled Witherspoon has four fans to monitor.'
@@ -172,37 +144,12 @@
- name: check fans
description: >
- 'Verify there are at least three functional fans, power off if not.
- Create an error if a fan is nonfuncitonal or not present'
+ 'Verify there are at least three functional fans, power off if not.'
class: callback
callback: group
members:
- check group presence
- check group functional
- - check individual presence
- - check individual functional
-
-- name: check individual presence
- description: >
- 'Verify each of the 4 fans are present.'
- class: callback
- callback: group
- members:
- - check fan0 presence
- - check fan1 presence
- - check fan2 presence
- - check fan3 presence
-
-- name: check individual functional
- description: >
- 'Verify each of the 4 fans are functional.'
- class: callback
- callback: group
- members:
- - check fan0 functional
- - check fan1 functional
- - check fan2 functional
- - check fan3 functional
- name: check group presence
description: >
@@ -244,114 +191,6 @@
op: '=='
bound: false
-- name: check fan0 presence
- description: >
- 'If this condition passes fan0 has been unplugged for more than 20 seconds.'
- class: condition
- condition: count
- paths: fan0
- properties: fan present
- defer: 20000000us
- callback: notpresent fan0 error
- countop: '<'
- countbound: 1
- op: '=='
- bound: true
-
-- name: check fan0 functional
- description: >
- 'If this condition passes fan0 has been marked as nonfunctional.'
- class: condition
- condition: count
- paths: fan0
- properties: fan functional
- callback: nonfunctional fan0 error
- countop: '>'
- countbound: 0
- op: '=='
- bound: false
-
-- name: check fan1 presence
- description: >
- 'If this condition passes fan1 has been unplugged for more than 20 seconds.'
- class: condition
- condition: count
- paths: fan1
- properties: fan present
- defer: 20000000us
- callback: notpresent fan1 error
- countop: '<'
- countbound: 1
- op: '=='
- bound: true
-
-- name: check fan1 functional
- description: >
- 'If this condition passes fan1 has been marked as nonfunctional.'
- class: condition
- condition: count
- paths: fan1
- properties: fan functional
- callback: nonfunctional fan1 error
- countop: '>'
- countbound: 0
- op: '=='
- bound: false
-
-- name: check fan2 presence
- description: >
- 'If this condition passes fan2 has been unplugged for more than 20 seconds.'
- class: condition
- condition: count
- paths: fan2
- properties: fan present
- defer: 20000000us
- callback: notpresent fan2 error
- countop: '<'
- countbound: 1
- op: '=='
- bound: true
-
-- name: check fan2 functional
- description: >
- 'If this condition passes fan2 has been marked as nonfunctional.'
- class: condition
- condition: count
- paths: fan2
- properties: fan functional
- callback: nonfunctional fan2 error
- countop: '>'
- countbound: 0
- op: '=='
- bound: false
-
-- name: check fan3 presence
- description: >
- 'If this condition passes fan3 has been unplugged for more than 20 seconds.'
- class: condition
- condition: count
- paths: fan3
- properties: fan present
- defer: 20000000us
- callback: notpresent fan3 error
- countop: '<'
- countbound: 1
- op: '=='
- bound: true
-
-- name: check fan3 functional
- description: >
- 'If this condition passes fan3 has been marked as nonfunctional.'
- class: condition
- condition: count
- paths: fan3
- properties: fan functional
- callback: nonfunctional fan3 error
- countop: '>'
- countbound: 0
- op: '=='
- bound: false
-
- name: log and shutdown
description: >
'Shut the system down, log an event in the journal, and create an
@@ -388,94 +227,6 @@
severity: ERR
message: Shutting down system. There are not enough functional fans.
-- name: notpresent fan0 error
- class: callback
- callback: elog
- paths: fan0
- properties: fan present
- error: xyz::openbmc_project::Inventory::Error::NotPresent
- metadata:
- - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
- type: string
-
-- name: nonfunctional fan0 error
- class: callback
- callback: elog
- paths: fan0
- properties: fan functional
- error: xyz::openbmc_project::Inventory::Error::Nonfunctional
- metadata:
- - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
- type: string
-
-- name: notpresent fan1 error
- class: callback
- callback: elog
- paths: fan1
- properties: fan present
- error: xyz::openbmc_project::Inventory::Error::NotPresent
- metadata:
- - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
- type: string
-
-- name: nonfunctional fan1 error
- class: callback
- callback: elog
- paths: fan1
- properties: fan functional
- error: xyz::openbmc_project::Inventory::Error::Nonfunctional
- metadata:
- - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
- type: string
-
-- name: notpresent fan2 error
- class: callback
- callback: elog
- paths: fan2
- properties: fan present
- error: xyz::openbmc_project::Inventory::Error::NotPresent
- metadata:
- - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
- type: string
-
-- name: nonfunctional fan2 error
- class: callback
- callback: elog
- paths: fan2
- properties: fan functional
- error: xyz::openbmc_project::Inventory::Error::Nonfunctional
- metadata:
- - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
- type: string
-
-- name: notpresent fan3 error
- class: callback
- callback: elog
- paths: fan3
- properties: fan present
- error: xyz::openbmc_project::Inventory::Error::NotPresent
- metadata:
- - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
- type: string
-
-- name: nonfunctional fan3 error
- class: callback
- callback: elog
- paths: fan3
- properties: fan functional
- error: xyz::openbmc_project::Inventory::Error::Nonfunctional
- metadata:
- - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
- type: string
-
- name: create shutdown error
description: >
'Create a Fan Shutdown Error log.'
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/fan-errors.yaml b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/fan-errors.yaml
new file mode 100644
index 000000000..1fa153077
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/fan-errors.yaml
@@ -0,0 +1,541 @@
+# Witherspoon fan error policy for PDM.
+#
+# Create a NotPresent error if fan 0, 1, 2, or 3 is not present for more
+# than 20 seconds. Create a Nonfunctional error if fan 0, 1, 2, or 3 is not
+# functional for any amount of time.
+# The system must be powered on in both of these cases.
+# If a water cooled system, don't create errors for fan 1.
+# Note: An error is created each time the chassis powers on.
+
+- name: fan0
+ class: group
+ group: path
+ members:
+ - meta: FAN
+ path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
+
+- name: fan1
+ class: group
+ group: path
+ members:
+ - meta: FAN
+ path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
+
+- name: fan2
+ class: group
+ group: path
+ members:
+ - meta: FAN
+ path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
+
+- name: fan3
+ class: group
+ group: path
+ members:
+ - meta: FAN
+ path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
+
+- name: chassis state
+ description: >
+ 'Witherspoon has a single chassis to monitor.'
+ class: group
+ group: path
+ members:
+ - meta: CHASSISSTATE
+ path: /xyz/openbmc_project/state/chassis0
+
+- name: chassis
+ description: >
+ 'Witherspoon has a single chassis to monitor.'
+ class: group
+ group: path
+ members:
+ - meta: CHASSIS
+ path: /xyz/openbmc_project/inventory/system/chassis
+
+
+- name: fan present
+ description: >
+ 'Monitor the presence state of each fan.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.Inventory.Item
+ meta: PRESENT
+ property: Present
+
+- name: fan functional
+ description: >
+ 'Monitor the functional state of each fan.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ meta: FUNCTIONAL
+ property: Functional
+
+- name: chassis powered
+ description: >
+ 'Monitor the chassis power state.'
+ class: group
+ group: property
+ type: string
+ members:
+ - interface: xyz.openbmc_project.State.Chassis
+ meta: CHASSIS_STATE
+ property: CurrentPowerState
+
+- name: chassis air cooled
+ description: >
+ 'The chassis cooling type.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ meta: COOLING_TYPE
+ property: WaterCooled
+
+- name: watch chassis state
+ description: >
+ 'Trigger logic on chassis power state changes.'
+ class: watch
+ watch: property
+ paths: chassis state
+ properties: chassis powered
+ callback: check power
+
+- name: watch fan0 presence
+ description: >
+ 'Trigger logic on fan0 presence state changes.'
+ class: watch
+ watch: property
+ paths: fan0
+ properties: fan present
+ callback: check power fan0 presence
+
+- name: watch fan0 functional
+ description: >
+ 'Trigger logic on fan0 functional state changes.'
+ class: watch
+ watch: property
+ paths: fan0
+ properties: fan functional
+ callback: check power fan0 functional
+
+- name: watch fan1 presence
+ description: >
+ 'Trigger logic on fan1 presence state changes.'
+ class: watch
+ watch: property
+ paths: fan1
+ properties: fan present
+ callback: check power fan1 presence
+
+- name: watch fan1 functional
+ description: >
+ 'Trigger logic on fan1 functional state changes.'
+ class: watch
+ watch: property
+ paths: fan1
+ properties: fan functional
+ callback: check power fan1 functional
+
+- name: watch fan2 presence
+ description: >
+ 'Trigger logic on fan2 presence state changes.'
+ class: watch
+ watch: property
+ paths: fan2
+ properties: fan present
+ callback: check power fan2 presence
+
+- name: watch fan2 functional
+ description: >
+ 'Trigger logic on fan2 functional state changes.'
+ class: watch
+ watch: property
+ paths: fan2
+ properties: fan functional
+ callback: check power fan2 functional
+
+- name: watch fan3 presence
+ description: >
+ 'Trigger logic on fan3 presence state changes.'
+ class: watch
+ watch: property
+ paths: fan3
+ properties: fan present
+ callback: check power fan3 presence
+
+- name: watch fan3 functional
+ description: >
+ 'Trigger logic on fan3 functional state changes.'
+ class: watch
+ watch: property
+ paths: fan3
+ properties: fan functional
+ callback: check power fan3 functional
+
+- name: check power
+ description: >
+ 'If the chassis has power, check all fans.'
+ class: condition
+ condition: count
+ paths: chassis state
+ properties: chassis powered
+ callback: check fans
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: xyz.openbmc_project.State.Chassis.PowerState.On
+
+- name: check power fan0 presence
+ description: >
+ 'If the chassis has power, check presence of fan0.'
+ class: condition
+ condition: count
+ paths: chassis state
+ properties: chassis powered
+ callback: check fan0 presence
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: xyz.openbmc_project.State.Chassis.PowerState.On
+
+- name: check power fan0 functional
+ description: >
+ 'If the chassis has power, check functional of fan0.'
+ class: condition
+ condition: count
+ paths: chassis state
+ properties: chassis powered
+ callback: check fan0 functional
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: xyz.openbmc_project.State.Chassis.PowerState.On
+
+- name: check power fan1 presence
+ description: >
+ 'If the chassis has power, check presence of fan1.'
+ class: condition
+ condition: count
+ paths: chassis state
+ properties: chassis powered
+ callback: check fan1 presence
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: xyz.openbmc_project.State.Chassis.PowerState.On
+
+- name: check power fan1 functional
+ description: >
+ 'If the chassis has power, check functional of fan1.'
+ class: condition
+ condition: count
+ paths: chassis state
+ properties: chassis powered
+ callback: check fan1 functional
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: xyz.openbmc_project.State.Chassis.PowerState.On
+
+- name: check power fan2 presence
+ description: >
+ 'If the chassis has power, check presence of fan2.'
+ class: condition
+ condition: count
+ paths: chassis state
+ properties: chassis powered
+ callback: check fan2 presence
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: xyz.openbmc_project.State.Chassis.PowerState.On
+
+- name: check power fan2 functional
+ description: >
+ 'If the chassis has power, check functional of fan2.'
+ class: condition
+ condition: count
+ paths: chassis state
+ properties: chassis powered
+ callback: check fan2 functional
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: xyz.openbmc_project.State.Chassis.PowerState.On
+
+- name: check power fan3 presence
+ description: >
+ 'If the chassis has power, check presence of fan3.'
+ class: condition
+ condition: count
+ paths: chassis state
+ properties: chassis powered
+ callback: check fan3 presence
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: xyz.openbmc_project.State.Chassis.PowerState.On
+
+- name: check power fan3 functional
+ description: >
+ 'If the chassis has power, check functional of fan3.'
+ class: condition
+ condition: count
+ paths: chassis state
+ properties: chassis powered
+ callback: check fan3 functional
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: xyz.openbmc_project.State.Chassis.PowerState.On
+
+- name: check fans
+ description: >
+ 'Verify each of the 3 fans are present.'
+ class: callback
+ callback: group
+ members:
+ - check fan0 presence
+ - check fan1 presence
+ - check fan2 presence
+ - check fan3 presence
+ - check fan0 functional
+ - check fan1 functional
+ - check fan2 functional
+ - check fan3 functional
+
+- name: check fan0 presence
+ description: >
+ 'If this condition passes fan0 has been unplugged for more than 20 seconds.'
+ class: condition
+ condition: count
+ paths: fan0
+ properties: fan present
+ defer: 20000000us
+ callback: notpresent fan0 error
+ countop: '<'
+ countbound: 1
+ op: '=='
+ bound: true
+
+- name: check fan0 functional
+ description: >
+ 'If this condition passes fan0 has been marked as nonfunctional.'
+ class: condition
+ condition: count
+ paths: fan0
+ properties: fan functional
+ callback: nonfunctional fan0 error
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: false
+
+- name: check fan1 presence
+ description: >
+ 'If this condition passes fan1 has been unplugged for more than 20 seconds.
+ Fan 1 is not in a water cooled Witherspoon, so check for cooling type
+ before creating an error.'
+ class: condition
+ condition: count
+ paths: fan1
+ properties: fan present
+ defer: 20000000us
+ callback: check cooling type notpresent error
+ countop: '<'
+ countbound: 1
+ op: '=='
+ bound: true
+
+- name: check fan1 functional
+ description: >
+ 'If this condition passes fan1 has been marked as nonfunctional.
+ Fan 1 is not in a water cooled Witherspoon, so check for cooling type
+ before creating an error.'
+ class: condition
+ condition: count
+ paths: fan1
+ properties: fan functional
+ callback: check cooling type nonfunctional error
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: false
+
+- name: check fan2 presence
+ description: >
+ 'If this condition passes fan2 has been unplugged for more than 20 seconds.'
+ class: condition
+ condition: count
+ paths: fan2
+ properties: fan present
+ defer: 20000000us
+ callback: notpresent fan2 error
+ countop: '<'
+ countbound: 1
+ op: '=='
+ bound: true
+
+- name: check fan2 functional
+ description: >
+ 'If this condition passes fan2 has been marked as nonfunctional.'
+ class: condition
+ condition: count
+ paths: fan2
+ properties: fan functional
+ callback: nonfunctional fan2 error
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: false
+
+- name: check fan3 presence
+ description: >
+ 'If this condition passes fan3 has been unplugged for more than 20 seconds.'
+ class: condition
+ condition: count
+ paths: fan3
+ properties: fan present
+ defer: 20000000us
+ callback: notpresent fan3 error
+ countop: '<'
+ countbound: 1
+ op: '=='
+ bound: true
+
+- name: check fan3 functional
+ description: >
+ 'If this condition passes fan3 has been marked as nonfunctional.'
+ class: condition
+ condition: count
+ paths: fan3
+ properties: fan functional
+ callback: nonfunctional fan3 error
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: false
+
+- name: check cooling type nonfunctional error
+ description: >
+ 'If this condition passes the chassis is air cooled and will create a
+ nonfunctional error for fan 1.'
+ class: condition
+ condition: count
+ paths: chassis
+ properties: chassis air cooled
+ callback: nonfunctional fan1 error
+ countop: '=='
+ countbound: 0
+ op: '=='
+ bound: true
+
+- name: check cooling type notpresent error
+ description: >
+ 'If this condition passes the chassis is air cooled and will create a
+ notpresent error for fan 1.'
+ class: condition
+ condition: count
+ paths: chassis
+ properties: chassis air cooled
+ callback: notpresent fan1 error
+ countop: '=='
+ countbound: 0
+ op: '=='
+ bound: true
+
+- name: notpresent fan0 error
+ class: callback
+ callback: elog
+ paths: fan0
+ properties: fan present
+ error: xyz::openbmc_project::Inventory::Error::NotPresent
+ metadata:
+ - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
+ value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
+ type: string
+
+- name: nonfunctional fan0 error
+ class: callback
+ callback: elog
+ paths: fan0
+ properties: fan functional
+ error: xyz::openbmc_project::Inventory::Error::Nonfunctional
+ metadata:
+ - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
+ value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
+ type: string
+
+- name: notpresent fan1 error
+ class: callback
+ callback: elog
+ paths: fan1
+ properties: fan present
+ error: xyz::openbmc_project::Inventory::Error::NotPresent
+ metadata:
+ - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
+ value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
+ type: string
+
+- name: nonfunctional fan1 error
+ class: callback
+ callback: elog
+ paths: fan1
+ properties: fan functional
+ error: xyz::openbmc_project::Inventory::Error::Nonfunctional
+ metadata:
+ - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
+ value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
+ type: string
+
+- name: notpresent fan2 error
+ class: callback
+ callback: elog
+ paths: fan2
+ properties: fan present
+ error: xyz::openbmc_project::Inventory::Error::NotPresent
+ metadata:
+ - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
+ value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
+ type: string
+
+- name: nonfunctional fan2 error
+ class: callback
+ callback: elog
+ paths: fan2
+ properties: fan functional
+ error: xyz::openbmc_project::Inventory::Error::Nonfunctional
+ metadata:
+ - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
+ value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
+ type: string
+
+- name: notpresent fan3 error
+ class: callback
+ callback: elog
+ paths: fan3
+ properties: fan present
+ error: xyz::openbmc_project::Inventory::Error::NotPresent
+ metadata:
+ - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
+ value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
+ type: string
+
+- name: nonfunctional fan3 error
+ class: callback
+ callback: elog
+ paths: fan3
+ properties: fan functional
+ error: xyz::openbmc_project::Inventory::Error::Nonfunctional
+ metadata:
+ - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
+ value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
+ type: string
+
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/water-cooled.yaml b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/water-cooled.yaml
index dd0ce00ef..92d732534 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/water-cooled.yaml
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/water-cooled.yaml
@@ -4,27 +4,6 @@
# If the number of functional fans drops below that
# power the system off.
-- name: fan0
- class: group
- group: path
- members:
- - meta: FAN
- path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
-
-- name: fan2
- class: group
- group: path
- members:
- - meta: FAN
- path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
-
-- name: fan3
- class: group
- group: path
- members:
- - meta: FAN
- path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
-
- name: fans
description: >
'A water cooled Witherspoon has three fans to monitor.'
@@ -163,35 +142,12 @@
- name: check fans
description: >
- 'Verify there are at least two functional fans, power off if not.
- Create an error if a fan is nonfuncitonal or not present'
+ 'Verify there are at least two functional fans, power off if not.'
class: callback
callback: group
members:
- check group presence
- check group functional
- - check individual presence
- - check individual functional
-
-- name: check individual presence
- description: >
- 'Verify each of the 3 fans are present.'
- class: callback
- callback: group
- members:
- - check fan0 presence
- - check fan2 presence
- - check fan3 presence
-
-- name: check individual functional
- description: >
- 'Verify each of the 3 fans are functional.'
- class: callback
- callback: group
- members:
- - check fan0 functional
- - check fan2 functional
- - check fan3 functional
- name: check group presence
description: >
@@ -233,87 +189,6 @@
op: '=='
bound: false
-- name: check fan0 presence
- description: >
- 'If this condition passes fan0 has been unplugged for more than 20 seconds.'
- class: condition
- condition: count
- paths: fan0
- properties: fan present
- defer: 20000000us
- callback: notpresent fan0 error
- countop: '<'
- countbound: 1
- op: '=='
- bound: true
-
-- name: check fan0 functional
- description: >
- 'If this condition passes fan0 has been marked as nonfunctional.'
- class: condition
- condition: count
- paths: fan0
- properties: fan functional
- callback: nonfunctional fan0 error
- countop: '>'
- countbound: 0
- op: '=='
- bound: false
-
-- name: check fan2 presence
- description: >
- 'If this condition passes fan2 has been unplugged for more than 20 seconds.'
- class: condition
- condition: count
- paths: fan2
- properties: fan present
- defer: 20000000us
- callback: notpresent fan2 error
- countop: '<'
- countbound: 1
- op: '=='
- bound: true
-
-- name: check fan2 functional
- description: >
- 'If this condition passes fan2 has been marked as nonfunctional.'
- class: condition
- condition: count
- paths: fan2
- properties: fan functional
- callback: nonfunctional fan2 error
- countop: '>'
- countbound: 0
- op: '=='
- bound: false
-
-- name: check fan3 presence
- description: >
- 'If this condition passes fan3 has been unplugged for more than 20 seconds.'
- class: condition
- condition: count
- paths: fan3
- properties: fan present
- defer: 20000000us
- callback: notpresent fan3 error
- countop: '<'
- countbound: 1
- op: '=='
- bound: true
-
-- name: check fan3 functional
- description: >
- 'If this condition passes fan3 has been marked as nonfunctional.'
- class: condition
- condition: count
- paths: fan3
- properties: fan functional
- callback: nonfunctional fan3 error
- countop: '>'
- countbound: 0
- op: '=='
- bound: false
-
- name: log and shutdown
description: >
'Shut the system down, log an event in the journal, and create an
@@ -350,72 +225,6 @@
severity: ERR
message: Shutting down system. There are not enough functional fans.
-- name: notpresent fan0 error
- class: callback
- callback: elog
- paths: fan0
- properties: fan present
- error: xyz::openbmc_project::Inventory::Error::NotPresent
- metadata:
- - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
- type: string
-
-- name: nonfunctional fan0 error
- class: callback
- callback: elog
- paths: fan0
- properties: fan functional
- error: xyz::openbmc_project::Inventory::Error::Nonfunctional
- metadata:
- - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
- type: string
-
-- name: notpresent fan2 error
- class: callback
- callback: elog
- paths: fan2
- properties: fan present
- error: xyz::openbmc_project::Inventory::Error::NotPresent
- metadata:
- - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
- type: string
-
-- name: nonfunctional fan2 error
- class: callback
- callback: elog
- paths: fan2
- properties: fan functional
- error: xyz::openbmc_project::Inventory::Error::Nonfunctional
- metadata:
- - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
- type: string
-
-- name: notpresent fan3 error
- class: callback
- callback: elog
- paths: fan3
- properties: fan present
- error: xyz::openbmc_project::Inventory::Error::NotPresent
- metadata:
- - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
- type: string
-
-- name: nonfunctional fan3 error
- class: callback
- callback: elog
- paths: fan3
- properties: fan functional
- error: xyz::openbmc_project::Inventory::Error::Nonfunctional
- metadata:
- - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
- value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
- type: string
-
- name: create shutdown error
description: >
'Create a Fan Shutdown Error log.'
OpenPOWER on IntegriCloud