Initial commit

This commit is contained in:
Your Name
2026-04-23 17:07:55 +08:00
commit b7e39e063b
16725 changed files with 1625565 additions and 0 deletions
@@ -0,0 +1,2 @@
PACKAGECONFIG:append:p10bmc = " ibm-hypervisor-cert"
PACKAGECONFIG:append:witherspoon-tacoma = " ibm-hypervisor-cert"
@@ -0,0 +1,35 @@
SUMMARY = "AVSBus control"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit allarch
inherit obmc-phosphor-systemd
RDEPENDS:${PN} += "i2c-tools"
S = "${WORKDIR}"
SRC_URI:append:witherspoon = " file://avsbus-enable.sh"
SRC_URI:append:witherspoon = " file://avsbus-disable.sh"
do_install:witherspoon() {
install -d ${D}${bindir}
install -m 0755 ${S}/avsbus-enable.sh ${D}${bindir}/avsbus-enable.sh
install -m 0755 ${S}/avsbus-disable.sh ${D}${bindir}/avsbus-disable.sh
}
TMPL_EN= "avsbus-enable@.service"
TMPL_DIS= "avsbus-disable@.service"
INSTFMT_EN= "avsbus-enable@{0}.service"
INSTFMT_DIS= "avsbus-disable@{0}.service"
TGTFMT = "obmc-chassis-poweron@{0}.target"
FMT_EN = "../${TMPL_EN}:${TGTFMT}.requires/${INSTFMT_EN}"
FMT_DIS = "../${TMPL_DIS}:${TGTFMT}.requires/${INSTFMT_DIS}"
SYSTEMD_SERVICE:${PN}:append:witherspoon = " ${TMPL_EN}"
SYSTEMD_SERVICE:${PN}:append:witherspoon = " ${TMPL_DIS}"
SYSTEMD_LINK:${PN}:append:witherspoon = " ${@compose_list(d, 'FMT_DIS', 'OBMC_CHASSIS_INSTANCES')}"
SYSTEMD_LINK:${PN}:append:witherspoon = " ${@compose_list(d, 'FMT_EN', 'OBMC_CHASSIS_INSTANCES')}"
@@ -0,0 +1,20 @@
#!/bin/sh
# For each AVSBus attached power rail set the default boot voltage and then
# program the OPERATION register to switch to AVSBus mode and update default
# start voltage to what was last programmed in VOUT_COMMAND. This should be run
# before power-on. This is platform specific settings that must be
# updated/removed if not Swift.
i2cset -y 9 0x70 0x00 0x00 b # VDD 0 - PAGE set
i2cset -y 9 0x70 0x01 0xB0 b # VDD 0
i2cset -y 9 0x71 0x00 0x01 b # VCS 0 - PAGE set
i2cset -y 9 0x71 0x01 0xB0 b # VCS 0
i2cset -y 9 0x71 0x00 0x00 b # VDN 0 - PAGE set
i2cset -y 9 0x71 0x01 0xB0 b # VDN 0
i2cset -y 10 0x70 0x00 0x00 b # VDD 1 - PAGE set
i2cset -y 10 0x70 0x01 0xB0 b # VDD 1
i2cset -y 10 0x71 0x00 0x01 b # VCS 1 - PAGE set
i2cset -y 10 0x71 0x01 0xB0 b # VCS 1
i2cset -y 10 0x71 0x00 0x00 b # VDN 1 - PAGE set
i2cset -y 10 0x71 0x01 0xB0 b # VDN 1
@@ -0,0 +1,15 @@
[Unit]
Description=Enable the AVS bus on VRMs
Wants=obmc-power-start@%i.service
Before=obmc-power-start@%i.service
Conflicts=obmc-chassis-poweroff@%i.target
ConditionPathExists=!/run/openbmc/chassis@%i-on
[Service]
ExecStart={bindir}/avsbus-enable.sh
SyslogIdentifier=avsbus-enable.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1,16 @@
#!/bin/sh
i2cset -y 4 0x70 0x00 0x00 b # VDD 0 - PAGE set
i2cset -y 4 0x70 0x01 0x80 b # VDD 0
i2cset -y 4 0x70 0x00 0x01 b # VCS 0 - PAGE set
i2cset -y 4 0x70 0x01 0x80 b # VCS 0
i2cset -y 4 0x70 0x00 0x00 b # VCS 0 - PAGE reset
i2cset -y 4 0x71 0x00 0x00 b # VDN 0 - PAGE set
i2cset -y 4 0x71 0x01 0x80 b # VDN 0
i2cset -y 5 0x70 0x00 0x00 b # VDD 1 - PAGE set
i2cset -y 5 0x70 0x01 0x80 b # VDD 1
i2cset -y 5 0x70 0x00 0x01 b # VCS 1 - PAGE set
i2cset -y 5 0x70 0x01 0x80 b # VCS 1
i2cset -y 5 0x70 0x00 0x00 b # VCS 1 - PAGE reset
i2cset -y 5 0x71 0x00 0x00 b # VDN 1 - PAGE set
i2cset -y 5 0x71 0x01 0x80 b # VDN 1
@@ -0,0 +1,15 @@
[Unit]
Description=Disable the AVS bus on the VRMs
Wants=power-workarounds@%i.service
After=power-workarounds@%i.service
Before=vrm-control@%i.service
Conflicts=obmc-chassis-poweroff@%i.target
ConditionPathExists=!/run/openbmc/chassis@%i-on
[Service]
ExecStart=/usr/bin/avsbus-disable.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1,22 @@
#!/bin/sh
i2cset -y 4 0x70 0x00 0x00 b # VDD 0 - PAGE set
i2cset -y 4 0x70 0x21 0x00 0x01 i # VDD 0 - Set default HW boot voltage
i2cset -y 4 0x70 0x01 0xB0 b # VDD 0
i2cset -y 4 0x70 0x00 0x01 b # VCS 0 - PAGE set
i2cset -y 4 0x70 0x21 0x08 0x01 i # VCS 0 - Set default HW boot voltage
i2cset -y 4 0x70 0x01 0xB0 b # VCS 0
i2cset -y 4 0x70 0x00 0x00 b # VCS 0 - PAGE reset
i2cset -y 4 0x71 0x00 0x00 b # VDN 0 - PAGE set
i2cset -y 4 0x71 0x21 0x00 0x01 i # VDN 0 - Set default HW boot voltage
i2cset -y 4 0x71 0x01 0xB0 b # VDN 0
i2cset -y 5 0x70 0x00 0x00 b # VDD 1 - PAGE set
i2cset -y 5 0x70 0x21 0x00 0x01 i # VDD 1 - Set default HW boot voltage
i2cset -y 5 0x70 0x01 0xB0 b # VDD 1
i2cset -y 5 0x70 0x00 0x01 b # VCS 1 - PAGE set
i2cset -y 5 0x70 0x21 0x08 0x01 i # VCS 1 - Set default HW boot voltage
i2cset -y 5 0x70 0x01 0xB0 b # VCS 1
i2cset -y 5 0x70 0x00 0x00 b # VCS 1 - PAGE reset
i2cset -y 5 0x71 0x00 0x00 b # VDN 1 - PAGE set
i2cset -y 5 0x71 0x21 0x00 0x01 i # VDN 1 - Set default HW boot voltage
i2cset -y 5 0x71 0x01 0xB0 b # VDN 1
@@ -0,0 +1,14 @@
[Unit]
Description=Enable the AVS bus on VRMs
Wants=vrm-control@%i.service
After=vrm-control@%i.service
Conflicts=obmc-chassis-poweroff@%i.target
ConditionPathExists=!/run/openbmc/chassis@%i-on
[Service]
ExecStart=/usr/bin/avsbus-enable.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1 @@
EXTRA_OEMESON:append:p10bmc = " -Dpower-button-profile=host_then_chassis_poweroff"
@@ -0,0 +1,6 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
# Remove, from the p10bmc image, the service file that starts the skeleton power
# control application. That image will use the power control application
# included in the phosphor-power repository.
OBMC_CONTROL_POWER_FMT:p10bmc = ""
@@ -0,0 +1,2 @@
POLL_INTERVAL="500"
PGOOD_TIMEOUT="10"
@@ -0,0 +1,36 @@
SUMMARY = "Power device Workarounds"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit allarch
inherit obmc-phosphor-systemd
RDEPENDS:${PN} += "i2c-tools"
S = "${WORKDIR}"
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}/${MACHINE}:"
SRC_URI:append:witherspoon = " file://power-workarounds.sh"
SRC_URI:append:swift = " file://power-workarounds.sh"
do_install:append:witherspoon() {
install -d ${D}${bindir}
install -m 0755 ${S}/power-workarounds.sh ${D}${bindir}/power-workarounds.sh
}
do_install:append:swift() {
install -d ${D}${bindir}
install -m 0755 ${S}/power-workarounds.sh ${D}${bindir}/power-workarounds.sh
}
TMPL_WA = "power-workarounds@.service"
INSTFMT_WA = "power-workarounds@{0}.service"
TGTFMT = "obmc-chassis-poweron@{0}.target"
FMT_WA = "../${TMPL_WA}:${TGTFMT}.requires/${INSTFMT_WA}"
SYSTEMD_SERVICE:${PN}:append:witherspoon = " ${TMPL_WA}"
SYSTEMD_LINK:${PN}:append:witherspoon = "${@compose_list(d, 'FMT_WA', 'OBMC_CHASSIS_INSTANCES')}"
SYSTEMD_SERVICE:${PN}:append:swift = " ${TMPL_WA}"
SYSTEMD_LINK:${PN}:append:swift = "${@compose_list(d, 'FMT_WA', 'OBMC_CHASSIS_INSTANCES')}"
@@ -0,0 +1,23 @@
#!/bin/sh
# This should be run before power-on and used to patch/update power specific
# hardware settings. This is platform specific settings that must be
# updated/removed if not Swift.
########## Program TPS53915 FSW to desired frequency #########
# FREQUENCY_CONFIG D3h, bits 2:0
# AVDD, bus 3 addr 1D, set to 600khz
# 600khz = 1,0,0
i2cset -y 3 0x1D 0xD3 0x04 b
# 3.3VA, bus 3 addr 1C, set to 600khz
i2cset -y 3 0x1C 0xD3 0x04 b
# 3.3VB, bus 3 addr 1B, set to 600khz
i2cset -y 3 0x1B 0xD3 0x04 b
# 5.0V, bus 3 addr 1A, set to 850khz
# 850khz = 1,1,0
i2cset -y 3 0x1A 0xD3 0x06 b
########## END Program TPS53915 FSW to desired frequency #########
@@ -0,0 +1,16 @@
[Unit]
Description=Perform power workarounds on VRMs after PGOOD is up
Wants=obmc-power-on@%i.target
After=obmc-power-on@%i.target
Before=obmc-host-start-pre@%i.target
Conflicts=obmc-chassis-poweroff@%i.target
ConditionPathExists=!/run/openbmc/chassis@%i-on
[Service]
ExecStart=/usr/bin/power-workarounds.sh
SyslogIdentifier=power-workarounds.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1,136 @@
#!/bin/sh
# ensure VCS ON_OFF_CONFIG set correctly from prior FW drivers
# A side
i2cset -y 4 0x70 0x00 0x01 b
i2cset -y 4 0x70 0x02 0x16 b #respond to ENABLE pin
i2cset -y 4 0x70 0x00 0x00 b
# B side
i2cset -y 5 0x70 0x00 0x01 b
i2cset -y 5 0x70 0x02 0x16 b #respond to ENABLE pin
i2cset -y 5 0x70 0x00 0x00 b
# vddio = 1.0V, mdat/sdat PU enabled
i2cset -y 4 0x12 0xFF 0x00 b # VDD/VCS 0
i2cset -y 4 0x12 0x2E 0x03 b # VDD/VCS 0
i2cset -y 4 0x13 0xFF 0x00 b # VDN 0
i2cset -y 4 0x13 0x2E 0x03 b # VDN 0
i2cset -y 5 0x12 0xFF 0x00 b # VDD/VCS 1
i2cset -y 5 0x12 0x2E 0x03 b # VDD/VCS 1
i2cset -y 5 0x13 0xFF 0x00 b # VDN 1
i2cset -y 5 0x13 0x2E 0x03 b # VDN 1
# A side VDDR - set to 1.23V
i2cset -y 4 0x71 0x00 0x01
i2cset -y 4 0x71 0x21 0x3B 0x01 i
i2cset -y 4 0x71 0x00 0x00
# B side VDDR - set to 1.23V
i2cset -y 5 0x71 0x00 0x01
i2cset -y 5 0x71 0x21 0x3B 0x01 i
i2cset -y 5 0x71 0x00 0x00
# VDN A - PGOOD_ON threshold
i2cset -y 4 0x71 0x00 0x00 b # PAGE
i2cset -y 4 0x71 0x5E 0xCD 0x00 i # set to 0.8V
# VDN B - PGOOD_ON threshold
i2cset -y 5 0x71 0x00 0x00 b # PAGE
i2cset -y 5 0x71 0x5E 0xCD 0x00 i # set to 0.8V
# unbind ucd driver to permit i2cset
ucd_retries=5
ucd=
ucdpath="/sys/bus/i2c/drivers/ucd9000"
if [ -e $ucdpath ]
then
# shellcheck disable=SC2010
ucd=$(ls -1 $ucdpath | grep 64)
if [ -n "$ucd" ]
then
echo "$ucd" > $ucdpath/unbind
fi
fi
# make sure VCS ON_OFF_CONFIG set correctly from old FW releases
i2cset -y 11 0x64 0x00 0x0E i
i2cset -y 11 0x64 0x02 0x16 i
i2cset -y 11 0x64 0x00 0x0F i
i2cset -y 11 0x64 0x02 0x16 i
## move memory enables to align with VDN (VDN to VDDR leakage issue)
#GPO_CONFIG_1 (GPIO15) : mem 0 reg enables
i2cset -y 11 0x64 0xF7 0x00 i
i2cset -y 11 0x64 0xF8 0x15 0x6E 0x80 0x08 0x00 0x00 0x00 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i
#GPO_CONFIG_2 (GPIO7) : mem 1 reg enables
i2cset -y 11 0x64 0xF7 0x01 i
i2cset -y 11 0x64 0xF8 0x15 0x16 0x80 0x08 0x00 0x00 0x20 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i
# change VDN delays based on UCD MFR_REVISION setting
REV=$(i2cget -y 11 0x64 0x9B i 2|cut -f2 -d' ')
if [ "$REV" = "0x01" ] || [ "$REV" = "0x02" ] ; then
# use 20ms delay for VDN
#TON_DELAY rail 8
i2cset -y 11 0x64 0x00 0x07 i
i2cset -y 11 0x64 0x60 0x80 0xDA i
#TON_DELAY rail 9
i2cset -y 11 0x64 0x00 0x08 i
i2cset -y 11 0x64 0x60 0x80 0xDA i
else
# use 70ms delay for VDN
#TON_DELAY rail 8
i2cset -y 11 0x64 0x00 0x07 i
i2cset -y 11 0x64 0x60 0x30 0xEA i
#TON_DELAY rail 9
i2cset -y 11 0x64 0x00 0x08 i
i2cset -y 11 0x64 0x60 0x30 0xEA i
fi
# Raise AVDD +100mV
i2cset -y 11 0x64 0x00 0x09 i # set PAGE
i2cset -y 11 0x64 0xF5 0x81 i # set margin_config
i2cset -y 11 0x64 0x21 0x85 0x33 i # set VOUT_COMMAND
# Increase over-current settings
#VDD A phase current
i2cset -y 4 0x12 0xFF 0x04 b # set window register high byte to 4
i2cset -y 4 0x12 0x3C 0x80 b # Set to 64A
#VDD B phase current
i2cset -y 5 0x12 0xFF 0x04 b # set window register high byte to 4
i2cset -y 5 0x12 0x3C 0x80 b # Set to 64A
#VDD A master OC fault to 445A
i2cset -y 4 0x70 0x00 0x00 b # PAGE
i2cset -y 4 0x70 0x46 0x08DE w
# VDD A master OC warn to 326A
i2cset -y 4 0x70 0x4A 0x08A3 w # A308
#VDD B master OC fault to 445A
i2cset -y 5 0x70 0x00 0x00 b # PAGE
i2cset -y 5 0x70 0x46 0x08DE w
# VDD B master OC warn to 326A
i2cset -y 5 0x70 0x4A 0x08A3 w
#VCS phase current to 30A C/C
i2cset -y 4 0x12 0xFF 0x08 b # set window register to 8
i2cset -y 4 0x12 0x3C 0x3C b # 30A
i2cset -y 5 0x12 0xFF 0x08 b # set window register to 8
i2cset -y 5 0x12 0x3C 0x3C b # 30A
#VCS master OC to 43A
i2cset -y 4 0x70 0x00 0x01 # PAGE 1
i2cset -y 4 0x70 0x46 0x0816 w # OC to 43A
i2cset -y 5 0x70 0x00 0x01 # PAGE 1
i2cset -y 5 0x70 0x46 0x0816 w # OC to 43A
# re-bind ucd driver only if we unbound it (i.e. ucd has been set with a value)
if [ -e $ucdpath ] && [ -n "$ucd" ]; then
j=0
until [ $j -ge $ucd_retries ] || [ -e "$ucdpath/$ucd" ]; do
j=$((j+1))
# shellcheck disable=2320
echo "$ucd" > $ucdpath/bind || ret=$?
if [ $j -gt 1 ]; then
echo "rebinding UCD driver. Retry number $j"
sleep 1
fi
done
if [ ! -e "$ucdpath/$ucd" ]; then exit "$ret"; fi
fi
@@ -0,0 +1,16 @@
[Unit]
Description=Perform power workarounds on VRMs
Wants=ir35221-on-unbind@%i.service
After=ir35221-on-unbind@%i.service
Before=avsbus-disable@%i.service
Before=obmc-power-on@%i.target
Conflicts=obmc-chassis-poweroff@%i.target
ConditionPathExists=!/run/openbmc/chassis@%i-on
[Service]
ExecStart=/usr/bin/power-workarounds.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1,39 @@
SUMMARY = "VRM Overrides"
DESCRIPTION = "Sets VRMs to custom voltages"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit allarch
inherit obmc-phosphor-systemd
RDEPENDS:${PN} += "i2c-tools bash"
S = "${WORKDIR}"
SRC_URI:append:ibm-ac-server = " file://ir35221-unbind-bind.sh"
SRC_URI:append:ibm-ac-server = " file://vrm-control.sh"
do_install:ibm-ac-server() {
install -d ${D}${bindir}
install -m 0755 ${WORKDIR}/ir35221-unbind-bind.sh ${D}${bindir}/ir35221-unbind-bind.sh
install -m 0755 ${WORKDIR}/vrm-control.sh ${D}${bindir}/vrm-control.sh
}
TMPL = "vrm-control@.service"
INSTFMT = "vrm-control@{0}.service"
TGTFMT_ON = "obmc-chassis-poweron@{0}.target"
FMT_ON = "../${TMPL}:${TGTFMT_ON}.requires/${INSTFMT}"
TMPL_ON_IRBIND = "ir35221-on-bind@.service"
INSTFMT_ON_IRBIND = "ir35221-on-bind@{0}.service"
FMT_ON_IRBIND = "../${TMPL_ON_IRBIND}:${TGTFMT_ON}.wants/${INSTFMT_ON_IRBIND}"
TMPL_ON_IRUNBIND = "ir35221-on-unbind@.service"
INSTFMT_ON_IRUNBIND = "ir35221-on-unbind@{0}.service"
FMT_ON_IRUNBIND = "../${TMPL_ON_IRUNBIND}:${TGTFMT_ON}.requires/${INSTFMT_ON_IRUNBIND}"
SYSTEMD_SERVICE:${PN}:append:ibm-ac-server = " ${TMPL_ON_IRUNBIND} ${TMPL_ON_IRBIND}"
SYSTEMD_SERVICE:${PN}:append:ibm-ac-server = " ${TMPL}"
SYSTEMD_LINK:${PN}:append:ibm-ac-server = " ${@compose_list(d, 'FMT_ON', 'OBMC_CHASSIS_INSTANCES')}"
SYSTEMD_LINK:${PN}:append:ibm-ac-server = " ${@compose_list(d, 'FMT_ON_IRBIND', 'OBMC_CHASSIS_INSTANCES')}"
SYSTEMD_LINK:${PN}:append:ibm-ac-server = " ${@compose_list(d, 'FMT_ON_IRUNBIND', 'OBMC_CHASSIS_INSTANCES')}"
@@ -0,0 +1,82 @@
#!/bin/bash
# #########################################################
# Script to run on witherspoon BMC to unbind/bind the ir35221
# driver's devices
status=0
max_retries=3
driver_path="/sys/bus/i2c/drivers/ir35221/"
platform_path="/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/"
unbind_driver () {
echo "$1" > $driver_path/unbind
}
bind_driver () {
device=$1
tries=0
until [ $tries -ge $max_retries ]; do
tries=$((tries+1))
ret=0
# shellcheck disable=SC2320
echo "$device" > $driver_path/bind || ret=$?
if [ $ret -ne 0 ]; then
echo "VRM $1 bind failed. Try $tries"
sleep 1
else
tries=$((max_retries+1))
fi
done
#Script will return a nonzero value if any binds fail.
if [ "$ret" -ne 0 ]; then
status=$ret
fi
}
if [ "$1" = "unbind" ]
then
if [ -e $driver_path/4-0070 ]
then
unbind_driver "4-0070"
fi
if [ -e $driver_path/4-0071 ]
then
unbind_driver "4-0071"
fi
if [ -e $driver_path/5-0070 ]
then
unbind_driver "5-0070"
fi
if [ -e $driver_path/5-0071 ]
then
unbind_driver "5-0071"
fi
elif [ "$1" = "bind" ]
then
if [ -e $platform_path/1e78a140.i2c-bus/i2c-4/4-0070 ]
then
bind_driver "4-0070"
fi
if [ -e $platform_path/1e78a140.i2c-bus/i2c-4/4-0071 ]
then
bind_driver "4-0071"
fi
if [ -e $platform_path/1e78a180.i2c-bus/i2c-5/5-0070 ]
then
bind_driver "5-0070"
fi
if [ -e $platform_path/1e78a180.i2c-bus/i2c-5/5-0071 ]
then
bind_driver "5-0071"
fi
fi
exit "$status"
@@ -0,0 +1,15 @@
[Unit]
Description=Power on bind ir35221 device driver devs
After=avsbus-enable@%i.service
Wants=obmc-host-start-pre@%i.target
Before=obmc-host-start-pre@%i.target
Conflicts=obmc-chassis-poweroff@%i.target
ConditionPathExists=!/run/openbmc/chassis@%i-on
[Service]
ExecStart=/usr/bin/ir35221-unbind-bind.sh bind
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1,14 @@
[Unit]
Description=power on mode unbind ir35221 device driver devs
Wants=obmc-power-start-pre@%i.target
Before=obmc-power-start-pre@%i.target
Conflicts=obmc-chassis-poweroff@%i.target
ConditionPathExists=!/run/openbmc/chassis@%i-on
[Service]
ExecStart=/usr/bin/ir35221-unbind-bind.sh unbind
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1,155 @@
#!/bin/bash
# #########################################################
# Script to run on witherspoon BMC to read/set vrm voltages
# #########################################################
function d2v() {
# usage: d2v <decimal volts>
echo "$1" | awk '{print $1 * 256 + .5}' | cut -d '.' -f 1
}
# #########################################################
function v2d() {
# usage: v2d <hex val>
printf " %0.3fV" "$(echo "$1" | awk '{print $1 / 256}')"
}
# #########################################################
function i2d() {
# usage: i2d <hex val> <current divisor>
# parse current mantisa and exponent
# format: SEEE ESMM MMMM MMMM
e=$(( $1/0x800 ))
esign=$(( e/0x10 ))
m=$(( $1 & 0x07FF ))
msign=$(( m/0x0400 ))
if [ $msign -eq 1 ]
then
# calc ones compliment
m=$(( (m^0x07FF)+1 ))
m=$(( -m ))
fi
if [ $esign -eq 1 ]
then
# calc ones compliment
e=$(( (e^0x1F)+1 ))
e=$(( -e ))
fi
printf " %0.3fA\n" "$(echo $m $e "$2" | awk '{print ($1 * 2^$2)}')"
}
# #########################################################
function rw_vc() {
# usage: rw_vc <bus> <addr> <current divisor> <channel> <value>
# select channel
if [ "$4" != "x" ]
then
i2cset -y "$1" "$2" 0 "$4" b
fi
# write new voltage set point
if [ ! -e "$5" ]
then
i2cset -y "$1" "$2" 0x21 "$(d2v "$5")" w
fi
# print voltage set point
v2d "$(i2cget -y "$1" "$2" 0x21 w)"
# print voltage
v2d "$(i2cget -y "$1" "$2" 0x8B w)"
# print current
i2d "$(i2cget -y "$1" "$2" 0x8C w)" "$3"
# default back to channel 0
if [ "$4" != "x" ]
then
i2cset -y "$1" "$2" 0 0 b
fi
}
# #########################################################
# Main
if [ -e "$1" ]
then
$0 vdda vcsa vdna vioa vddra vppa vddb vcsb vdnb viob vddrb vppb
exit
fi
if [ "$1" == "-h" ]
then
echo " Usage: vrm [<rail>=[value] [<rail>=[value]] ...]"
echo " rail: vdda vcsa vdna vioa vddra vppa vddb vcsb vdnb viob vddrb vppb vdnd viod"
echo " value: volts"
echo
echo " e.g., vrm vioa=1.0 viob=1.0"
echo
exit
fi
echo "rail set read current"
echo "------- ------- ------- -------"
for param in "${@:1}"
do
rail=$(echo "$param" | cut -d'=' -f 1)
val=$(echo "${param}=" | cut -d'=' -f 2)
echo -n "$rail"
case "$rail" in
vdda)
rw_vc 4 0x70 2 0 "$val"
;;
vddb)
rw_vc 5 0x70 2 0 "$val"
;;
vcsa)
rw_vc 4 0x70 4 1 "$val"
;;
vcsb)
rw_vc 5 0x70 4 1 "$val"
;;
vdna)
rw_vc 4 0x71 2 0 "$val"
;;
vdnb)
rw_vc 5 0x71 2 0 "$val"
;;
vioa)
rw_vc 4 0x40 2 x "$val"
;;
viob)
rw_vc 5 0x40 2 x "$val"
;;
vddra)
rw_vc 4 0x71 2 1 "$val"
;;
vddrb)
rw_vc 5 0x71 2 1 "$val"
;;
vppa)
rw_vc 12 0x41 2 x "$val"
;;
vppb)
rw_vc 13 0x41 2 x "$val"
;;
vdnd)
rw_vc 2 0x70 2 0 "$val"
;;
viod)
rw_vc 2 0x70 2 1 "$val"
;;
*)
echo " non-existant"
esac
done
@@ -0,0 +1,15 @@
[Unit]
Description=Apply voltage overrides to VRMs
Wants=avsbus-disable@%i.service
After=avsbus-disable@%i.service
Before=avsbus-enable@%i.service
Conflicts=obmc-chassis-poweroff@%i.target
ConditionPathExists=!/run/openbmc/chassis@%i-on
[Service]
ExecStart=/usr/bin/vrm-control.sh vdna=0.9 vdnb=0.9
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1,82 @@
SUMMARY = "YAML configuration for ACx22 systems"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit allarch
inherit mrw-xml
SRC_URI:ibm-ac-server = " \
file://acx22-ipmi-fru-bmc.yaml \
file://acx22-ipmi-fru-not-sent-by-host.yaml \
file://acx22-ipmi-hwmon-sensors.yaml \
file://acx22-ipmi-inventory-sensors.yaml \
file://acx22-ipmi-occ-sensors.yaml \
file://acx22-ipmi-sensors-mrw.yaml \
"
DEPENDS = " \
mrw-native \
mrw-perl-tools-native \
openpower-yaml-config \
"
S = "${WORKDIR}"
ACx22_IPMI_EXTRA_FRU_READ_YAMLS:ibm-ac-server = " \
acx22-ipmi-fru-bmc.yaml \
acx22-ipmi-fru-not-sent-by-host.yaml \
"
ACx22_IPMI_EXTRA_SENSOR_YAMLS = " \
acx22-ipmi-hwmon-sensors.yaml \
acx22-ipmi-occ-sensors.yaml \
"
do_install() {
perlbin="${STAGING_DIR_NATIVE}${bindir}/perl-native/perl"
scriptpath=${STAGING_DIR_NATIVE}${bindir}
mrw=${STAGING_DIR_NATIVE}${datadir}/obmc-mrw/${MRW_XML}
op_configpath=${STAGING_DIR_HOST}${datadir}/openpower-yaml-config
# generate extra-properties.yaml from the MRW for ipmi-fru-parser
$perlbin $scriptpath/gen_fru_properties.pl -m $mrw \
-c $op_configpath/ipmi-fru-properties-mrw.yaml \
-o extra-properties.yaml ${EXTRA_MRW_SCRIPT_ARGS}
# generate fru-read.yaml from the MRW, for ipmid and ipmi-fru-parser
$perlbin $scriptpath/gen_ipmi_fru.pl -i $mrw \
-m $op_configpath/ipmi-hostboot-fru-mrw.yaml \
-o fru-read-partial.yaml ${EXTRA_MRW_SCRIPT_ARGS}
cat fru-read-partial.yaml ${ACx22_IPMI_EXTRA_FRU_READ_YAMLS} \
> fru-read.yaml
# generate inventory-sensors.yaml from the MRW, for ipmid
$perlbin $scriptpath/gen_ipmi_sel.pl -i $mrw \
-m acx22-ipmi-inventory-sensors.yaml -o inventory-sensors.yaml \
${EXTRA_MRW_SCRIPT_ARGS}
# generate sensors.yaml from the MRW, for ipmid
cat acx22-ipmi-sensors-mrw.yaml \
$op_configpath/ipmi-hostboot-volatile-sensor-mrw.yaml \
$op_configpath/ipmi-occ-active-sensor-mrw.yaml \
> sensors-mrw.yaml
$perlbin $scriptpath/gen_ipmi_sensor.pl -i $mrw -m sensors-mrw.yaml \
-o sensors-partial.yaml ${EXTRA_MRW_SCRIPT_ARGS}
cat sensors-partial.yaml ${ACx22_IPMI_EXTRA_SENSOR_YAMLS} \
> sensors.yaml
install -m 0644 -D extra-properties.yaml \
${D}${datadir}/${BPN}/ipmi-extra-properties.yaml
install -m 0644 -D fru-read.yaml ${D}${datadir}/${BPN}/ipmi-fru-read.yaml
install -m 0644 -D inventory-sensors.yaml \
${D}${datadir}/${BPN}/ipmi-inventory-sensors.yaml
install -m 0644 -D sensors.yaml ${D}${datadir}/${BPN}/ipmi-sensors.yaml
}
FILES:${PN}-dev = " \
${datadir}/${BPN}/ipmi-extra-properties.yaml \
${datadir}/${BPN}/ipmi-fru-read.yaml \
${datadir}/${BPN}/ipmi-inventory-sensors.yaml \
${datadir}/${BPN}/ipmi-sensors.yaml \
"
ALLOW_EMPTY:${PN} = "1"
@@ -0,0 +1,18 @@
1:
Offset: 2
SensorType: 18
3:
Offset: 8
SensorType: 7
7:
Offset: 0
SensorType: 199
32:
Offset: 4
SensorType: 12
208:
Offset: 8
SensorType: 7
216:
Offset: 8
SensorType: 23
@@ -0,0 +1,44 @@
8:
entityID: 210
entityInstance: 1
interfaces:
org.open_power.OCC.Status:
OccActive:
Offsets:
0:
assert: false
deassert: true
type: bool
1:
assert: true
deassert: false
type: bool
mutability: Mutability::Write|Mutability::Read
path: /org/open_power/control/occ0
readingType: assertion
sensorNamePattern: nameLeaf
sensorReadingType: 9
sensorType: 9
serviceInterface: org.freedesktop.DBus.Properties
9:
entityID: 210
entityInstance: 2
interfaces:
org.open_power.OCC.Status:
OccActive:
Offsets:
0:
assert: false
deassert: true
type: bool
1:
assert: true
deassert: false
type: bool
mutability: Mutability::Write|Mutability::Read
path: /org/open_power/control/occ1
readingType: assertion
sensorNamePattern: nameLeaf
sensorReadingType: 9
sensorType: 9
serviceInterface: org.freedesktop.DBus.Properties
@@ -0,0 +1,351 @@
boot_count_sensor:
interfaces:
xyz.openbmc_project.Control.Boot.RebootAttempts:
AttemptsLeft:
Offsets:
255:
type: uint32_t
mutability: Mutability::Write|Mutability::Read
path: /xyz/openbmc_project/state/host0
readingType: readingAssertion
sensorNamePattern: nameProperty
serviceInterface: org.freedesktop.DBus.Properties
cpu_func_sensor:
interfaces:
xyz.openbmc_project.Inventory.Item:
Present:
Offsets:
7:
assert: true
deassert: false
type: bool
xyz.openbmc_project.State.Decorator.OperationalStatus:
Functional:
Offsets:
8:
assert: false
deassert: true
type: bool
Prereqs:
7:
assert: true
deassert: false
type: bool
mutability: Mutability::Write|Mutability::Read
readingType: assertion
sensorNamePattern: nameLeaf
serviceInterface: xyz.openbmc_project.Inventory.Manager
cpucore_func_sensor:
interfaces:
xyz.openbmc_project.Inventory.Item:
Present:
Offsets:
7:
assert: true
deassert: false
skipOn: deassert
type: bool
xyz.openbmc_project.State.Decorator.OperationalStatus:
Functional:
Offsets:
8:
assert: false
deassert: true
type: bool
Prereqs:
7:
assert: true
deassert: false
type: bool
mutability: Mutability::Write|Mutability::Read
readingType: assertion
sensorNamePattern: nameParentLeaf
serviceInterface: xyz.openbmc_project.Inventory.Manager
cpucore_temp_sensor:
bExp: 0
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
mutability: Mutability::Write|Mutability::Read
offsetB: -127
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
dimm_func_sensor:
interfaces:
xyz.openbmc_project.Inventory.Item:
Present:
Offsets:
6:
assert: true
deassert: false
type: bool
xyz.openbmc_project.State.Decorator.OperationalStatus:
Functional:
Offsets:
4:
assert: false
deassert: true
type: bool
Prereqs:
6:
assert: true
deassert: false
type: bool
mutability: Mutability::Write|Mutability::Read
readingType: assertion
sensorNamePattern: nameLeaf
serviceInterface: xyz.openbmc_project.Inventory.Manager
dimm_temp_sensor:
bExp: 0
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
mutability: Mutability::Write|Mutability::Read
offsetB: -127
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
fw_boot_sensor:
interfaces:
xyz.openbmc_project.State.Boot.Progress:
BootProgress:
Offsets:
0:
set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.Unspecified
type: string
1:
set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.MemoryInit
type: string
3:
set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.SecondaryProcInit
type: string
7:
set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.PCIInit
type: string
19:
set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.OSStart
type: string
20:
set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.MotherboardInit
type: string
mutability: Mutability::Write|Mutability::Read
path: /xyz/openbmc_project/state/host0
readingType: eventdata2
sensorNamePattern: nameProperty
serviceInterface: org.freedesktop.DBus.Properties
gpu_func_sensor:
interfaces:
xyz.openbmc_project.Inventory.Item.Accelerator:
xyz.openbmc_project.Inventory.Decorator.Replaceable:
FieldReplaceable:
Offsets:
7:
assert: true
deassert: true
type: bool
xyz.openbmc_project.Inventory.Item:
Present:
Offsets:
7:
assert: true
deassert: false
type: bool
xyz.openbmc_project.State.Decorator.OperationalStatus:
Functional:
Offsets:
8:
assert: false
deassert: true
type: bool
Prereqs:
7:
assert: true
deassert: false
type: bool
mutability: Mutability::Write|Mutability::Read
readingType: assertion
sensorNamePattern: nameLeaf
serviceInterface: xyz.openbmc_project.Inventory.Manager
gpu_temp_sensor:
bExp: 0
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
mutability: Mutability::Write|Mutability::Read
offsetB: -127
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
host_auto_reboot_control_sensor:
interfaces:
xyz.openbmc_project.Control.Boot.RebootPolicy:
AutoReboot:
Offsets:
0:
assert: false
type: bool
1:
assert: true
type: bool
mutability: Mutability::Write|Mutability::Read
path: /xyz/openbmc_project/control/host0/auto_reboot
readingType: assertion
sensorNamePattern: nameLeaf
serviceInterface: org.freedesktop.DBus.Properties
memory_temp_sensor:
bExp: 0
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
mutability: Mutability::Write|Mutability::Read
offsetB: -127
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
os_boot_sensor:
interfaces:
xyz.openbmc_project.State.OperatingSystem.Status:
OperatingSystemState:
Offsets:
1:
assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.CBoot
type: string
2:
assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.PXEBoot
type: string
3:
assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.DiagBoot
type: string
4:
assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.CDROMBoot
type: string
5:
assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.ROMBoot
type: string
6:
assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.BootComplete
type: string
mutability: Mutability::Write|Mutability::Read
path: /xyz/openbmc_project/state/host0
readingType: assertion
sensorNamePattern: nameProperty
serviceInterface: org.freedesktop.DBus.Properties
ps_derating_sensor:
interfaces:
xyz.openbmc_project.Control.PowerSupplyAttributes:
DeratingFactor:
Offsets:
255:
type: uint32_t
mutability: Mutability::Read
readingType: assertion
sensorNamePattern: nameProperty
serviceInterface: org.freedesktop.DBus.Properties
ps_redundancy_state_sensor:
interfaces:
xyz.openbmc_project.Control.PowerSupplyRedundancy:
PowerSupplyRedundancyEnabled:
Offsets:
0:
assert: false
type: bool
1:
assert: true
type: bool
mutability: Mutability::Read
path: /xyz/openbmc_project/control/power_supply_redundancy
readingType: assertion
sensorNamePattern: nameProperty
serviceInterface: org.freedesktop.DBus.Properties
tpm_required_sensor:
interfaces:
xyz.openbmc_project.Control.TPM.Policy:
TPMEnable:
Offsets:
0:
assert: false
type: bool
1:
assert: true
type: bool
mutability: Mutability::Write|Mutability::Read
path: /xyz/openbmc_project/control/host0/TPMEnable
readingType: assertion
sensorNamePattern: nameLeaf
serviceInterface: org.freedesktop.DBus.Properties
turbo_allowed_sensor:
interfaces:
xyz.openbmc_project.Control.Host.TurboAllowed:
TurboAllowed:
Offsets:
0:
assert: false
deassert: true
type: bool
1:
assert: true
deassert: false
type: bool
mutability: Mutability::Read
path: /xyz/openbmc_project/control/host0/turbo_allowed
readingType: assertion
sensorNamePattern: nameLeaf
serviceInterface: org.freedesktop.DBus.Properties
vrm_vdd_temp_sensor:
bExp: 0
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
mutability: Mutability::Write|Mutability::Read
offsetB: -127
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
clear_host_security_keys:
interfaces:
org.open_power.Control.TPM.SecurityKeys:
ClearHostSecurityKeys:
Offsets:
255:
type: uint8_t
path: /org/open_power/control/host0/ClearHostSecurityKeys
readingType: readingData
mutability: Mutability::Write|Mutability::Read
sensorNamePattern: nameLeaf
serviceInterface: org.freedesktop.DBus.Properties
@@ -0,0 +1,120 @@
60:
/system/chassis/motherboard/fan0:
entityID: 29
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
61:
/system/chassis/motherboard/fan1:
entityID: 29
entityInstance: 2
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
62:
/system/chassis/motherboard/fan2:
entityID: 29
entityInstance: 3
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
63:
/system/chassis/motherboard/fan3:
entityID: 29
entityInstance: 4
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
70:
/system/chassis/motherboard/management_card/bmc:
entityID: 6
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Decorator.Asset:
PartNumber:
IPMIFruProperty: Part Number
IPMIFruSection: Board
SerialNumber:
IPMIFruProperty: Serial Number
IPMIFruSection: Board
Model:
IPMIFruProperty: Model Number
IPMIFruSection: Board
Manufacturer:
IPMIFruProperty: Manufacturer
IPMIFruSection: Board
BuildDate:
IPMIFruProperty: Mfg Date
IPMIFruSection: Board
80:
/system/chassis/motherboard/management_card/bmc/ethernet:
entityID: 1
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
85:
/system/chassis/motherboard/powersupply0:
entityID: 10
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Decorator.Asset:
PartNumber:
IPMIFruProperty: Part Number
IPMIFruSection: Board
SerialNumber:
IPMIFruProperty: Serial Number
IPMIFruSection: Board
Model:
IPMIFruProperty: Model Number
IPMIFruSection: Board
Manufacturer:
IPMIFruProperty: Manufacturer
IPMIFruSection: Board
BuildDate:
IPMIFruProperty: Mfg Date
IPMIFruSection: Board
86:
/system/chassis/motherboard/powersupply1:
entityID: 10
entityInstance: 2
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Decorator.Asset:
PartNumber:
IPMIFruProperty: Part Number
IPMIFruSection: Board
SerialNumber:
IPMIFruProperty: Serial Number
IPMIFruSection: Board
Model:
IPMIFruProperty: Model Number
IPMIFruSection: Board
Manufacturer:
IPMIFruProperty: Manufacturer
IPMIFruSection: Board
BuildDate:
IPMIFruProperty: Mfg Date
IPMIFruSection: Board
@@ -0,0 +1,21 @@
15:
/system/chassis/motherboard/ga100card0: &DEFAULTS
entityInstance: 1
entityID: 3
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
16:
/system/chassis/motherboard/ga100card1:
<<: *DEFAULTS
entityInstance: 2
17:
/system/chassis/motherboard/ga100card2:
<<: *DEFAULTS
entityInstance: 3
18:
/system/chassis/motherboard/ga100card3:
<<: *DEFAULTS
entityInstance: 4
@@ -0,0 +1,484 @@
232:
bExp: 0
entityID: 29
entityInstance: 1
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan0_0
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
233:
bExp: 0
entityID: 29
entityInstance: 3
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan1_0
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
234:
bExp: 0
entityID: 29
entityInstance: 5
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan2_0
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
235:
bExp: 0
entityID: 29
entityInstance: 7
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan3_0
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
236:
bExp: 0
entityID: 10
entityInstance: 1
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/fan_disk_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
237:
bExp: 0
entityID: 10
entityInstance: 9
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p0_io_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
238:
bExp: 0
entityID: 10
entityInstance: 10
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p1_io_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
239:
bExp: 0
entityID: 10
entityInstance: 11
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p0_mem_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
240:
bExp: 0
entityID: 10
entityInstance: 12
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p1_mem_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
241:
bExp: 0
entityID: 10
entityInstance: 13
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p0_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
242:
bExp: 0
entityID: 10
entityInstance: 14
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p1_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
243:
bExp: 0
entityID: 10
entityInstance: 15
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 10
offsetB: 0
path: /xyz/openbmc_project/sensors/power/ps0_input_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
244:
bExp: 0
entityID: 10
entityInstance: 16
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 10
offsetB: 0
path: /xyz/openbmc_project/sensors/power/ps1_input_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
245:
bExp: 0
entityID: 10
entityInstance: 17
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 20
offsetB: 0
path: /xyz/openbmc_project/sensors/power/total_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
246:
bExp: 0
entityID: 10
entityInstance: 19
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/voltage/ps0_input_voltage
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 2
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Volts
247:
bExp: 0
entityID: 10
entityInstance: 20
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/voltage/ps1_input_voltage
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 2
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Volts
248:
bExp: 0
entityID: 10
entityInstance: 21
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 10
offsetB: 0
path: /xyz/openbmc_project/sensors/voltage/ps0_output_voltage
rExp: -2
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 2
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Volts
249:
bExp: 0
entityID: 10
entityInstance: 22
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 10
offsetB: 0
path: /xyz/openbmc_project/sensors/voltage/ps1_output_voltage
rExp: -2
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 2
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Volts
250:
bExp: 0
entityID: 10
entityInstance: 23
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
offsetB: 0
path: /xyz/openbmc_project/sensors/current/ps0_output_current
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 3
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Amperes
251:
bExp: 0
entityID: 10
entityInstance: 24
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
offsetB: 0
path: /xyz/openbmc_project/sensors/current/ps1_output_current
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 3
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Amperes
252:
bExp: 0
entityID: 35
entityInstance: 1
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 30
offsetB: 0
path: /xyz/openbmc_project/sensors/temperature/pcie0_1
rExp: -2
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 1
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
253:
bExp: 0
entityID: 35
entityInstance: 2
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 30
offsetB: 0
path: /xyz/openbmc_project/sensors/temperature/pcie2_3
rExp: -2
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 1
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
254:
bExp: 0
entityID: 64
entityInstance: 1
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 20
offsetB: 0
path: /xyz/openbmc_project/sensors/temperature/ambient0
rExp: -2
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 1
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
@@ -0,0 +1,120 @@
50:
/system/chassis/motherboard/fan0:
entityID: 29
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
51:
/system/chassis/motherboard/fan1:
entityID: 29
entityInstance: 2
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
52:
/system/chassis/motherboard/fan2:
entityID: 29
entityInstance: 3
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
53:
/system/chassis/motherboard/fan3:
entityID: 29
entityInstance: 4
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
60:
/system/chassis/motherboard/boxelder/bmc:
entityID: 6
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Decorator.Asset:
BuildDate:
IPMIFruProperty: Mfg Date
IPMIFruSection: Board
Manufacturer:
IPMIFruProperty: Manufacturer
IPMIFruSection: Board
Model:
IPMIFruProperty: Model Number
IPMIFruSection: Board
PartNumber:
IPMIFruProperty: Part Number
IPMIFruSection: Board
SerialNumber:
IPMIFruProperty: Serial Number
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
70:
/system/chassis/motherboard/boxelder/bmc/ethernet:
entityID: 1
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Product Name
IPMIFruSection: Product
75:
/system/chassis/motherboard/powersupply0:
entityID: 10
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Decorator.Asset:
BuildDate:
IPMIFruProperty: Mfg Date
IPMIFruSection: Board
Manufacturer:
IPMIFruProperty: Manufacturer
IPMIFruSection: Board
Model:
IPMIFruProperty: Model Number
IPMIFruSection: Board
PartNumber:
IPMIFruProperty: Part Number
IPMIFruSection: Board
SerialNumber:
IPMIFruProperty: Serial Number
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
76:
/system/chassis/motherboard/powersupply1:
entityID: 10
entityInstance: 2
interfaces:
xyz.openbmc_project.Inventory.Decorator.Asset:
BuildDate:
IPMIFruProperty: Mfg Date
IPMIFruSection: Board
Manufacturer:
IPMIFruProperty: Manufacturer
IPMIFruSection: Board
Model:
IPMIFruProperty: Model Number
IPMIFruSection: Board
PartNumber:
IPMIFruProperty: Part Number
IPMIFruSection: Board
SerialNumber:
IPMIFruProperty: Serial Number
IPMIFruSection: Board
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
@@ -0,0 +1,54 @@
20:
/system/chassis/motherboard/gv100card0:
entityID: 3
entityInstance: 1
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
21:
/system/chassis/motherboard/gv100card1:
entityID: 3
entityInstance: 2
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
22:
/system/chassis/motherboard/gv100card2:
entityID: 3
entityInstance: 3
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
23:
/system/chassis/motherboard/gv100card3:
entityID: 3
entityInstance: 4
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
24:
/system/chassis/motherboard/gv100card4:
entityID: 3
entityInstance: 5
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
25:
/system/chassis/motherboard/gv100card5:
entityID: 3
entityInstance: 6
interfaces:
xyz.openbmc_project.Inventory.Item:
PrettyName:
IPMIFruProperty: Board Name
IPMIFruSection: Board
@@ -0,0 +1,546 @@
221:
bExp: 0
entityID: 29
entityInstance: 1
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan0_0
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
223:
bExp: 0
entityID: 29
entityInstance: 3
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan1_0
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
227:
bExp: 0
entityID: 29
entityInstance: 5
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan2_0
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
229:
bExp: 0
entityID: 29
entityInstance: 7
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan3_0
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
231:
bExp: 0
entityID: 10
entityInstance: 1
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/fan_disk_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
238:
bExp: 0
entityID: 10
entityInstance: 9
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p0_io_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
239:
bExp: 0
entityID: 10
entityInstance: 10
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p1_io_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
240:
bExp: 0
entityID: 10
entityInstance: 11
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p0_mem_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
241:
bExp: 0
entityID: 10
entityInstance: 12
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p1_mem_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
242:
bExp: 0
entityID: 10
entityInstance: 13
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p0_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
243:
bExp: 0
entityID: 10
entityInstance: 14
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/power/p1_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
244:
bExp: 0
entityID: 10
entityInstance: 15
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 10
offsetB: 0
path: /xyz/openbmc_project/sensors/power/ps0_input_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
245:
bExp: 0
entityID: 10
entityInstance: 16
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 10
offsetB: 0
path: /xyz/openbmc_project/sensors/power/ps1_input_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
246:
bExp: 0
entityID: 10
entityInstance: 17
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 20
offsetB: 0
path: /xyz/openbmc_project/sensors/power/total_power
rExp: 0
readingType: readingData
scale: -6
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 8
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
247:
bExp: 0
entityID: 10
entityInstance: 19
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/voltage/ps0_input_voltage
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 2
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Volts
248:
bExp: 0
entityID: 10
entityInstance: 20
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 2
offsetB: 0
path: /xyz/openbmc_project/sensors/voltage/ps1_input_voltage
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 2
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Volts
249:
bExp: 0
entityID: 10
entityInstance: 21
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 10
offsetB: 0
path: /xyz/openbmc_project/sensors/voltage/ps0_output_voltage
rExp: -2
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 2
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Volts
250:
bExp: 0
entityID: 10
entityInstance: 22
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 10
offsetB: 0
path: /xyz/openbmc_project/sensors/voltage/ps1_output_voltage
rExp: -2
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 2
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Volts
251:
bExp: 0
entityID: 10
entityInstance: 23
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
offsetB: 0
path: /xyz/openbmc_project/sensors/current/ps0_output_current
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 3
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Amperes
252:
bExp: 0
entityID: 10
entityInstance: 24
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 1
offsetB: 0
path: /xyz/openbmc_project/sensors/current/ps1_output_current
rExp: 0
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 3
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.Amperes
253:
bExp: 0
entityID: 35
entityInstance: 1
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 30
offsetB: 0
path: /xyz/openbmc_project/sensors/temperature/pcie
rExp: -2
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 1
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
254:
bExp: 0
entityID: 64
entityInstance: 1
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 20
offsetB: 0
path: /xyz/openbmc_project/sensors/temperature/ambient
rExp: -2
readingType: readingData
scale: -3
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 1
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
222:
bExp: 0
entityID: 29
entityInstance: 2
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan0_1
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
226:
bExp: 0
entityID: 29
entityInstance: 4
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan1_1
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
228:
bExp: 0
entityID: 29
entityInstance: 6
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan2_1
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
230:
bExp: 0
entityID: 29
entityInstance: 8
interfaces:
xyz.openbmc_project.Sensor.Value:
Value:
Offsets:
255:
type: double
multiplierM: 100
offsetB: 0
path: /xyz/openbmc_project/sensors/fan_tach/fan3_1
rExp: 0
readingType: readingData
scale: 0
sensorNamePattern: nameLeaf
sensorReadingType: 1
sensorType: 4
serviceInterface: org.freedesktop.DBus.Properties
unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
@@ -0,0 +1,23 @@
SUMMARY = "YAML configuration for p10bmc"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit allarch
SRC_URI = " \
file://p10bmc-ipmi-fru.yaml \
"
S = "${WORKDIR}"
do_install() {
install -m 0644 -D p10bmc-ipmi-fru.yaml \
${D}${datadir}/${BPN}/ipmi-fru-read.yaml
}
FILES:${PN}-dev = " \
${datadir}/${BPN}/ipmi-fru-read.yaml \
"
ALLOW_EMPTY:${PN} = "1"
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,5 @@
lpc-address = 0x3f8
sirq = 4
local-tty = ttyS0
local-tty-baud = 115200
logsize = 256k
@@ -0,0 +1 @@
console-id = hypervisor
@@ -0,0 +1,5 @@
lpc-address = 0x3f8
sirq = 4
local-tty = ttyS0
local-tty-baud = 115200
logsize = 256k
@@ -0,0 +1,5 @@
lpc-address = 0x2f8
sirq = 3
console-id = hypervisor
logsize = 256k
logfile = /var/log/obmc-console1.log
@@ -0,0 +1 @@
console-id = hypervisor
@@ -0,0 +1,3 @@
lpc-address = 0x3f8
sirq = 4
logsize = 256k
@@ -0,0 +1,3 @@
lpc-address = 0x2f8
sirq = 3
console-id = hypervisor
@@ -0,0 +1,64 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI:remove:df-openpower = "file://${BPN}.conf"
SRC_URI:append:df-openpower = " file://server.ttyVUART0.conf"
install_concurrent_console_config() {
# Install configuration for the servers and clients. Keep commandline
# compatibility with previous configurations by defaulting to not
# specifying a console-id for VUART0/2200
install -m 0755 -d ${D}${sysconfdir}/${BPN}
# Remove the default client configuration as we don't to define a
# console-id for the 2200 console
rm -f ${D}${sysconfdir}/${BPN}/client.2200.conf
# However, now link to /dev/null as a way of not specifying a
# console-id while having a configuration file present. We need to
# provide a configuration path to meet the requirements of the packaged
# unit file.
ln -sr ${D}/dev/null ${D}${sysconfdir}/${BPN}/client.2200.conf
# We need to populate console-id for remaining consoles
install -m 0644 ${WORKDIR}/client.2201.conf ${D}${sysconfdir}/${BPN}/
# Install configuration for remaining servers - the base recipe
# installs the configuration for the first.
install -m 0644 ${WORKDIR}/server.ttyVUART1.conf ${D}${sysconfdir}/${BPN}/
}
SRC_URI:append:p10bmc = " file://client.2201.conf"
SRC_URI:append:p10bmc = " file://server.ttyVUART1.conf"
REGISTERED_SERVICES:${PN}:append:p10bmc = " obmc_console_hypervisor:tcp:2201:"
SYSTEMD_SERVICE:${PN}:append:p10bmc = " obmc-console-ssh@2200.service \
obmc-console-ssh@2201.service \
"
SYSTEMD_SERVICE:${PN}:remove:p10bmc = "obmc-console-ssh.socket"
FILES:${PN}:remove:p10bmc = "${systemd_system_unitdir}/obmc-console-ssh@.service.d/use-socket.conf"
PACKAGECONFIG:append:p10bmc = " concurrent-servers"
do_install:append:p10bmc() {
install_concurrent_console_config
}
SRC_URI:append:witherspoon-tacoma = " file://client.2201.conf"
SRC_URI:append:witherspoon-tacoma = " file://server.ttyVUART1.conf"
REGISTERED_SERVICES:${PN}:append:witherspoon-tacoma = " obmc_console_hypervisor:tcp:2201:"
SYSTEMD_SERVICE:${PN}:append:witherspoon-tacoma = " obmc-console-ssh@2200.service \
obmc-console-ssh@2201.service \
"
SYSTEMD_SERVICE:${PN}:remove:witherspoon-tacoma = "obmc-console-ssh.socket"
FILES:${PN}:remove:witherspoon-tacoma = "${systemd_system_unitdir}/obmc-console-ssh@.service.d/use-socket.conf"
EXTRA_OECONF:append:witherspoon-tacoma = " --enable-concurrent-servers"
do_install:append:witherspoon-tacoma() {
install_concurrent_console_config
}
@@ -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
@@ -0,0 +1,2 @@
DEBUG_TRIGGER_OPTIONS=--sink-actions=dbus
DEBUG_TRIGGER_SINK=
@@ -0,0 +1,9 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI:append:p10bmc = " file://debug-trigger.default"
do_install:append:p10bmc() {
# Install the defaults file
mkdir -p ${D}${sysconfdir}/default
install -m 0644 -T ${WORKDIR}/debug-trigger.default ${D}${sysconfdir}/default/debug-trigger
}
@@ -0,0 +1,38 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
PACKAGECONFIG:append:p10bmc = " host-dump-transport-pldm"
PACKAGECONFIG:append:witherspoon-tacoma = " host-dump-transport-pldm"
PACKAGECONFIG:append:p10bmc = " openpower-dumps-extension"
PACKAGECONFIG:append:witherspoon-tacoma = " openpower-dumps-extension"
SYSTEMD_SERVICE:${PN}-manager:p10bmc += "clear_hostdumps_poweroff.service"
SYSTEMD_SERVICE:${PN}-manager:witherspoon-tacoma += "clear_hostdumps_poweroff.service"
EXTRA_OEMESON:append:p10bmc = " -DBMC_DUMP_TOTAL_SIZE=409600"
EXTRA_OEMESON:append:p10bmc = " -DBMC_DUMP_MAX_SIZE=20480"
install_ibm_plugins() {
install ${S}/tools/dreport.d/ibm.d/plugins.d/* ${D}${dreport_plugin_dir}/
}
#Link in the plugins so dreport run them at the appropriate time
python link_ibm_plugins() {
source = d.getVar('S', True)
source_path = os.path.join(source, "tools", "dreport.d", "ibm.d", "plugins.d")
op_plugins = os.listdir(source_path)
for op_plugin in op_plugins:
op_plugin_name = os.path.join(source_path, op_plugin)
install_dreport_user_script(op_plugin_name, d)
}
#Install dump header script from dreport/ibm.d to dreport/include.d
install_dreport_header() {
install -d ${D}${dreport_include_dir}
install -m 0755 ${S}/tools/dreport.d/ibm.d/gendumpheader ${D}${dreport_include_dir}/
}
IBM_INSTALL_POSTFUNCS = "install_ibm_plugins link_ibm_plugins"
IBM_INSTALL_POSTFUNCS:append:p10bmc = " install_dreport_header"
do_install[postfuncs] += "${IBM_INSTALL_POSTFUNCS}"
@@ -0,0 +1,23 @@
SUMMARY = "Fan watchdog services"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit obmc-phosphor-systemd
RDEPENDS:${PN} += "phosphor-gpio-monitor-monitor"
RDEPENDS:${PN} += "busybox"
RESET_SERVICE = "reset-fan-watchdog.service"
TGTFMT = "obmc-chassis-poweron@0.target"
RESET_FMT = "../${RESET_SERVICE}:${TGTFMT}.wants/${RESET_SERVICE}"
MONITOR_SERVICE = "fan-watchdog-monitor@.service"
WATCHDOG_SERVICE = "fan-watchdog.service"
WATCHDOG_FMT = "../${WATCHDOG_SERVICE}:${TGTFMT}.wants/${WATCHDOG_SERVICE}"
SYSTEMD_SERVICE:${PN} += "${RESET_SERVICE} ${MONITOR_SERVICE} ${WATCHDOG_SERVICE}"
SYSTEMD_LINK:${PN} += "${RESET_FMT} ${WATCHDOG_FMT}"
SYSTEMD_ENVIRONMENT_FILE:${PN}:append:df-openpower = " obmc/fan-watchdog/reset-fan-watchdog.conf"
SYSTEMD_ENVIRONMENT_FILE:${PN}:append:df-openpower = " obmc/fan-watchdog/fan-watchdog.conf"
@@ -0,0 +1,9 @@
[Unit]
Description=Fan Watchdog Failure Monitor
#This can get called every time a process dies, so ensure it's never limited
StartLimitIntervalSec=0
[Service]
Type=oneshot
ExecStart=/usr/bin/phosphor-unit-failure-monitor --source %i --target obmc-fan-watchdog-takeover.target --action start
@@ -0,0 +1,14 @@
[Unit]
Description=Fan Watchdog Daemon
Wants=phosphor-fan-monitor-init@0.service
Before=phosphor-fan-monitor-init@0.service
Conflicts=obmc-fan-watchdog-takeover.target
[Service]
EnvironmentFile={envfiledir}/obmc/fan-watchdog/fan-watchdog.conf
ExecStartPre=/bin/sh -c "echo V > ${{DEVICE}}"
ExecStart=/sbin/watchdog -T ${{TIMEOUT}} -t ${{INTERVAL}} -F ${{DEVICE}}
KillSignal=SIGKILL
[Install]
#RequiredBy=obmc-chassis-poweron@0.target
@@ -0,0 +1,3 @@
TIMEOUT=5
INTERVAL=1
DEVICE=/dev/watchdog0
@@ -0,0 +1,3 @@
GPIO_PATH=/dev/gpiochip0
GPIO=114
DELAY=1
@@ -0,0 +1,12 @@
[Unit]
Description=Fan Watchdog Reset
Wants=phosphor-fan-monitor-init@0.service
Before=phosphor-fan-monitor-init@0.service
Conflicts=obmc-chassis-poweroff@0.target
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile={envfiledir}/obmc/fan-watchdog/reset-fan-watchdog.conf
ExecStart=/usr/bin/gpioset --mode=time -u ${{DELAY}} ${{GPIO_PATH}} ${{GPIO}}=0
ExecStart=/usr/bin/gpioset --mode=time -u ${{DELAY}} ${{GPIO_PATH}} ${{GPIO}}=1
@@ -0,0 +1,3 @@
TIMEOUT=5
INTERVAL=1
DEVICE=/dev/watchdog0
@@ -0,0 +1,3 @@
GPIO_PATH=/dev/gpiochip0
GPIO=109
DELAY=1
@@ -0,0 +1,3 @@
TIMEOUT=5
INTERVAL=1
DEVICE=/dev/watchdog0
@@ -0,0 +1,3 @@
GPIO_PATH=/dev/gpiochip0
GPIO=114
DELAY=1
@@ -0,0 +1,3 @@
TIMEOUT=5
INTERVAL=1
DEVICE=/dev/watchdog0
@@ -0,0 +1,3 @@
GPIO_PATH=/dev/gpiochip0
GPIO=109
DELAY=1
@@ -0,0 +1 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
@@ -0,0 +1 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
@@ -0,0 +1,21 @@
fans:
- inventory: /system/chassis/motherboard/fan2
cooling_zone: 0
cooling_profile: all
sensors:
- fan2_0
- inventory: /system/chassis/motherboard/fan0
cooling_zone: 0
cooling_profile: all
sensors:
- fan0_0
- inventory: /system/chassis/motherboard/fan1
cooling_zone: 0
cooling_profile: air
sensors:
- fan1_0
- inventory: /system/chassis/motherboard/fan3
cooling_zone: 0
cooling_profile: all
sensors:
- fan3_0
@@ -0,0 +1,21 @@
fans:
- inventory: /system/chassis/motherboard/fan2
cooling_zone: 0
cooling_profile: all
sensors:
- fan2_0
- inventory: /system/chassis/motherboard/fan0
cooling_zone: 0
cooling_profile: all
sensors:
- fan0_0
- inventory: /system/chassis/motherboard/fan1
cooling_zone: 0
cooling_profile: air
sensors:
- fan1_0
- inventory: /system/chassis/motherboard/fan3
cooling_zone: 0
cooling_profile: all
sensors:
- fan3_0
@@ -0,0 +1 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
@@ -0,0 +1,18 @@
conditions:
- name: air_cooled_chassis
type: getProperty
properties:
- property: WaterCooled
interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
path: /xyz/openbmc_project/inventory/system/chassis
type: bool
value: false
- name: water_and_air_cooled_chassis
type: getProperty
properties:
- property: WaterCooled
interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
path: /xyz/openbmc_project/inventory/system/chassis
type: bool
value: true
@@ -0,0 +1,18 @@
conditions:
- name: air_cooled_chassis
type: getProperty
properties:
- property: WaterCooled
interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
path: /xyz/openbmc_project/inventory/system/chassis
type: bool
value: false
- name: water_and_air_cooled_chassis
type: getProperty
properties:
- property: WaterCooled
interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
path: /xyz/openbmc_project/inventory/system/chassis
type: bool
value: true
@@ -0,0 +1 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
@@ -0,0 +1,68 @@
manager_configuration:
power_on_delay: 20
zone_configuration:
#Air cooled zones
- zone_conditions:
- name: air_cooled_chassis
zones:
- zone: 0
cooling_profiles:
- air
- all
full_speed: 9500
default_floor: 8000
increase_delay: 5
decrease_interval: 30
interfaces:
- name: xyz.openbmc_project.Control.ThermalMode
properties:
- name: Supported
type: array[string]
values:
- value: DEFAULT
description: >
Default thermal control mode
- name: Current
type: string
persist: true
values:
- value: DEFAULT
description: >
Set current thermal control mode to the
default which will be replaced on startup if
another supported mode was selected & persisted.
#Water cooled zones
- zone_conditions:
- name: water_and_air_cooled_chassis
zones:
- zone: 0
cooling_profiles:
- water
- all
full_speed: 9500
default_floor: 8000
increase_delay: 5
decrease_interval: 30
interfaces:
- name: xyz.openbmc_project.Control.ThermalMode
properties:
- name: Supported
type: array[string]
values:
- value: DEFAULT
description: >
Default thermal control mode
- name: Current
type: string
persist: true
values:
- value: DEFAULT
description: >
Set current thermal control mode to the
default which will be replaced on startup if
another supported mode was selected & persisted.
@@ -0,0 +1,100 @@
manager_configuration:
power_on_delay: 20
zone_configuration:
#Air cooled zones
- zone_conditions:
- name: air_cooled_chassis
zones:
- zone: 0
cooling_profiles:
- air
- all
full_speed: 10500
default_floor: 8000
increase_delay: 5
decrease_interval: 30
interfaces:
- name: xyz.openbmc_project.Control.ThermalMode
properties:
- name: Supported
type: array[string]
values:
- value: DEFAULT
description: >
Default thermal control mode
- value: CUSTOM
description: >
Custom thermal control mode for handling the use of
PCI cards located behind the GPU exhaust that
could overtemp where the default mode is not
sufficient enough.
- value: HEAVY_IO
description: >
Heavy IO thermal control mode for handling the use
of PCI cards that produce heavy IO utilization and
could overtemp.
- value: MAX_BASE_FAN_FLOOR
description: >
Maximum base fan floor mode is for handling the
use of any hardware that requires the highest
amount of cooling even when the system may be idle.
- name: Current
type: string
persist: true
values:
- value: DEFAULT
description: >
Set current thermal control mode to the
default which will be replaced on startup if
another selected mode was persisted.
#Water cooled zones
- zone_conditions:
- name: water_and_air_cooled_chassis
zones:
- zone: 0
cooling_profiles:
- water
- all
full_speed: 10500
default_floor: 8000
increase_delay: 5
decrease_interval: 30
interfaces:
- name: xyz.openbmc_project.Control.ThermalMode
properties:
- name: Supported
type: array[string]
values:
- value: DEFAULT
description: >
Default thermal control mode
- value: CUSTOM
description: >
Custom thermal control mode for handling the use of
PCI cards located behind the GPU exhaust that
could overtemp where the default mode is not
sufficient enough.
- value: HEAVY_IO
description: >
Heavy IO thermal control mode for handling the use
of PCI cards that produce heavy IO utilization and
could overtemp.
- value: MAX_BASE_FAN_FLOOR
description: >
Maximum base fan floor mode is for handling the
use of any hardware that requires the highest
amount of cooling even when the system may be idle.
- name: Current
type: string
persist: true
values:
- value: DEFAULT
description: >
Set current thermal control mode to the
default which will be replaced on startup if
another selected mode was persisted.
@@ -0,0 +1,36 @@
fans:
- inventory: /system/chassis/motherboard/fan0
functional_delay: 5
allowed_out_of_range_time: 30
deviation: 15
num_sensors_nonfunc_for_fan_nonfunc: 1
sensors:
- name: fan0_0
has_target: true
- inventory: /system/chassis/motherboard/fan1
functional_delay: 5
allowed_out_of_range_time: 30
deviation: 15
num_sensors_nonfunc_for_fan_nonfunc: 1
sensors:
- name: fan1_0
has_target: true
- inventory: /system/chassis/motherboard/fan2
functional_delay: 5
allowed_out_of_range_time: 30
deviation: 15
num_sensors_nonfunc_for_fan_nonfunc: 1
sensors:
- name: fan2_0
has_target: true
- inventory: /system/chassis/motherboard/fan3
functional_delay: 5
allowed_out_of_range_time: 30
deviation: 15
num_sensors_nonfunc_for_fan_nonfunc: 1
sensors:
- name: fan3_0
has_target: true
@@ -0,0 +1,62 @@
- name: fan0
path: /system/chassis/motherboard/fan0
methods:
- type: gpio
key: 5
physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
devpath: /dev/input/by-path/platform-gpio-keys-polled-event
- type: tach
sensors:
- fan0_0
rpolicy:
type: anyof
- name: fan1
path: /system/chassis/motherboard/fan1
methods:
- type: gpio
key: 6
physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
devpath: /dev/input/by-path/platform-gpio-keys-polled-event
- type: tach
sensors:
- fan1_0
rpolicy:
type: anyof
- name: fan2
path: /system/chassis/motherboard/fan2
methods:
- type: gpio
key: 7
physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
devpath: /dev/input/by-path/platform-gpio-keys-polled-event
- type: tach
sensors:
- fan2_0
rpolicy:
type: anyof
- name: fan3
path: /system/chassis/motherboard/fan3
methods:
- type: gpio
key: 8
physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
devpath: /dev/input/by-path/platform-gpio-keys-polled-event
- type: tach
sensors:
- fan3_0
rpolicy:
type: anyof
# Boost fan presence
- name: fan4
path: /system/chassis/motherboard/fan4
methods:
- type: gpio
key: 9
physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
devpath: /dev/input/by-path/platform-gpio-keys-polled-event
rpolicy:
type: anyof
@@ -0,0 +1,2 @@
[Unit]
Conflicts=obmc-fan-watchdog-takeover.target
@@ -0,0 +1,3 @@
[Unit]
#These overrides allow the fan watchdog to take over when this service dies
OnFailure=fan-watchdog-monitor@%n.service
@@ -0,0 +1,6 @@
OBJPATH="--path=/system/chassis"
AIR="--air"
WATER=""
DEVICE="--dev=/dev/input/by-path/platform-gpio-keys-event"
CODE="--event=13"
@@ -0,0 +1,14 @@
[Unit]
Description=Phosphor Cooling Type
Wants=mapper-wait@-xyz-openbmc_project-inventory.service
After=mapper-wait@-xyz-openbmc_project-inventory.service
ConditionPathExists={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
ExecStart=/usr/bin/phosphor-cooling-type ${{OBJPATH}} ${{AIR}} ${{WATER}} ${{DEVICE}} ${{CODE}}
[Install]
RequiredBy=multi-user.target
@@ -0,0 +1,5 @@
OBJPATH="--path=/system/chassis"
AIR="--air"
WATER=""
DEVICE=""
CODE=""
@@ -0,0 +1,6 @@
OBJPATH="--path=/system/chassis"
AIR="--air"
WATER=""
DEVICE="--dev=/dev/input/by-path/platform-gpio-keys-event"
CODE="--event=13"
@@ -0,0 +1,14 @@
[Unit]
Description=Phosphor Cooling Type
Wants=mapper-wait@-xyz-openbmc_project-inventory.service
After=mapper-wait@-xyz-openbmc_project-inventory.service
ConditionPathExists={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
ExecStart=/usr/bin/phosphor-cooling-type ${{OBJPATH}} ${{AIR}} ${{WATER}} ${{DEVICE}} ${{CODE}}
[Install]
RequiredBy=multi-user.target
@@ -0,0 +1,13 @@
[Unit]
Description=Phosphor Fan Control Daemon
Requires=xyz.openbmc_project.Hwmon@-ahb-apb-bus\x401e78a000-i2c\x2dbus\x40{ADDR}-max31785\x4052.service
After=xyz.openbmc_project.Hwmon@-ahb-apb-bus\x401e78a000-i2c\x2dbus\x40{ADDR}-max31785\x4052.service
Requires=phosphor-cooling-type@%i.service
After=phosphor-cooling-type@%i.service
[Service]
Restart=on-failure
ExecStart=/usr/bin/phosphor-fan-control --control
[Install]
RequiredBy=obmc-chassis-poweron@%i.target
@@ -0,0 +1,63 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
# Package configuration
FAN_PACKAGES:append:ibm-ac-server = " \
phosphor-cooling-type \
"
PACKAGECONFIG:append:ibm-ac-server = " cooling-type"
TMPL_COOLING = "phosphor-cooling-type@.service"
INSTFMT_COOLING = "phosphor-cooling-type@{0}.service"
MULTI_USR_TGT = "multi-user.target"
FMT_COOLING = "../${TMPL_COOLING}:${MULTI_USR_TGT}.requires/${INSTFMT_COOLING}"
FILES:phosphor-cooling-type:append:ibm-ac-server = " ${bindir}/phosphor-cooling-type"
SYSTEMD_SERVICE:phosphor-cooling-type:append:ibm-ac-server = " ${TMPL_COOLING}"
SYSTEMD_LINK:phosphor-cooling-type:append:ibm-ac-server = " ${@compose_list(d, 'FMT_COOLING', 'OBMC_CHASSIS_INSTANCES')}"
COOLING_ENV_FMT = "obmc/phosphor-fan/phosphor-cooling-type-{0}.conf"
SYSTEMD_ENVIRONMENT_FILE:phosphor-cooling-type:append:ibm-ac-server = " ${@compose_list(d, 'COOLING_ENV_FMT', 'OBMC_CHASSIS_INSTANCES')}"
#These services are protected by the watchdog
SYSTEMD_OVERRIDE:phosphor-fan-control:witherspoon += "fan-watchdog-monitor.conf:phosphor-fan-control-init@0.service.d/fan-watchdog-monitor.conf"
SYSTEMD_OVERRIDE:phosphor-fan-control:witherspoon += "fan-watchdog-monitor.conf:phosphor-fan-control@0.service.d/fan-watchdog-monitor.conf"
SYSTEMD_OVERRIDE:phosphor-fan-monitor:witherspoon += "fan-watchdog-monitor.conf:phosphor-fan-monitor-init@0.service.d/fan-watchdog-monitor.conf"
SYSTEMD_OVERRIDE:phosphor-fan-monitor:witherspoon += "fan-watchdog-monitor.conf:phosphor-fan-monitor@0.service.d/fan-watchdog-monitor.conf"
SYSTEMD_OVERRIDE:phosphor-fan-control:p10bmc += "fan-watchdog-monitor.conf:phosphor-fan-control-init@0.service.d/fan-watchdog-monitor.conf"
SYSTEMD_OVERRIDE:phosphor-fan-control:p10bmc += "fan-watchdog-monitor.conf:phosphor-fan-control@0.service.d/fan-watchdog-monitor.conf"
SYSTEMD_OVERRIDE:phosphor-fan-monitor:p10bmc += "fan-watchdog-monitor.conf:phosphor-fan-monitor-init@0.service.d/fan-watchdog-monitor.conf"
SYSTEMD_OVERRIDE:phosphor-fan-monitor:p10bmc += "fan-watchdog-monitor.conf:phosphor-fan-monitor@0.service.d/fan-watchdog-monitor.conf"
#These services need to be stopped when watchdog expires
SYSTEMD_OVERRIDE:phosphor-fan-control:witherspoon += "fan-watchdog-conflicts.conf:phosphor-fan-control@0.service.d/fan-watchdog-conflicts.conf"
SYSTEMD_OVERRIDE:phosphor-fan-monitor:witherspoon += "fan-watchdog-conflicts.conf:phosphor-fan-monitor@0.service.d/fan-watchdog-conflicts.conf"
SYSTEMD_OVERRIDE:phosphor-fan-control:p10bmc += "fan-watchdog-conflicts.conf:phosphor-fan-control@0.service.d/fan-watchdog-conflicts.conf"
SYSTEMD_OVERRIDE:phosphor-fan-monitor:p10bmc += "fan-watchdog-conflicts.conf:phosphor-fan-monitor@0.service.d/fan-watchdog-conflicts.conf"
# Witherspoon fan control service linking
# Link fan control init service
SYSTEMD_SERVICE:${PN}-control:witherspoon += "${TMPL_CONTROL} ${TMPL_CONTROL_INIT}"
SYSTEMD_LINK:${PN}-control:witherspoon += "${@compose_list(d, 'FMT_CONTROL_INIT', 'OBMC_CHASSIS_INSTANCES')}"
# Link fan control service to be started at standby
FMT_CONTROL_STDBY:witherspoon = "../${TMPL_CONTROL}:${MULTI_USR_TGT}.wants/${INSTFMT_CONTROL}"
SYSTEMD_LINK:${PN}-control:witherspoon += "${@compose_list(d, 'FMT_CONTROL_STDBY', 'OBMC_CHASSIS_INSTANCES')}"
# Link fan control service to also start at poweron
FMT_CONTROL_PWRON:witherspoon = "../${TMPL_CONTROL}:${POWERON_TGT}.requires/${INSTFMT_CONTROL}"
SYSTEMD_LINK:${PN}-control:witherspoon += "${@compose_list(d, 'FMT_CONTROL_PWRON', 'OBMC_CHASSIS_INSTANCES')}"
# Enable the use of JSON on the fan applications that support it
PACKAGECONFIG:append:witherspoon = " json"
EXTRA_OEMESON:append:witherspoon = " -Djson-control=disabled"
PACKAGECONFIG:append:p10bmc = " json sensor-monitor"
# Set the appropriate i2c address used within the overridden phosphor-fan-control@.service
# file that's used for witherspoon type(including witherspoon-tacoma) machines
SYSTEMD_SUBSTITUTIONS:witherspoon = "ADDR:100:phosphor-fan-control@.service"
SYSTEMD_SUBSTITUTIONS:witherspoon-tacoma = "ADDR:200:phosphor-fan-control@.service"
# Set the PKG_DEFAULT_MACHINE name to "witherspoon" for tacoma so witherspoon's
# JSON config files are installed on tacoma machines (since they use the same ones)
PKG_DEFAULT_MACHINE:witherspoon-tacoma = "witherspoon"
@@ -0,0 +1,23 @@
BMC_RW_MTD:ibm-ac-server = "bmc"
BMC_RW_MTD:p10bmc = "bmc"
BMC_RO_MTD:ibm-ac-server = "alt-bmc+bmc"
BMC_RO_MTD:p10bmc = "bmc"
BMC_KERNEL_MTD:ibm-ac-server = "bmc"
BMC_KERNEL_MTD:p10bmc = "bmc"
# Enable signature verification
PACKAGECONFIG:append:ibm-ac-server = " verify_signature"
PACKAGECONFIG:append:p10bmc = " verify_signature"
# Enable sync of persistent files to the alternate BMC chip
PACKAGECONFIG:append:ibm-ac-server = " sync_bmc_files"
# Enable USB code update
PACKAGECONFIG:append:p10bmc = " usb_code_update"
# Enable Side Switch Boot
PACKAGECONFIG:append:p10bmc = " side_switch_on_boot"
# Set BMC Minimum Ship Level version format
EXTRA_OEMESON:append:p10bmc = " -Dregex-bmc-msl='([a-z]+[0-9]{2})+([0-9]+).([0-9]+).([0-9]+)'"

After

Width:  |  Height:  |  Size: 745 B

@@ -0,0 +1,30 @@
SUMMARY = "ID Button pressed application"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit obmc-phosphor-systemd
DEPENDS += "phosphor-gpio-monitor"
RDEPENDS:${PN} += "phosphor-gpio-monitor-monitor"
S = "${WORKDIR}"
SRC_URI += "file://toggle_identify_led.sh"
do_install() {
install -d ${D}${bindir}
install -m 0755 ${WORKDIR}/toggle_identify_led.sh \
${D}${bindir}/toggle_identify_led.sh
}
SYSTEMD_ENVIRONMENT_FILE:${PN} +="obmc/gpio/id_button"
ID_BUTTON_SERVICE = "id_button"
TMPL = "phosphor-gpio-monitor@.service"
INSTFMT = "phosphor-gpio-monitor@{0}.service"
TGT = "multi-user.target"
FMT = "../${TMPL}:${TGT}.requires/${INSTFMT}"
SYSTEMD_SERVICE:${PN} += "id-button-pressed.service"
SYSTEMD_LINK:${PN} += "${@compose_list(d, 'FMT', 'ID_BUTTON_SERVICE')}"

Some files were not shown because too many files have changed in this diff Show More