Initial commit
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
SUMMARY = "Event policy configuration for meta-witherspoon machines"
|
||||
PR = "r1"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||
|
||||
inherit allarch
|
||||
inherit phosphor-dbus-monitor
|
||||
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
SRC_URI += "file://config.yaml"
|
||||
|
||||
do_install() {
|
||||
install -D ${WORKDIR}/config.yaml ${D}${config_dir}/config.yaml
|
||||
}
|
||||
|
||||
FILES:${PN} += "${config_dir}/config.yaml"
|
||||
@@ -0,0 +1,114 @@
|
||||
- name: occpath group
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: PATH
|
||||
path: /org/open_power/control/occ0
|
||||
|
||||
- name: occproctemp property
|
||||
class: group
|
||||
group: property
|
||||
type: boolean
|
||||
members:
|
||||
- interface: org.open_power.OCC.Status
|
||||
meta: PROPERTY
|
||||
property: ThrottleProcTemp
|
||||
|
||||
- name: occprocpower property
|
||||
class: group
|
||||
group: property
|
||||
type: boolean
|
||||
members:
|
||||
- interface: org.open_power.OCC.Status
|
||||
meta: PROPERTY
|
||||
property: ThrottleProcPower
|
||||
|
||||
- name: occmemtemp property
|
||||
class: group
|
||||
group: property
|
||||
type: boolean
|
||||
members:
|
||||
- interface: org.open_power.OCC.Status
|
||||
meta: PROPERTY
|
||||
property: ThrottleMemTemp
|
||||
|
||||
- name: watch occproctemp
|
||||
class: watch
|
||||
watch: property
|
||||
paths: occpath group
|
||||
properties: occproctemp property
|
||||
callback: check occproctemp
|
||||
|
||||
- name: watch occprocpower
|
||||
class: watch
|
||||
watch: property
|
||||
paths: occpath group
|
||||
properties: occprocpower property
|
||||
callback: check occprocpower
|
||||
|
||||
- name: watch occmemtemp
|
||||
class: watch
|
||||
watch: property
|
||||
paths: occpath group
|
||||
properties: occmemtemp property
|
||||
callback: check occmemtemp
|
||||
|
||||
- name: check occproctemp
|
||||
class: condition
|
||||
condition: count
|
||||
paths: occpath group
|
||||
properties: occproctemp property
|
||||
defer: 1000us
|
||||
callback: create occproctemp event
|
||||
countop: '=='
|
||||
countbound: 1
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: check occprocpower
|
||||
class: condition
|
||||
condition: count
|
||||
paths: occpath group
|
||||
properties: occprocpower property
|
||||
defer: 1000us
|
||||
callback: create occprocpower event
|
||||
countop: '=='
|
||||
countbound: 1
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: check occmemtemp
|
||||
class: condition
|
||||
condition: count
|
||||
paths: occpath group
|
||||
properties: occmemtemp property
|
||||
defer: 1000us
|
||||
callback: create occmemtemp event
|
||||
countop: '=='
|
||||
countbound: 1
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: create occproctemp event
|
||||
class: callback
|
||||
callback: event
|
||||
paths: occpath group
|
||||
properties: occproctemp property
|
||||
eventName: occ
|
||||
eventMessage: "Processor throttled due to an over temperature condition."
|
||||
|
||||
- name: create occprocpower event
|
||||
class: callback
|
||||
callback: event
|
||||
paths: occpath group
|
||||
properties: occprocpower property
|
||||
eventName: occ
|
||||
eventMessage: "Processor throttled due to reaching the power cap limit."
|
||||
|
||||
- name: create occmemtemp event
|
||||
class: callback
|
||||
callback: event
|
||||
paths: occpath group
|
||||
properties: occmemtemp property
|
||||
eventName: occ
|
||||
eventMessage: "Memory throttled due to an over temperature condition."
|
||||
@@ -0,0 +1,30 @@
|
||||
SUMMARY = "Fan policy configurations for meta-witherspoon machines"
|
||||
PR = "r1"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||
|
||||
inherit allarch
|
||||
inherit phosphor-dbus-monitor
|
||||
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
SRC_URI:append:df-openpower = " file://air-cooled.yaml"
|
||||
SRC_URI:append:ibm-ac-server = " file://water-cooled.yaml"
|
||||
SRC_URI:append:df-openpower = " file://fan-errors.yaml"
|
||||
|
||||
SRC_URI:remove:p10bmc = "file://air-cooled.yaml"
|
||||
SRC_URI:remove:p10bmc = "file://fan-errors.yaml"
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
FILES:${PN} += "${config_dir}/air-cooled.yaml"
|
||||
FILES:${PN}:append:ibm-ac-server = " ${config_dir}/water-cooled.yaml"
|
||||
FILES:${PN} += "${config_dir}/fan-errors.yaml"
|
||||
|
||||
FILES:${PN}:remove:p10bmc = "${config_dir}/air-cooled.yaml"
|
||||
FILES:${PN}:remove:p10bmc = "${config_dir}/fan-errors.yaml"
|
||||
@@ -0,0 +1,274 @@
|
||||
# Air cooled Swift fan policy for PDM.
|
||||
#
|
||||
# An air cooled Swift requires a minimum of three functional fan enclosures.
|
||||
# If the number of functional fan enclosures is below three, soft poweroff
|
||||
# the system.
|
||||
|
||||
- name: fan enclosures
|
||||
description: >
|
||||
'An air cooled Swift has four 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
|
||||
|
||||
- name: chassis state
|
||||
description: >
|
||||
'Swift has a single chassis to monitor.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: CHASSISSTATE
|
||||
path: /xyz/openbmc_project/state/chassis0
|
||||
|
||||
- name: chassis
|
||||
description: >
|
||||
'Swift 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 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,
|
||||
power off if not.'
|
||||
class: callback
|
||||
callback: group
|
||||
members:
|
||||
- check group presence
|
||||
- check group functional enclosures
|
||||
|
||||
- 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: 3
|
||||
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 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: fan enclosures
|
||||
properties: fan functional
|
||||
defer: 5000000us
|
||||
callback: log and shutdown
|
||||
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
|
||||
@@ -0,0 +1,671 @@
|
||||
# Swift 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.
|
||||
# Note: An error is created each time the chassis powers on.
|
||||
#
|
||||
# * Watch for fans to become both present and functional, and then resolve
|
||||
# their errors
|
||||
|
||||
- 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: >
|
||||
'Swift has a single chassis to monitor.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: CHASSISSTATE
|
||||
path: /xyz/openbmc_project/state/chassis0
|
||||
|
||||
- name: chassis
|
||||
description: >
|
||||
'Swift 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: fan present and functional
|
||||
description: >
|
||||
'Monitor the present and functional state of each fan.'
|
||||
class: group
|
||||
group: property
|
||||
type: boolean
|
||||
members:
|
||||
- interface: xyz.openbmc_project.Inventory.Item
|
||||
meta: PRESENT
|
||||
property: Present
|
||||
- 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: watch fan0 present and functional for resolving error logs
|
||||
description: >
|
||||
'On fan present or functional state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan0
|
||||
properties: fan present and functional
|
||||
callback: resolve fan0 errors if present and functional
|
||||
|
||||
- name: watch fan1 present and functional for resolving error logs
|
||||
description: >
|
||||
'On fan present or functional state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan1
|
||||
properties: fan present and functional
|
||||
callback: resolve fan1 errors if present and functional
|
||||
|
||||
- name: watch fan2 present and functional for resolving error logs
|
||||
description: >
|
||||
'On fan present or functional state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan2
|
||||
properties: fan present and functional
|
||||
callback: resolve fan2 errors if present and functional
|
||||
|
||||
- name: watch fan3 present and functional for resolving error logs
|
||||
description: >
|
||||
'On fan present or functional state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan3
|
||||
properties: fan present and functional
|
||||
callback: resolve fan3 errors if present and 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.'
|
||||
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: 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
|
||||
|
||||
- name: resolve fan0 errors if present and functional
|
||||
description: >
|
||||
'If fan0 is present and functional, call the resolve fan0 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan0
|
||||
properties: fan present and functional
|
||||
callback: resolve fan0 errors
|
||||
countop: '=='
|
||||
countbound: 2
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
#Go ahead and do this on water cooled as well
|
||||
- name: resolve fan1 errors if present and functional
|
||||
description: >
|
||||
'If fan1 is present and functional, call the resolve fan1 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan1
|
||||
properties: fan present and functional
|
||||
callback: resolve fan1 errors
|
||||
countop: '=='
|
||||
countbound: 2
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: resolve fan2 errors if present and functional
|
||||
description: >
|
||||
'If fan2 is present and functional, call the resolve fan2 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan2
|
||||
properties: fan present and functional
|
||||
callback: resolve fan2 errors
|
||||
countop: '=='
|
||||
countbound: 2
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: resolve fan3 errors if present and functional
|
||||
description: >
|
||||
'If fan3 is present and functional, call the resolve fan3 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan3
|
||||
properties: fan present and functional
|
||||
callback: resolve fan3 errors
|
||||
countop: '=='
|
||||
countbound: 2
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: resolve fan0 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: fan0
|
||||
properties: fan present and functional
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
|
||||
|
||||
- name: resolve fan1 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: fan1
|
||||
properties: fan present and functional
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
|
||||
|
||||
- name: resolve fan2 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: fan2
|
||||
properties: fan present and functional
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
|
||||
|
||||
- name: resolve fan3 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: fan3
|
||||
properties: fan present and functional
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
|
||||
@@ -0,0 +1,274 @@
|
||||
# Water cooled Swift fan policy for PDM.
|
||||
#
|
||||
# A water cooled Swift requires a minimum of three functional fan
|
||||
# enclosures. If the number of functional fan enclosures is below three,
|
||||
# soft poweroff the system.
|
||||
|
||||
- name: fan enclosures
|
||||
description: >
|
||||
'A water cooled Swift has four 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
|
||||
|
||||
- name: chassis state
|
||||
description: >
|
||||
'Swift has a single chassis to monitor.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: CHASSISSTATE
|
||||
path: /xyz/openbmc_project/state/chassis0
|
||||
|
||||
- name: chassis
|
||||
description: >
|
||||
'Swift 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 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 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 power
|
||||
countop: '=='
|
||||
countbound: 1
|
||||
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,
|
||||
power off if not.'
|
||||
class: callback
|
||||
callback: group
|
||||
members:
|
||||
- check group presence
|
||||
- check group functional enclosures
|
||||
|
||||
- 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: 3
|
||||
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 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: fan enclosures
|
||||
properties: fan functional
|
||||
defer: 5000000us
|
||||
callback: log and shutdown
|
||||
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
|
||||
@@ -0,0 +1,328 @@
|
||||
# Air cooled Witherspoon fan policy for PDM.
|
||||
#
|
||||
# An air cooled Witherspoon 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 Witherspoon has four 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
|
||||
|
||||
- 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
|
||||
|
||||
- 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: 3
|
||||
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 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: fan enclosures
|
||||
properties: fan functional
|
||||
defer: 5000000us
|
||||
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 five 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: 5000000us
|
||||
callback: log and poweroff
|
||||
countop: '>'
|
||||
countbound: 2
|
||||
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
|
||||
@@ -0,0 +1,676 @@
|
||||
# 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.
|
||||
#
|
||||
# * Watch for fans to become both present and functional, and then resolve
|
||||
# their errors
|
||||
|
||||
- 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: fan present and functional
|
||||
description: >
|
||||
'Monitor the present and functional state of each fan.'
|
||||
class: group
|
||||
group: property
|
||||
type: boolean
|
||||
members:
|
||||
- interface: xyz.openbmc_project.Inventory.Item
|
||||
meta: PRESENT
|
||||
property: Present
|
||||
- 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: watch fan0 present and functional for resolving error logs
|
||||
description: >
|
||||
'On fan present or functional state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan0
|
||||
properties: fan present and functional
|
||||
callback: resolve fan0 errors if present and functional
|
||||
|
||||
- name: watch fan1 present and functional for resolving error logs
|
||||
description: >
|
||||
'On fan present or functional state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan1
|
||||
properties: fan present and functional
|
||||
callback: resolve fan1 errors if present and functional
|
||||
|
||||
- name: watch fan2 present and functional for resolving error logs
|
||||
description: >
|
||||
'On fan present or functional state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan2
|
||||
properties: fan present and functional
|
||||
callback: resolve fan2 errors if present and functional
|
||||
|
||||
- name: watch fan3 present and functional for resolving error logs
|
||||
description: >
|
||||
'On fan present or functional state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: fan3
|
||||
properties: fan present and functional
|
||||
callback: resolve fan3 errors if present and 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
|
||||
|
||||
- name: resolve fan0 errors if present and functional
|
||||
description: >
|
||||
'If fan0 is present and functional, call the resolve fan0 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan0
|
||||
properties: fan present and functional
|
||||
callback: resolve fan0 errors
|
||||
countop: '=='
|
||||
countbound: 2
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
#Go ahead and do this on water cooled as well
|
||||
- name: resolve fan1 errors if present and functional
|
||||
description: >
|
||||
'If fan1 is present and functional, call the resolve fan1 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan1
|
||||
properties: fan present and functional
|
||||
callback: resolve fan1 errors
|
||||
countop: '=='
|
||||
countbound: 2
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: resolve fan2 errors if present and functional
|
||||
description: >
|
||||
'If fan2 is present and functional, call the resolve fan2 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan2
|
||||
properties: fan present and functional
|
||||
callback: resolve fan2 errors
|
||||
countop: '=='
|
||||
countbound: 2
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: resolve fan3 errors if present and functional
|
||||
description: >
|
||||
'If fan3 is present and functional, call the resolve fan3 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: fan3
|
||||
properties: fan present and functional
|
||||
callback: resolve fan3 errors
|
||||
countop: '=='
|
||||
countbound: 2
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: resolve fan0 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: fan0
|
||||
properties: fan present and functional
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
|
||||
|
||||
- name: resolve fan1 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: fan1
|
||||
properties: fan present and functional
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
|
||||
|
||||
- name: resolve fan2 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: fan2
|
||||
properties: fan present and functional
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
|
||||
|
||||
- name: resolve fan3 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: fan3
|
||||
properties: fan present and functional
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
|
||||
@@ -0,0 +1,322 @@
|
||||
# Water cooled Witherspoon fan policy for PDM.
|
||||
#
|
||||
# A water cooled Witherspoon requires a minimum of two functional fan
|
||||
# enclosures or four functional fan rotors across all enclosures.
|
||||
# If the number of functional fan enclosures is below two, soft poweroff
|
||||
# the system, whereas if the number of fan rotors drop below four, an
|
||||
# immediate hard poweroff of the system occurs.
|
||||
|
||||
- name: fan enclosures
|
||||
description: >
|
||||
'A water cooled Witherspoon has three 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/fan2
|
||||
- meta: FAN
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
|
||||
|
||||
- name: fan rotors
|
||||
description: >
|
||||
'A water cooled Witherspoon has six 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/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
|
||||
|
||||
- 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 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 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 power
|
||||
countop: '=='
|
||||
countbound: 1
|
||||
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 two functional fan enclosures and at least
|
||||
four 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: 2
|
||||
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 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: fan enclosures
|
||||
properties: fan functional
|
||||
defer: 5000000us
|
||||
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 five 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: 5000000us
|
||||
callback: log and poweroff
|
||||
countop: '>'
|
||||
countbound: 2
|
||||
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
|
||||
@@ -0,0 +1,6 @@
|
||||
PHOSPHOR_DBUS_MONITOR_CONFIGS:append:ibm-ac-server = " fan-policy"
|
||||
PHOSPHOR_DBUS_MONITOR_CONFIGS:append:ibm-ac-server = " thermal-policy"
|
||||
PHOSPHOR_DBUS_MONITOR_CONFIGS:append:ibm-ac-server = " power-supply-policy"
|
||||
PHOSPHOR_DBUS_MONITOR_CONFIGS:append:ibm-ac-server = " events-policy"
|
||||
PHOSPHOR_DBUS_MONITOR_CONFIGS:append:ibm-ac-server = " snmp-policy"
|
||||
PHOSPHOR_DBUS_MONITOR_CONFIGS:append:p10bmc = " snmp-policy"
|
||||
@@ -0,0 +1,3 @@
|
||||
[Unit]
|
||||
Wants=mapper-wait@-xyz-openbmc_project-network-snmp.service
|
||||
After=mapper-wait@-xyz-openbmc_project-network-snmp.service
|
||||
@@ -0,0 +1,4 @@
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
SYSTEMD_LINK:phosphor-msl-verify:append:ibm-ac-server = " ../phosphor-msl-verify.service:obmc-chassis-poweron@0.target.requires/phosphor-msl-verify.service"
|
||||
SYSTEMD_OVERRIDE:${PN}:append = " phosphor-dbus-monitor-snmp.conf:phosphor-dbus-monitor.service.d/phosphor-dbus-monitor-snmp.conf"
|
||||
@@ -0,0 +1,2 @@
|
||||
PACKAGECONFIG = "unit-failure-monitor"
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
SUMMARY = "Power supply policy configuration for meta-witherspoon machines"
|
||||
PR = "r1"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||
|
||||
inherit allarch
|
||||
inherit phosphor-dbus-monitor
|
||||
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
SRC_URI += "file://power-supply-policy.yaml"
|
||||
|
||||
do_install() {
|
||||
install -D ${WORKDIR}/power-supply-policy.yaml ${D}${config_dir}/power-supply-policy.yaml
|
||||
}
|
||||
|
||||
FILES:${PN} += "${config_dir}/power-supply-policy.yaml"
|
||||
@@ -0,0 +1,215 @@
|
||||
# Machine power supply policy for PDM.
|
||||
#
|
||||
# Create an error if a power supply is removed while the system is powered on
|
||||
|
||||
- name: power supply0
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: POWER SUPPLY
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0
|
||||
|
||||
- name: power supply1
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: POWER SUPPLY
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1
|
||||
|
||||
- name: power supplies
|
||||
description: >
|
||||
'The machine has two power supplies to monitor.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: POWER SUPPLY
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0
|
||||
- meta: POWER SUPPLY
|
||||
path: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1
|
||||
|
||||
- name: chassis state
|
||||
description: >
|
||||
'The machine has a single chassis to monitor.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: CHASSISSTATE
|
||||
path: /xyz/openbmc_project/state/chassis0
|
||||
|
||||
- name: power supply present
|
||||
description: >
|
||||
'Monitor the presence state of each power supply.'
|
||||
class: group
|
||||
group: property
|
||||
type: boolean
|
||||
members:
|
||||
- interface: xyz.openbmc_project.Inventory.Item
|
||||
meta: PRESENT
|
||||
property: Present
|
||||
|
||||
- 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: watch power supply present
|
||||
description: >
|
||||
'Trigger logic on power supply presence state changes.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: power supplies
|
||||
properties: power supply present
|
||||
callback: check power
|
||||
|
||||
- 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: check power
|
||||
description: >
|
||||
'If the chassis has power, check for power supplies.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: chassis state
|
||||
properties: chassis powered
|
||||
callback: check power supplies
|
||||
countop: '>'
|
||||
countbound: 0
|
||||
op: '=='
|
||||
bound: xyz.openbmc_project.State.Chassis.PowerState.On
|
||||
|
||||
- name: check power supplies
|
||||
description: >
|
||||
'Create an error if a power supply is not present.'
|
||||
class: callback
|
||||
callback: group
|
||||
members:
|
||||
- check power supply0 presence
|
||||
- check power supply1 presence
|
||||
|
||||
- name: check power supply0 presence
|
||||
description: >
|
||||
'If this condition passes power supply0 has been unplugged for more than
|
||||
5 seconds. Count present power supplies rather than non-present
|
||||
power supplies since the latter would pass if the power supply 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 power supply inventory object implementation.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: power supply0
|
||||
properties: power supply present
|
||||
defer: 5000000us
|
||||
callback: notpresent power supply0 error
|
||||
countop: '<'
|
||||
countbound: 1
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: check power supply1 presence
|
||||
description: >
|
||||
'If this condition passes power supply1 has been unplugged for more than
|
||||
5 seconds.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: power supply1
|
||||
properties: power supply present
|
||||
defer: 5000000us
|
||||
callback: notpresent power supply1 error
|
||||
countop: '<'
|
||||
countbound: 1
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: notpresent power supply0 error
|
||||
class: callback
|
||||
callback: elog
|
||||
paths: power supply0
|
||||
properties: power supply 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/powersupply0
|
||||
type: string
|
||||
|
||||
- name: notpresent power supply1 error
|
||||
class: callback
|
||||
callback: elog
|
||||
paths: power supply1
|
||||
properties: power supply 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/powersupply1
|
||||
type: string
|
||||
|
||||
- name: resolve power supply0 errors if present
|
||||
description: >
|
||||
'If power supply0 is present, call the resolve ps0 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: power supply0
|
||||
properties: power supply present
|
||||
callback: resolve power supply0 errors
|
||||
countop: '>'
|
||||
countbound: 0
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: resolve power supply1 errors if present
|
||||
description: >
|
||||
'If power supply1 is present, call the resolve ps1 errors callback.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: power supply1
|
||||
properties: power supply present
|
||||
callback: resolve power supply1 errors
|
||||
countop: '>'
|
||||
countbound: 0
|
||||
op: '=='
|
||||
bound: true
|
||||
|
||||
- name: resolve power supply0 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: power supply0
|
||||
properties: power supply present
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0
|
||||
|
||||
- name: resolve power supply1 errors
|
||||
class: callback
|
||||
callback: resolve callout
|
||||
paths: power supply1
|
||||
properties: power supply present
|
||||
callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1
|
||||
|
||||
- name: watch power supply0 present for resolving error logs
|
||||
description: >
|
||||
'On supply present state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: power supply0
|
||||
properties: power supply present
|
||||
callback: resolve power supply0 errors if present
|
||||
|
||||
- name: watch power supply1 present for resolving error logs
|
||||
description: >
|
||||
'On supply present state changes, check if errors need to be resolved.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: power supply1
|
||||
properties: power supply present
|
||||
callback: resolve power supply1 errors if present
|
||||
@@ -0,0 +1,17 @@
|
||||
SUMMARY = "snmp policy configuration for meta-ibm machines"
|
||||
PR = "r1"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||
|
||||
inherit allarch
|
||||
inherit phosphor-dbus-monitor
|
||||
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
SRC_URI += "file://snmp-config.yaml"
|
||||
|
||||
do_install() {
|
||||
install -D ${WORKDIR}/snmp-config.yaml ${D}${config_dir}/snmp-config.yaml
|
||||
}
|
||||
|
||||
FILES:${PN} += "${config_dir}/snmp-config.yaml"
|
||||
@@ -0,0 +1,18 @@
|
||||
- name: errorlog path group
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: PATH
|
||||
path: /xyz/openbmc_project/logging
|
||||
|
||||
- name: pathwatch errorlog
|
||||
class: pathwatch
|
||||
pathwatch: path
|
||||
paths: errorlog path group
|
||||
pathcallback: create errorlog trap
|
||||
|
||||
- name: create errorlog trap
|
||||
class: pathcallback
|
||||
pathcallback: eventpath
|
||||
paths: errorlog path group
|
||||
eventType: ErrorTrap
|
||||
@@ -0,0 +1,18 @@
|
||||
SUMMARY = "Thermal policy configuration for meta-witherspoon machines"
|
||||
PR = "r1"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||
|
||||
inherit allarch
|
||||
inherit phosphor-dbus-monitor
|
||||
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
|
||||
|
||||
SRC_URI:append:ibm-ac-server = " file://thermal-policy.yaml"
|
||||
|
||||
do_install:ibm-ac-server() {
|
||||
install -D ${WORKDIR}/thermal-policy.yaml ${D}${config_dir}/thermal-policy.yaml
|
||||
}
|
||||
|
||||
|
||||
FILES:${PN}:append:ibm-ac-server = " ${config_dir}/thermal-policy.yaml"
|
||||
@@ -0,0 +1,187 @@
|
||||
# Machine thermal policy for PDM.
|
||||
#
|
||||
# Shut down the system if more than three cores
|
||||
# have a temperature greater than 115 degrees Celcius.
|
||||
|
||||
|
||||
- name: core sensors
|
||||
description: >
|
||||
'The machine has two processor chips with 24 cores each.'
|
||||
class: group
|
||||
group: path
|
||||
members:
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core0_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core1_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core2_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core3_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core4_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core5_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core6_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core7_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core8_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core9_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core10_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core11_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core12_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core13_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core14_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core15_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core16_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core17_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core18_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core19_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core20_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core21_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core22_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p0_core23_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core0_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core1_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core2_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core3_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core4_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core5_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core6_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core7_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core8_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core9_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core10_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core11_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core12_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core13_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core14_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core15_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core16_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core17_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core18_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core19_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core20_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core21_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core22_temp
|
||||
- meta: SENSOR
|
||||
path: /xyz/openbmc_project/sensors/temperature/p1_core23_temp
|
||||
|
||||
- name: core temp
|
||||
description: >
|
||||
'Monitor the temperature of each core.'
|
||||
class: group
|
||||
group: property
|
||||
type: int64
|
||||
members:
|
||||
- interface: xyz.openbmc_project.Sensor.Value
|
||||
meta: TEMP
|
||||
property: Value
|
||||
|
||||
- name: watch core temps
|
||||
description: >
|
||||
'Trigger logic on core temp changes.'
|
||||
class: watch
|
||||
watch: property
|
||||
paths: core sensors
|
||||
properties: core temp
|
||||
callback: check temps
|
||||
|
||||
- name: check temps
|
||||
description: >
|
||||
'If this condition passes at least three cores are running
|
||||
too hot. Shut the system down.'
|
||||
class: condition
|
||||
condition: count
|
||||
paths: core sensors
|
||||
properties: core temp
|
||||
callback: log and shutdown
|
||||
countop: '>='
|
||||
countbound: 3
|
||||
op: '>='
|
||||
bound: 115000
|
||||
oneshot: true
|
||||
|
||||
- name: log and shutdown
|
||||
description: >
|
||||
'Shut the system down and log an event.'
|
||||
class: callback
|
||||
callback: group
|
||||
members:
|
||||
- shutdown
|
||||
- create criticalhigh error
|
||||
- create shutdown error
|
||||
|
||||
- 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-chassis-hard-poweroff@0.target
|
||||
type: string
|
||||
- value: replace
|
||||
type: string
|
||||
|
||||
- name: create criticalhigh error
|
||||
description: >
|
||||
'Create a CriticalHigh Error log.'
|
||||
class: callback
|
||||
callback: elog_with_metadata
|
||||
paths: core sensors
|
||||
properties: core temp
|
||||
error: xyz::openbmc_project::Sensor::Threshold::Error::CriticalHigh
|
||||
metadata: xyz::openbmc_project::Sensor::Threshold::CriticalHigh::SENSOR_DATA
|
||||
|
||||
- name: create shutdown error
|
||||
description: >
|
||||
'Create a SystemShutdown Error log.'
|
||||
class: callback
|
||||
callback: elog
|
||||
paths: core sensors
|
||||
properties: core temp
|
||||
error: xyz::openbmc_project::State::Shutdown::ThermalEvent::Error::Processor
|
||||
Reference in New Issue
Block a user