From ff463bf5b5bbfb24c6a0c017e0bcfcecfc5cd111 Mon Sep 17 00:00:00 2001 From: Brad Bishop Date: Wed, 31 May 2017 14:10:55 -0400 Subject: Add Witherspoon fan policy Add Witherspoon fan plug policy rules for the Witherspoon system. An air cooled Witherspoon requires a minimum of three functional fans. If the number of functional fans drops below that for longer than five seconds power the system off. A water cooled Witherspoon requires a minimum of two functional fans. If the number of functional fans drops below that for longer than five seconds power the system off. Change-Id: I0bba905dcd7542c43215a051e2df2c87fefce154 Signed-off-by: Brad Bishop --- .../phosphor-dbus-monitor-config-native%.bbappend | 1 + .../fans/witherspoon-fan-policy-native.bb | 14 ++ .../fans/witherspoon-fan-policy/air-cooled.yaml | 226 +++++++++++++++++++++ .../fans/witherspoon-fan-policy/water-cooled.yaml | 224 ++++++++++++++++++++ 4 files changed, 465 insertions(+) create mode 100644 meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy-native.bb create mode 100644 meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/air-cooled.yaml create mode 100644 meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/water-cooled.yaml (limited to 'meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon') diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor-config-native%.bbappend b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor-config-native%.bbappend index e69de29bb..6bf76ab9d 100644 --- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor-config-native%.bbappend +++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor-config-native%.bbappend @@ -0,0 +1 @@ +PHOSPHOR_DBUS_MONITOR_CONFIGS_append = " witherspoon-fan-policy-native" 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 new file mode 100644 index 000000000..c2e843f2a --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy-native.bb @@ -0,0 +1,14 @@ +SUMMARY = "Fan policy for Witherspoon" +PR = "r1" + +inherit native +inherit obmc-phosphor-license +inherit phosphor-dbus-monitor + +SRC_URI += "file://air-cooled.yaml" +SRC_URI += "file://water-cooled.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 +} 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 new file mode 100644 index 000000000..ec11164d9 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/air-cooled.yaml @@ -0,0 +1,226 @@ +# Air cooled Witherspoon fan policy for PDM. +# +# An air cooled Witherspoon requires a minimum of three functional fans. +# If the number of functional fans drops below that +# power the system off. + +- name: fans + description: > + 'An air cooled Witherspoon has four fans to monitor.' + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0 + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1 + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2 + - 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: > + 'Monitor 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 fan present + description: > + 'Trigger logic on fan presence state changes.' + class: watch + watch: property + paths: fans + properties: fan present + callback: check cooling type + +- name: watch fan functional + description: > + 'Trigger logic on fan functional state changes.' + class: watch + watch: property + paths: fans + properties: fan functional + callback: check cooling type + +- name: watch chassis state + description: > + 'Trigger logic on chassis power state changes.' + class: watch + watch: property + paths: chassis state + properties: chassis powered + callback: check cooling type + +- name: watch cooling type + description: > + 'Maintain a cache of the chassis cooling type.' + class: watch + watch: property + paths: chassis + properties: chassis air cooled + +- name: check cooling type + description: > + 'If this condition passes the chassis is air cooled.' + class: condition + condition: count + paths: chassis + properties: chassis air cooled + callback: check fans + countop: '==' + countbound: 0 + op: '==' + bound: true + +- name: check fans + description: > + 'Verify there are at least three functional fans.' + class: callback + callback: group + members: + - check presence + - check functional + +- name: check presence + description: > + 'If this condition passes more than one fan has been unplugged + for more than 25 seconds. Shut the system down. Count present + fans rather than non-present fans since the latter would pass + if the fan has not been created for some reason. + + For a more detailed definition of unplugged, consult the documentation + of xyz.openbmc_project.Inventory.Item and/or the documentation + of the fan inventory object implementation.' + class: condition + condition: count + paths: fans + properties: fan present + defer: 25000000us + callback: check power + countop: '<' + countbound: 3 + op: '==' + bound: true + +- name: check functional + description: > + 'If this condition passes more than one fan in the group has been + marked as nonfunctional for five seconds. Shut the system down. + + For a more detailed definition of nonfunctional, consult the documentation + of xyz.openbmc_project.State.Decorator.OperationalStatus and/or the + documentation of the fan inventory object implementation.' + class: condition + condition: count + paths: fans + properties: fan functional + defer: 5000000us + callback: check power + countop: '>' + countbound: 1 + op: '==' + bound: false + +- name: check power + description: > + 'If the chassis has power, power it off.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: log and shutdown + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: log and shutdown + description: > + 'Shut the system down and log an event.' + class: callback + callback: group + members: + - shutdown + - log + +- name: shutdown + description: > + 'Shut down the system.' + class: callback + callback: method + service: org.freedesktop.systemd1 + path: /org/freedesktop/systemd1 + interface: org.freedesktop.systemd1.Manager + method: StartUnit + args: + - value: obmc-host-shutdown@0.target + type: string + - value: replace + type: string + +- name: log + description: > + 'Log a shutdown event to the systemd journal.' + class: callback + callback: journal + paths: chassis state + properties: chassis powered + severity: ERR + message: Shutting down system. There are not enough functional fans. 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 new file mode 100644 index 000000000..e1c610b02 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-policy/water-cooled.yaml @@ -0,0 +1,224 @@ +# Water cooled Witherspoon fan policy for PDM. +# +# A water cooled Witherspoon requires a minimum of two functional fans. +# If the number of functional fans drops below that +# power the system off. + +- name: fans + description: > + 'A water cooled Witherspoon has three fans to monitor.' + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0 + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2 + - 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 water cooled + description: > + 'Monitor 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 fan present + description: > + 'Trigger logic on fan presence state changes.' + class: watch + watch: property + paths: fans + properties: fan present + callback: check cooling type + +- name: watch fan functional + description: > + 'Trigger logic on fan functional state changes.' + class: watch + watch: property + paths: fans + properties: fan functional + callback: check cooling type + +- name: watch chassis state + description: > + 'Trigger logic on chassis power state changes.' + class: watch + watch: property + paths: chassis state + properties: chassis powered + callback: check cooling type + +- name: watch cooling type + description: > + 'Maintain a cache of the chassis cooling type.' + class: watch + watch: property + paths: chassis + properties: chassis water cooled + +- name: check cooling type + description: > + 'If this condition passes the chassis is water cooled.' + class: condition + condition: count + paths: chassis + properties: chassis water cooled + callback: check fans + countop: '==' + countbound: 1 + op: '==' + bound: true + +- name: check fans + description: > + 'Verify there are at least two functional fans.' + class: callback + callback: group + members: + - check presence + - check functional + +- name: check presence + description: > + 'If this condition passes more than one fan has been unplugged + for more than 25 seconds. Shut the system down. Count present + fans rather than non-present fans since the latter would pass + if the fan has not been created for some reason. + + For a more detailed definition of unplugged, consult the documentation + of xyz.openbmc_project.Inventory.Item and/or the documentation + of the fan inventory object implementation.' + class: condition + condition: count + paths: fans + properties: fan present + defer: 25000000us + callback: check power + countop: '<' + countbound: 2 + op: '==' + bound: true + +- name: check functional + description: > + 'If this condition passes more than one fan in the group has been marked + as nonfunctional for five seconds. Shut the system down. + + For a more detailed definition of nonfunctional, consult the documentation + of xyz.openbmc_project.State.Decorator.OperationalStatus and/or the + documentation of the fan inventory object implementation.' + class: condition + condition: count + paths: fans + properties: fan functional + defer: 5000000us + callback: check power + countop: '>' + countbound: 1 + op: '==' + bound: false + +- name: check power + description: > + 'If the chassis has power, power it off.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: log and shutdown + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: log and shutdown + description: > + 'Shut the system down and log an event.' + class: callback + callback: group + members: + - shutdown + - log + +- name: shutdown + description: > + 'Shut down the system.' + class: callback + callback: method + service: org.freedesktop.systemd1 + path: /org/freedesktop/systemd1 + interface: org.freedesktop.systemd1.Manager + method: StartUnit + args: + - value: obmc-host-shutdown@0.target + type: string + - value: replace + type: string + +- name: log + description: > + 'Log a shutdown event to the systemd journal.' + class: callback + callback: journal + paths: chassis state + properties: chassis powered + severity: ERR + message: Shutting down system. There are not enough functional fans. -- cgit v1.2.1