Skip to content

Commit

Permalink
Merge pull request openbmc#23 from wistron-corporation/op940_20190823
Browse files Browse the repository at this point in the history
Add mihawk sensor, fan control and d-bus monitor
  • Loading branch information
rfrandse committed Aug 27, 2019
2 parents c03630c + 39769ef commit 2aa7531
Show file tree
Hide file tree
Showing 48 changed files with 2,998 additions and 6 deletions.
11 changes: 8 additions & 3 deletions meta-ibm/meta-witherspoon/recipes-phosphor/dbus/fan-policy.bb
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,20 @@ inherit phosphor-dbus-monitor
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"

SRC_URI += "file://air-cooled.yaml"
SRC_URI += "file://water-cooled.yaml"
SRC_URI_append_ibm-ac-server = " file://water-cooled.yaml"
SRC_URI += "file://fan-errors.yaml"

do_install() {
do_install_append_ibm-ac-server() {
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
}

do_install_append_mihawk() {
install -D ${WORKDIR}/air-cooled.yaml ${D}${config_dir}/air-cooled.yaml
install -D ${WORKDIR}/fan-errors.yaml ${D}${config_dir}/fan-errors.yaml
}

FILES_${PN} += "${config_dir}/air-cooled.yaml"
FILES_${PN} += "${config_dir}/water-cooled.yaml"
FILES_${PN}_append_ibm-ac-server = " ${config_dir}/water-cooled.yaml"
FILES_${PN} += "${config_dir}/fan-errors.yaml"
Original file line number Diff line number Diff line change
@@ -0,0 +1,339 @@
# Air cooled mihawk fan policy for PDM.
#
# An air cooled mihawk requires a minimum of three functional fans
# enclosures or six functional fan rotors across all enclosures.
# If the number of functional fan enclosures is below three, soft poweroff
# the system, whereas if the number of fan rotors drop below six, an
# immediate hard poweroff of the system occurs.

- name: fan enclosures
description: >
'An air cooled mihawk has 6 fan enclosures 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
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5

- name: fan rotors
description: >
'An air cooled Witherspoon has eight fan rotors to monitor.'
class: group
group: path
members:
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0/fan0_0
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0/fan0_1
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1/fan1_0
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1/fan1_1
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2/fan2_0
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2/fan2_1
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3/fan3_0
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3/fan3_1
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4/fan4_0
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4/fan4_1
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5/fan5_0
- meta: FAN
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5/fan5_1

- 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 enclosure presence state changes.'
class: watch
watch: property
paths: fan enclosures
properties: fan present
callback: check cooling type

- name: watch fan functional
description: >
'Trigger logic on fan enclosure functional state changes.'
class: watch
watch: property
paths: fan enclosures
properties: fan functional
callback: check cooling type

- name: watch fan rotor functional
description: >
'Trigger logic on fan rotor functional state changes.'
class: watch
watch: property
paths: fan rotors
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 power
countop: '=='
countbound: 0
op: '=='
bound: true

- name: check power
description: >
'If the chassis has power, check 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 fans
description: >
'Verify there are at least three functional fan enclosures and at least
six functional fan rotors, power off if not.'
class: callback
callback: group
members:
- check group presence
- check group functional enclosures
- check group functional rotors

- name: check group 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: fan enclosures
properties: fan present
defer: 25000000us
callback: log and shutdown
countop: '<'
countbound: 6
op: '=='
bound: true

- name: check group functional enclosures
description: >
'If this condition passes more than one fan enclosure in the group has been
marked as nonfunctional for 25 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: fan enclosures
properties: fan functional
defer: 25000000us
callback: log and shutdown
countop: '>'
countbound: 1
op: '=='
bound: false

- name: check group functional rotors
description: >
'If this condition passes more than two fan rotors in the group have been
marked as nonfunctional for 25 seconds. Immediately power off.
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: fan rotors
properties: fan functional
defer: 25000000us
callback: log and poweroff
countop: '>'
countbound: 1
op: '=='
bound: false

- name: log and poweroff
description: >
'Immediately poweroff, log an event in the journal, and create an
error log.'
class: callback
callback: group
members:
- hard poweroff
- log hard poweroff
- create shutdown error

- name: log and shutdown
description: >
'Shut the system down, log an event in the journal, and create an
error log.'
class: callback
callback: group
members:
- shutdown
- log shutdown
- create shutdown error

- name: hard poweroff
description: >
'Immediately power off the system.'
class: callback
callback: method
service: org.freedesktop.systemd1
path: /org/freedesktop/systemd1
interface: org.freedesktop.systemd1.Manager
method: StartUnit
args:
- value: obmc-chassis-hard-poweroff@0.target
type: string
- value: replace
type: string

- 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 hard poweroff
description: >
'Log a hard poweroff event to the systemd journal.'
class: callback
callback: journal
paths: chassis state
properties: chassis powered
severity: ERR
message: Immediate poweroff of system. There are not enough functional fans.

- name: log shutdown
description: >
'Log a shutdown event to the systemd journal.'
class: callback
callback: journal
paths: chassis state
properties: chassis powered
severity: ERR
message: Request shutdown of system. There are not enough functional fans.

- name: create shutdown error
description: >
'Create a Fan Shutdown Error log.'
class: callback
callback: elog
paths: chassis state
properties: chassis powered
error: xyz::openbmc_project::State::Shutdown::Inventory::Error::Fan
Loading

0 comments on commit 2aa7531

Please sign in to comment.