summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <tpearson@raptorengineering.com>2019-04-30 18:59:12 +0000
committerTimothy Pearson <tpearson@raptorengineering.com>2019-05-10 21:56:01 +0000
commit4d58f41bf8838aafae797db31e5327cd2207291b (patch)
treef725354c32ad6f3faf9f041128c8d821c7bd297c
parentc3c1ddbed8b7414e50ee75057038548fc37a49d4 (diff)
downloadblackbird-openbmc-4d58f41bf8838aafae797db31e5327cd2207291b.tar.gz
blackbird-openbmc-4d58f41bf8838aafae797db31e5327cd2207291b.zip
Initial Blackbird files
-rw-r--r--README.md1
-rw-r--r--meta-rcs/meta-blackbird/conf/bblayers.conf.sample33
-rw-r--r--meta-rcs/meta-blackbird/conf/conf-notes.txt2
-rw-r--r--meta-rcs/meta-blackbird/conf/distro/openbmc-blackbird.conf2
-rw-r--r--meta-rcs/meta-blackbird/conf/layer.conf10
-rw-r--r--meta-rcs/meta-blackbird/conf/local.conf.sample223
-rw-r--r--meta-rcs/meta-blackbird/conf/machine/blackbird.conf46
-rw-r--r--meta-rcs/meta-blackbird/recipes-kernel/linux/linux-aspeed/blackbird.cfg23
-rw-r--r--meta-rcs/meta-blackbird/recipes-kernel/linux/linux-aspeed_%.bbappend2
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control.bb42
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-disable.sh34
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service16
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-enable.sh34
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service17
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-workaround.sh23
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-workaround@.service18
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config.bb21
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/COPYING.GPLv3674
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/fpga-config.service13
-rwxr-xr-xmeta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/fpga-setup.sh11
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control.bb28
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm-control.sh137
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm-control@.service15
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm.sh22
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/console/obmc-console/obmc-console.conf4
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/console/obmc-console_%.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy-native.bb18
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/air-cooled.yaml235
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/fan-errors.yaml531
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/water-cooled.yaml233
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog.bb24
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-fan-watchdog-monitor@.service10
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-fan-watchdog.service13
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-reset-fan-watchdog.service12
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/obmc/blackbird-fan-watchdog/fan-watchdog.conf3
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/obmc/blackbird-fan-watchdog/reset-fan-watchdog.conf4
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-thermal-policy-native.bb14
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-thermal-policy/thermal-policy.yaml152
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-events-config-native.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-events-config-native/events.yaml560
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-fan-config-native.bbappend1
-rwxr-xr-xmeta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-fan-config-native/fans.yaml13
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native/zone_conditions.yaml18
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-config-native.bbappend2
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-config-native/zones.yaml48
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-monitor-config-native.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml37
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-presence-config-native.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-presence-config-native/config.yaml26
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/fan-watchdog-conflicts.conf2
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/fan-watchdog-monitor.conf5
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/obmc/phosphor-fan/phosphor-cooling-type-0.conf6
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/phosphor-cooling-type@.service15
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan_%.bbappend33
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/flash/phosphor-software-manager_%.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button.bb30
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/id-button-pressed.service10
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/obmc/gpio/id_button5
-rwxr-xr-xmeta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/toggle_identify_led.sh20
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/host/p9-host-start.bbappend4
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/images/obmc-phosphor-image.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-fru-read-inventory-native.bb19
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-inventory-map-native.bb24
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-inventory-sel-native.bb19
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/files/config.yaml538
-rwxr-xr-xmeta-rcs/meta-blackbird/recipes-phosphor/ipmi/files/sel-config.yaml340
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend45
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/dcmi_sensors.json59
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/dev_id.json2
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/power_reading.json3
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-properties%.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-properties%/extra-properties.yaml159
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-read-bmc-inventory%/bmc-fru-config.yaml18
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/channel.yaml4
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/hwmon_sensors.hardcoded.yaml1078
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/occ_sensors.hardcoded.yaml44
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend10
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-sensor-inventory%.bbappend1
-rwxr-xr-xmeta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-sensor-inventory%/config.yaml1939
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/leds/blackbird-led-manager-config-native.bb20
-rwxr-xr-xmeta-rcs/meta-blackbird/recipes-phosphor/leds/blackbird-led-manager-config/led.yaml36
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/mboxd/mboxd_%.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/network/network/ncsi-netlink.service13
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/network/phosphor-network_%.bbappend8
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/70-hwmon.rules3
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/power-supply@68.conf23
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/power-supply@69.conf23
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/w83773g@4c.conf3
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf17
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--06/sbefifo1-dev0/occ-hwmon.1.conf123
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--0a/fsi1/slave@01--00/01--01--00--06/sbefifo2-dev0/occ-hwmon.2.conf123
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/xyz.openbmc_project.Hwmon@.service10
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend21
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/skeleton/obmc-libobmc-intf/gpio_defs.json66
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/skeleton/obmc-libobmc-intf_%.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/state/phosphor-state-manager/obmc/phosphor-reboot-host/reboot.conf3
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/state/phosphor-state-manager_%.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fb.modes7
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm-static-background.pngbin0 -> 25392 bytes
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm.service8
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm_git.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config.bb27
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/COPYING.GPLv3674
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/lvds-config@.service17
-rwxr-xr-xmeta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/lvds.sh56
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/uart-render-controller/uart-render-controller.service14
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/video/uart-render-controller_git.bbappend1
-rw-r--r--meta-rcs/meta-blackbird/recipes-phosphor/workbook/blackbird-config_git.bb6
-rw-r--r--meta-rcs/meta-blackbird/recipes.txt2
112 files changed, 9155 insertions, 0 deletions
diff --git a/README.md b/README.md
index 1c68ce3d9..5c198f55a 100644
--- a/README.md
+++ b/README.md
@@ -37,6 +37,7 @@ then move to the next step. Additional examples can be found in the
Machine | TEMPLATECONF
--------|---------
+Blackbird | ```meta-rcs/meta-blackbird/conf```
Talos II | ```meta-rcs/meta-talos/conf```
diff --git a/meta-rcs/meta-blackbird/conf/bblayers.conf.sample b/meta-rcs/meta-blackbird/conf/bblayers.conf.sample
new file mode 100644
index 000000000..1faa7a3cc
--- /dev/null
+++ b/meta-rcs/meta-blackbird/conf/bblayers.conf.sample
@@ -0,0 +1,33 @@
+# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
+# changes incompatibly
+LCONF_VERSION = "8"
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+
+BBLAYERS ?= " \
+ ##OEROOT##/meta \
+ ##OEROOT##/meta-openembedded/meta-oe \
+ ##OEROOT##/meta-openembedded/meta-networking \
+ ##OEROOT##/meta-openembedded/meta-perl \
+ ##OEROOT##/meta-openembedded/meta-python \
+ ##OEROOT##/meta-phosphor \
+ ##OEROOT##/meta-aspeed \
+ ##OEROOT##/meta-openpower \
+ ##OEROOT##/meta-ibm \
+ ##OEROOT##/meta-rcs \
+ ##OEROOT##/meta-rcs/meta-blackbird \
+ "
+BBLAYERS_NON_REMOVABLE ?= " \
+ ##OEROOT##/meta \
+ ##OEROOT##/meta-openembedded/meta-oe \
+ ##OEROOT##/meta-openembedded/meta-networking \
+ ##OEROOT##/meta-openembedded/meta-perl \
+ ##OEROOT##/meta-openembedded/meta-python \
+ ##OEROOT##/meta-phosphor \
+ ##OEROOT##/meta-aspeed \
+ ##OEROOT##/meta-openpower \
+ ##OEROOT##/meta-ibm \
+ ##OEROOT##/meta-rcs \
+ ##OEROOT##/meta-rcs/meta-blackbird \
+ "
diff --git a/meta-rcs/meta-blackbird/conf/conf-notes.txt b/meta-rcs/meta-blackbird/conf/conf-notes.txt
new file mode 100644
index 000000000..9b3c01a55
--- /dev/null
+++ b/meta-rcs/meta-blackbird/conf/conf-notes.txt
@@ -0,0 +1,2 @@
+Common targets are:
+ obmc-phosphor-image
diff --git a/meta-rcs/meta-blackbird/conf/distro/openbmc-blackbird.conf b/meta-rcs/meta-blackbird/conf/distro/openbmc-blackbird.conf
new file mode 100644
index 000000000..f8569d43e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/conf/distro/openbmc-blackbird.conf
@@ -0,0 +1,2 @@
+require conf/distro/openbmc-openpower.conf
+require conf/distro/include/openpower-mrw.inc
diff --git a/meta-rcs/meta-blackbird/conf/layer.conf b/meta-rcs/meta-blackbird/conf/layer.conf
new file mode 100644
index 000000000..b8f5a9bae
--- /dev/null
+++ b/meta-rcs/meta-blackbird/conf/layer.conf
@@ -0,0 +1,10 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "blackbird-layer"
+BBFILE_PATTERN_blackbird-layer = ""
+LAYERSERIES_COMPAT_blackbird-layer = "thud warrior"
diff --git a/meta-rcs/meta-blackbird/conf/local.conf.sample b/meta-rcs/meta-blackbird/conf/local.conf.sample
new file mode 100644
index 000000000..19af6ca50
--- /dev/null
+++ b/meta-rcs/meta-blackbird/conf/local.conf.sample
@@ -0,0 +1,223 @@
+#
+# This file is your local configuration file and is where all local user settings
+# are placed. The comments in this file give some guide to the options a new user
+# to the system might want to change but pretty much any configuration option can
+# be set in this file.
+#
+# Lines starting with the '#' character are commented out and in some cases the
+# default values are provided as comments to show people example syntax. Enabling
+# the option is a question of removing the # character and making any change to the
+# variable as required.
+
+#
+# Machine Selection
+#
+MACHINE ??= "blackbird"
+
+#
+# Where to place downloads
+#
+# During a first build the system will download many different source code tarballs
+# from various upstream projects. This can take a while, particularly if your network
+# connection is slow. These are all stored in DL_DIR. When wiping and rebuilding you
+# can preserve this directory to speed up this part of subsequent builds. This directory
+# is safe to share between multiple builds on the same machine too.
+#
+# The default is a downloads directory under TOPDIR which is the build directory.
+#
+#DL_DIR ?= "${TOPDIR}/downloads"
+
+#
+# Where to place shared-state files
+#
+# BitBake has the capability to accelerate builds based on previously built output.
+# This is done using "shared state" files which can be thought of as cache objects
+# and this option determines where those files are placed.
+#
+# You can wipe out TMPDIR leaving this directory intact and the build would regenerate
+# from these files if no changes were made to the configuration. If changes were made
+# to the configuration, only shared state files where the state was still valid would
+# be used (done using checksums).
+#
+# The default is a sstate-cache directory under TOPDIR.
+#
+#SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
+
+#
+# Where to place the build output
+#
+# This option specifies where the bulk of the building work should be done and
+# where BitBake should place its temporary files and output. Keep in mind that
+# this includes the extraction and compilation of many applications and the toolchain
+# which can use Gigabytes of hard disk space.
+#
+# The default is a tmp directory under TOPDIR.
+#
+#TMPDIR = "${TOPDIR}/tmp"
+
+#
+# Default policy config
+#
+# The distribution setting controls which policy settings are used as defaults.
+# The default value is fine for general Yocto project use, at least initially.
+# Ultimately when creating custom policy, people will likely end up subclassing
+# these defaults.
+#
+DISTRO ?= "openbmc-blackbird"
+# As an example of a subclass there is a "bleeding" edge policy configuration
+# where many versions are set to the absolute latest code from the upstream
+# source control systems. This is just mentioned here as an example, its not
+# useful to most new users.
+# DISTRO ?= "poky-bleeding"
+
+#
+# Package Management configuration
+#
+# This variable lists which packaging formats to enable. Multiple package backends
+# can be enabled at once and the first item listed in the variable will be used
+# to generate the root filesystems.
+# Options are:
+# - 'package_deb' for debian style deb files
+# - 'package_ipk' for ipk files are used by opkg (a debian style embedded package manager)
+# - 'package_rpm' for rpm style packages
+# E.g.: PACKAGE_CLASSES ?= "package_rpm package_deb package_ipk"
+# We default to rpm:
+PACKAGE_CLASSES ?= "package_rpm"
+
+#
+# SDK/ADT target architecture
+#
+# This variable specifies the architecture to build SDK/ADT items for and means
+# you can build the SDK packages for architectures other than the machine you are
+# running the build on (i.e. building i686 packages on an x86_64 host).
+# Supported values are i686 and x86_64
+#SDKMACHINE ?= "i686"
+
+SANITY_TESTED_DISTROS_append ?= " *"
+
+#
+# Extra image configuration defaults
+#
+# The EXTRA_IMAGE_FEATURES variable allows extra packages to be added to the generated
+# images. Some of these options are added to certain image types automatically. The
+# variable can contain the following options:
+# "dbg-pkgs" - add -dbg packages for all installed packages
+# (adds symbol information for debugging/profiling)
+# "dev-pkgs" - add -dev packages for all installed packages
+# (useful if you want to develop against libs in the image)
+# "ptest-pkgs" - add -ptest packages for all ptest-enabled packages
+# (useful if you want to run the package test suites)
+# "tools-sdk" - add development tools (gcc, make, pkgconfig etc.)
+# "tools-debug" - add debugging tools (gdb, strace)
+# "eclipse-debug" - add Eclipse remote debugging support
+# "tools-profile" - add profiling tools (oprofile, exmap, lttng, valgrind)
+# "tools-testapps" - add useful testing tools (ts_print, aplay, arecord etc.)
+# "debug-tweaks" - make an image suitable for development
+# e.g. ssh root access has a blank password
+# There are other application targets that can be used here too, see
+# meta/classes/image.bbclass and meta/classes/core-image.bbclass for more details.
+# We default to enabling the debugging tweaks.
+EXTRA_IMAGE_FEATURES = "debug-tweaks"
+
+#
+# Additional image features
+#
+# The following is a list of additional classes to use when building images which
+# enable extra features. Some available options which can be included in this variable
+# are:
+# - 'buildstats' collect build statistics
+# - 'image-mklibs' to reduce shared library files size for an image
+# - 'image-prelink' in order to prelink the filesystem image
+# - 'image-swab' to perform host system intrusion detection
+# NOTE: if listing mklibs & prelink both, then make sure mklibs is before prelink
+# NOTE: mklibs also needs to be explicitly enabled for a given image, see local.conf.extended
+USER_CLASSES ?= "buildstats image-mklibs image-prelink"
+
+#
+# Runtime testing of images
+#
+# The build system can test booting virtual machine images under qemu (an emulator)
+# after any root filesystems are created and run tests against those images. To
+# enable this uncomment this line. See classes/testimage(-auto).bbclass for
+# further details.
+#TEST_IMAGE = "1"
+#
+# Interactive shell configuration
+#
+# Under certain circumstances the system may need input from you and to do this it
+# can launch an interactive shell. It needs to do this since the build is
+# multithreaded and needs to be able to handle the case where more than one parallel
+# process may require the user's attention. The default is iterate over the available
+# terminal types to find one that works.
+#
+# Examples of the occasions this may happen are when resolving patches which cannot
+# be applied, to use the devshell or the kernel menuconfig
+#
+# Supported values are auto, gnome, xfce, rxvt, screen, konsole (KDE 3.x only), none
+# Note: currently, Konsole support only works for KDE 3.x due to the way
+# newer Konsole versions behave
+#OE_TERMINAL = "auto"
+# By default disable interactive patch resolution (tasks will just fail instead):
+PATCHRESOLVE = "noop"
+
+#
+# Disk Space Monitoring during the build
+#
+# Monitor the disk space during the build. If there is less that 1GB of space or less
+# than 100K inodes in any key build location (TMPDIR, DL_DIR, SSTATE_DIR), gracefully
+# shutdown the build. If there is less that 100MB or 1K inodes, perform a hard abort
+# of the build. The reason for this is that running completely out of space can corrupt
+# files and damages the build in ways which may not be easily recoverable.
+# It's necessary to monitor /tmp, if there is no space left the build will fail
+# with very exotic errors.
+BB_DISKMON_DIRS = "\
+ STOPTASKS,${TMPDIR},1G,100K \
+ STOPTASKS,${DL_DIR},1G,100K \
+ STOPTASKS,${SSTATE_DIR},1G,100K \
+ STOPTASKS,/tmp,100M,100K \
+ ABORT,${TMPDIR},100M,1K \
+ ABORT,${DL_DIR},100M,1K \
+ ABORT,${SSTATE_DIR},100M,1K \
+ ABORT,/tmp,10M,1K"
+
+#
+# Shared-state files from other locations
+#
+# As mentioned above, shared state files are prebuilt cache data objects which can
+# used to accelerate build time. This variable can be used to configure the system
+# to search other mirror locations for these objects before it builds the data itself.
+#
+# This can be a filesystem directory, or a remote url such as http or ftp. These
+# would contain the sstate-cache results from previous builds (possibly from other
+# machines). This variable works like fetcher MIRRORS/PREMIRRORS and points to the
+# cache locations to check for the shared objects.
+# NOTE: if the mirror uses the same structure as SSTATE_DIR, you need to add PATH
+# at the end as shown in the examples below. This will be substituted with the
+# correct path within the directory structure.
+#SSTATE_MIRRORS ?= "\
+#file://.* http://someserver.tld/share/sstate/PATH;downloadfilename=PATH \n \
+#file://.* file:///some/local/dir/sstate/PATH"
+
+
+#
+# Qemu configuration
+#
+# By default qemu will build with a builtin VNC server where graphical output can be
+# seen. The two lines below enable the SDL backend too. This assumes there is a
+# libsdl library available on your build system.
+#PACKAGECONFIG_append_pn-qemu-native = " sdl"
+#PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
+#ASSUME_PROVIDED += "libsdl-native"
+
+
+# CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to
+# track the version of this file when it was generated. This can safely be ignored if
+# this doesn't mean anything to you.
+CONF_VERSION = "1"
+
+# Set the root password to '0penBmc'
+INHERIT += "extrausers"
+
+EXTRA_USERS_PARAMS = " \
+ usermod -p '\$1\$UGMqyqdG\$FZiylVFmRRfl9Z0Ue8G7e/' root; \
+ "
diff --git a/meta-rcs/meta-blackbird/conf/machine/blackbird.conf b/meta-rcs/meta-blackbird/conf/machine/blackbird.conf
new file mode 100644
index 000000000..7174a1126
--- /dev/null
+++ b/meta-rcs/meta-blackbird/conf/machine/blackbird.conf
@@ -0,0 +1,46 @@
+KMACHINE = "aspeed"
+KERNEL_DEVICETREE = "${KMACHINE}-bmc-opp-${MACHINE}.dtb"
+
+UBOOT_MACHINE = "ast_g5_ncsi_config"
+
+OBMC_MACHINE_FEATURES += "obmc-mrw"
+
+OBMC_POWER_SUPPLY_INSTANCES = "0 1"
+
+require conf/machine/include/ast2500.inc
+require conf/machine/include/obmc-bsp-common.inc
+require conf/machine/include/rcs.inc
+require conf/machine/include/p9.inc
+
+PHOSPHOR_MRW_URI = "git://scm.raptorcs.com/scm/git/blackbird-xml;protocol=https"
+PHOSPHOR_MRW_REV = "a25a7887218078a634f9bfb16b82929bbe6103fd"
+
+# Inhibit phosphor-hwmon-config-mrw
+VIRTUAL-RUNTIME_phosphor-hwmon-config_df-mrw = ""
+
+# Inhibit phosphor-fan-presence-mrw-native
+PREFERRED_PROVIDER_virtual/phosphor-fan-presence-config_df-mrw = \
+ "phosphor-fan-presence-config-native"
+
+# Inhibit phosphor-fan-control-fan-config-mrw-native
+PREFERRED_PROVIDER_virtual/phosphor-fan-control-fan-config_df-mrw = \
+ "phosphor-fan-control-fan-config-native"
+
+DISTRO_FEATURES_append = "\
+ obmc-openpower \
+ obmc-openpower-extra \
+ obmc-openpower-legacy \
+ "
+MACHINE_EXTRA_RDEPENDS += "obmc-ipl-status-led-monitor obmc-hardbeep"
+
+# For kernel debug
+# MACHINE_EXTRA_RDEPENDS += " kernel-modules"
+
+PREFERRED_PROVIDER_virtual/phosphor-ipmi-fru-inventory = "blackbird-ipmi-inventory-map-native"
+PREFERRED_PROVIDER_virtual/phosphor-ipmi-fru-inventory_df-mrw = "blackbird-ipmi-inventory-map-native"
+PREFERRED_PROVIDER_virtual/phosphor-led-manager-config-native = "blackbird-led-manager-config-native"
+PREFERRED_PROVIDER_virtual/phosphor-led-manager-config-native_df-mrw = "blackbird-led-manager-config-native"
+PREFERRED_PROVIDER_virtual/phosphor-ipmi-fru-read-inventory = "blackbird-ipmi-fru-read-inventory-native"
+PREFERRED_PROVIDER_virtual/phosphor-ipmi-fru-read-inventory_df-mrw = "blackbird-ipmi-fru-read-inventory-native"
+PREFERRED_PROVIDER_virtual/phosphor-ipmi-inventory-sel = "blackbird-ipmi-inventory-sel-native"
+PREFERRED_PROVIDER_virtual/phosphor-ipmi-inventory-sel_df-mrw = "blackbird-ipmi-inventory-sel-native"
diff --git a/meta-rcs/meta-blackbird/recipes-kernel/linux/linux-aspeed/blackbird.cfg b/meta-rcs/meta-blackbird/recipes-kernel/linux/linux-aspeed/blackbird.cfg
new file mode 100644
index 000000000..9b4a9bb1c
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-kernel/linux/linux-aspeed/blackbird.cfg
@@ -0,0 +1,23 @@
+CONFIG_HWMON=y
+CONFIG_SENSORS_TMP421=y
+CONFIG_SENSORS_W83773G=y
+CONFIG_RTC_DRV_RV8803=y
+
+CONFIG_GPIOLIB=y
+CONFIG_PWM=y
+CONFIG_PWM_GPIO=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_PWM=y
+
+CONFIG_DEBUG_LL=y
+CONFIG_DEBUG_LL_UART_8250=y
+CONFIG_DEBUG_UART_PHYS=0x1e784000
+CONFIG_DEBUG_UART_VIRT=0xe8784000
+CONFIG_EARLY_PRINTK=y
+
+CONFIG_HZ=1000
+CONFIG_SCHED_HRTICK=y
+CONFIG_HIGH_RES_TIMERS=y
+
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_PINCTRL=y
diff --git a/meta-rcs/meta-blackbird/recipes-kernel/linux/linux-aspeed_%.bbappend b/meta-rcs/meta-blackbird/recipes-kernel/linux/linux-aspeed_%.bbappend
new file mode 100644
index 000000000..cd215864c
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-kernel/linux/linux-aspeed_%.bbappend
@@ -0,0 +1,2 @@
+FILESEXTRAPATHS_prepend_blackbird := "${THISDIR}/${PN}:"
+SRC_URI += "file://blackbird.cfg"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control.bb b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control.bb
new file mode 100644
index 000000000..e66e2b868
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Blackbird AVSBus control"
+PR = "r1"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit obmc-phosphor-systemd
+
+RDEPENDS_${PN} += "i2c-tools bash"
+
+S = "${WORKDIR}"
+SRC_URI += "file://avsbus-workaround.sh \
+ file://avsbus-enable.sh \
+ file://avsbus-disable.sh"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/avsbus-workaround.sh \
+ ${D}${bindir}/avsbus-workaround.sh
+ install -m 0755 ${WORKDIR}/avsbus-disable.sh \
+ ${D}${bindir}/avsbus-disable.sh
+ install -m 0755 ${WORKDIR}/avsbus-enable.sh \
+ ${D}${bindir}/avsbus-enable.sh
+}
+
+TMPL_EN= "avsbus-enable@.service"
+TMPL_DIS= "avsbus-disable@.service"
+TMPL_WA= "avsbus-workaround@.service"
+INSTFMT_EN= "avsbus-enable@{0}.service"
+INSTFMT_DIS= "avsbus-disable@{0}.service"
+INSTFMT_WA= "avsbus-workaround@{0}.service"
+TGTFMT = "obmc-chassis-poweron@{0}.target"
+FMT_EN = "../${TMPL_EN}:${TGTFMT}.requires/${INSTFMT_EN}"
+FMT_DIS = "../${TMPL_DIS}:${TGTFMT}.requires/${INSTFMT_DIS}"
+FMT_WA = "../${TMPL_WA}:${TGTFMT}.requires/${INSTFMT_WA}"
+
+SYSTEMD_SERVICE_${PN} += "${TMPL_EN}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT_EN', 'OBMC_CHASSIS_INSTANCES')}"
+SYSTEMD_SERVICE_${PN} += "${TMPL_DIS}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT_DIS', 'OBMC_CHASSIS_INSTANCES')}"
+SYSTEMD_SERVICE_${PN} += "${TMPL_WA}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT_WA', 'OBMC_CHASSIS_INSTANCES')}"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-disable.sh b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-disable.sh
new file mode 100644
index 000000000..7ee4dfcd1
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-disable.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# Get CPU count
+CPU_COUNT=1
+STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+if [ $? != 0 ]; then
+ STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+fi
+if [ $? != 0 ]; then
+ STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+fi
+CPU_PRESENT_FLAG_N=$(( ${STATUS_FLAGS} & 0x20 ))
+if [ $CPU_PRESENT_FLAG_N != 0 ]; then
+ CPU_COUNT=$(( ${CPU_COUNT} + 1 ))
+fi
+echo "Found $CPU_COUNT CPU(s)"
+
+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 0x73 0x00 0x00 b # VDN 0 - PAGE set
+i2cset -y 4 0x73 0x01 0x80 b # VDN 0
+
+if [ $CPU_COUNT -gt 1 ]; then
+ 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 0x73 0x00 0x00 b # VDN 1 - PAGE set
+ i2cset -y 5 0x73 0x01 0x80 b # VDN 1
+fi
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service
new file mode 100644
index 000000000..424aa2394
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-disable@.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Disable the AVS bus on the VRMs
+Wants=avsbus-workaround@%i.service
+After=avsbus-workaround@%i.service
+Before=vrm-control@%i.service
+Conflicts=obmc-chassis-poweroff@%i.target
+ConditionPathExists=!/run/openbmc/chassis@%i-on
+
+[Service]
+ExecStart=/usr/bin/env avsbus-disable.sh
+SyslogIdentifier=avsbus-disable.sh
+Type=oneshot
+RemainAfterExit=yes
+
+[Install]
+WantedBy=obmc-chassis-poweron@%i.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-enable.sh b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-enable.sh
new file mode 100644
index 000000000..2621c9e24
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-enable.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# Get CPU count
+CPU_COUNT=1
+STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+if [ $? != 0 ]; then
+ STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+fi
+if [ $? != 0 ]; then
+ STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+fi
+CPU_PRESENT_FLAG_N=$(( ${STATUS_FLAGS} & 0x20 ))
+if [ $CPU_PRESENT_FLAG_N != 0 ]; then
+ CPU_COUNT=$(( ${CPU_COUNT} + 1 ))
+fi
+echo "Found $CPU_COUNT CPU(s)"
+
+i2cset -y 4 0x70 0x00 0x00 b # VDD 0 - PAGE set
+i2cset -y 4 0x70 0x01 0xB0 b # VDD 0
+i2cset -y 4 0x70 0x00 0x01 b # VCS 0 - PAGE set
+i2cset -y 4 0x70 0x01 0xB0 b # VCS 0
+i2cset -y 4 0x70 0x00 0x00 b # VCS 0 - PAGE reset
+i2cset -y 4 0x73 0x00 0x00 b # VDN 0 - PAGE set
+i2cset -y 4 0x73 0x01 0xB0 b # VDN 0
+
+if [ $CPU_COUNT -gt 1 ]; then
+ i2cset -y 5 0x70 0x00 0x00 b # VDD 1 - PAGE set
+ i2cset -y 5 0x70 0x01 0xB0 b # VDD 1
+ i2cset -y 5 0x70 0x00 0x01 b # VCS 1 - PAGE set
+ i2cset -y 5 0x70 0x01 0xB0 b # VCS 1
+ i2cset -y 5 0x70 0x00 0x00 b # VCS 1 - PAGE reset
+ i2cset -y 5 0x73 0x00 0x00 b # VDN 1 - PAGE set
+ i2cset -y 5 0x73 0x01 0xB0 b # VDN 1
+fi
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service
new file mode 100644
index 000000000..4b0b19e8b
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-enable@.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=Enable the AVS bus on VRMs
+Wants=vrm-control@%i.service
+After=vrm-control@%i.service
+Wants=obmc-power-start@%i.target
+Before=obmc-power-start@%i.target
+Conflicts=obmc-chassis-poweroff@%i.target
+ConditionPathExists=!/run/openbmc/chassis@%i-on
+
+[Service]
+ExecStart=/usr/bin/env avsbus-enable.sh
+SyslogIdentifier=avsbus-enable.sh
+Type=oneshot
+RemainAfterExit=yes
+
+[Install]
+WantedBy=obmc-chassis-poweron@%i.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-workaround.sh b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-workaround.sh
new file mode 100644
index 000000000..882f1637c
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-workaround.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Get CPU count
+CPU_COUNT=1
+STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+if [ $? != 0 ]; then
+ STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+fi
+if [ $? != 0 ]; then
+ STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+fi
+CPU_PRESENT_FLAG_N=$(( ${STATUS_FLAGS} & 0x20 ))
+if [ $CPU_PRESENT_FLAG_N != 0 ]; then
+ CPU_COUNT=$(( ${CPU_COUNT} + 1 ))
+fi
+echo "Found $CPU_COUNT CPU(s)"
+
+i2cset -y 4 0x28 0x2E 0x23 b # VDD/VCS 0
+i2cset -y 4 0x2B 0x2E 0x23 b # VDN 0
+if [ $CPU_COUNT -gt 1 ]; then
+ i2cset -y 5 0x28 0x2E 0x23 b # VDD/VCS 1
+ i2cset -y 5 0x2B 0x2E 0x23 b # VDN 1
+fi
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-workaround@.service b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-workaround@.service
new file mode 100644
index 000000000..e7e00c046
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/avsbus-control/avsbus-workaround@.service
@@ -0,0 +1,18 @@
+[Unit]
+Description=Perform AVS bus workaround on VRMs
+Wants=op-power-start@.service
+After=op-power-start@.service
+Wants=op-wait-power-on@%i.service
+After=op-wait-power-on@%i.service
+Before=avsbus-disable@%i.service
+Conflicts=obmc-chassis-poweroff@%i.target
+ConditionPathExists=!/run/openbmc/chassis@%i-on
+
+[Service]
+ExecStart=/usr/bin/env avsbus-workaround.sh
+SyslogIdentifier=avsbus-workaround.sh
+Type=oneshot
+RemainAfterExit=yes
+
+[Install]
+WantedBy=obmc-chassis-poweron@%i.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config.bb b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config.bb
new file mode 100644
index 000000000..dc0d37ea1
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Blackbird FPGA Setup"
+DESCRIPTION = "Configure Blackbird FPGA"
+PR = "r1"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit obmc-phosphor-systemd
+
+RDEPENDS_${PN} += "i2c-tools bash"
+
+S = "${WORKDIR}"
+SRC_URI += "file://fpga-setup.sh \
+ file://fpga-config.service \
+ file://COPYING.GPLv3"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/fpga-setup.sh ${D}${bindir}/fpga-setup.sh
+}
+
+SYSTEMD_SERVICE_${PN} += "fpga-config.service"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/COPYING.GPLv3 b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/COPYING.GPLv3
new file mode 100644
index 000000000..94a9ed024
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/COPYING.GPLv3
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/fpga-config.service b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/fpga-config.service
new file mode 100644
index 000000000..bf64de961
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/fpga-config.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Set up FPGA
+Requires=sysinit.target
+After=sysinit.target
+
+[Service]
+ExecStart=/usr/bin/env fpga-setup.sh
+SyslogIdentifier=fpga-setup.sh
+Type=oneshot
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/fpga-setup.sh b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/fpga-setup.sh
new file mode 100755
index 000000000..656d03321
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/fpga-config/fpga-setup.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+#
+# Copyright 2018 - 2019 Raptor Engineering, LLC
+# Released under the terms of the GPL v3
+
+I2C_BUS=12
+I2C_DEV=0x31
+
+# ***** FRONT PANEL LEDS *****
+# Set HDD LED inverted
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0x11 0x1
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control.bb b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control.bb
new file mode 100644
index 000000000..4ef839567
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Blackbird VRM Overrides"
+DESCRIPTION = "Sets Blackbird VRMs to custom voltages"
+PR = "r1"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit obmc-phosphor-systemd
+
+RDEPENDS_${PN} += "i2c-tools bash"
+
+S = "${WORKDIR}"
+SRC_URI += "file://vrm-control.sh \
+ file://vrm.sh"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/vrm.sh ${D}${bindir}/vrm.sh
+ install -m 0755 ${WORKDIR}/vrm-control.sh ${D}${bindir}/vrm-control.sh
+}
+
+TMPL = "vrm-control@.service"
+INSTFMT = "vrm-control@{0}.service"
+TGTFMT = "obmc-chassis-poweron@{0}.target"
+FMT = "../${TMPL}:${TGTFMT}.requires/${INSTFMT}"
+
+SYSTEMD_SERVICE_${PN} += "${TMPL}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT', 'OBMC_CHASSIS_INSTANCES')}"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm-control.sh b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm-control.sh
new file mode 100644
index 000000000..be8d3c0c8
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm-control.sh
@@ -0,0 +1,137 @@
+#!/bin/bash
+# #########################################################
+# Script to run on Blackbird BMC to read/set vrm voltages
+
+
+# #########################################################
+d2v () {
+# usage: d2v <decimal volts>
+
+echo $1 | awk '{print $1 * 256 + .5}' | cut -d '.' -f 1
+}
+
+
+# #########################################################
+v2d () {
+# usage: v2d <hex val>
+
+printf " %0.3fV" `echo $1 | awk '{print $1 / 256}'`
+}
+
+
+# #########################################################
+i2d () {
+# usage: i2d <hex val> <current divisor>
+
+# parse current mantisa and exponent
+# format: SEEE ESMM MMMM MMMM
+let e=$1/0x800
+let esign=e/0x10
+let m=$1\&0x07FF
+let msign=m/0x0400
+
+if [ $msign -eq 1 ]
+then
+ # calc ones compliment
+ let m=($m^0x07FF)+1
+ m="-$m"
+fi
+if [ $esign -eq 1 ]
+then
+ # calc ones compliment
+ let e=(e^0x1F)+1
+ e="-$e"
+fi
+printf " %0.3fA\n" `echo $m $e $2 | awk '{print ($1 * 2^$2) / $3}'`
+}
+
+
+# #########################################################
+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 vddb vcsb vdnb viob
+ exit
+fi
+
+if [ $1 == "-h" ]
+then
+ echo " Usage: vrm [<rail>=[value] [<rail>=[value]] ...]"
+ echo " rail: vdda vcsa vdna vioa vddb vcsb vdnb viob"
+ 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 0x73 2 0 $val
+ ;;
+ vdnb)
+ rw_vc 5 0x73 2 0 $val
+ ;;
+ vioa)
+ rw_vc 4 0x73 2 1 $val
+ ;;
+ viob)
+ rw_vc 5 0x73 2 1 $val
+ ;;
+ *)
+ echo " non-existant"
+ esac
+done
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm-control@.service b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm-control@.service
new file mode 100644
index 000000000..5d072ad5f
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm-control@.service
@@ -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
+
+[Service]
+ExecStart=/usr/bin/env vrm.sh
+SyslogIdentifier=vrm.sh
+Type=oneshot
+RemainAfterExit=yes
+
+[Install]
+WantedBy=obmc-chassis-poweron@%i.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm.sh b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm.sh
new file mode 100644
index 000000000..86d5f1dd6
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/chassis/vrm-control/vrm.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Get CPU count
+CPU_COUNT=1
+STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+if [ $? != 0 ]; then
+ STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+fi
+if [ $? != 0 ]; then
+ STATUS_FLAGS=$(i2cget -y 12 0x31 0x7)
+fi
+CPU_PRESENT_FLAG_N=$(( ${STATUS_FLAGS} & 0x20 ))
+if [ $CPU_PRESENT_FLAG_N != 0 ]; then
+ CPU_COUNT=$(( ${CPU_COUNT} + 1 ))
+fi
+echo "Found $CPU_COUNT CPU(s)"
+
+if [ $CPU_COUNT -gt 1 ]; then
+ vrm-control.sh vdna=1.0 vdnb=1.0
+else
+ vrm-control.sh vdna=1.0
+fi
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/console/obmc-console/obmc-console.conf b/meta-rcs/meta-blackbird/recipes-phosphor/console/obmc-console/obmc-console.conf
new file mode 100644
index 000000000..a5ba3f328
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/console/obmc-console/obmc-console.conf
@@ -0,0 +1,4 @@
+lpc-address = 0x3f8
+sirq = 4
+local-tty = ttyS0
+local-tty-baud = 115200
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/console/obmc-console_%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/console/obmc-console_%.bbappend
new file mode 100644
index 000000000..594e1cc34
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/console/obmc-console_%.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend_blackbird := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy-native.bb b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy-native.bb
new file mode 100644
index 000000000..9506550d1
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy-native.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Fan policy for Blackbird"
+PR = "r1"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit native
+inherit phosphor-dbus-monitor
+
+SRC_URI += "file://air-cooled.yaml"
+SRC_URI += "file://water-cooled.yaml"
+SRC_URI += "file://fan-errors.yaml"
+
+do_install() {
+ install -D ${WORKDIR}/air-cooled.yaml ${D}${config_dir}/air-cooled.yaml
+ install -D ${WORKDIR}/water-cooled.yaml ${D}${config_dir}/water-cooled.yaml
+ install -D ${WORKDIR}/fan-errors.yaml ${D}${config_dir}/fan-errors.yaml
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/air-cooled.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/air-cooled.yaml
new file mode 100644
index 000000000..232b47c01
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/air-cooled.yaml
@@ -0,0 +1,235 @@
+# Air cooled Blackbird fan policy for PDM.
+#
+# An air cooled Blackbird requires a minimum of one functional fan.
+# If the number of functional fans drops below that
+# power the system off.
+
+- name: fans
+ description: >
+ 'An air cooled Blackbird has three fans to monitor.'
+ class: group
+ group: path
+ members:
+ - meta: FAN
+ path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
+ - meta: FAN
+ path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
+ - meta: FAN
+ path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
+
+- name: chassis state
+ description: >
+ 'Blackbird has a single chassis to monitor.'
+ class: group
+ group: path
+ members:
+ - meta: CHASSISSTATE
+ path: /xyz/openbmc_project/state/chassis0
+
+- name: chassis
+ description: >
+ 'Blackbird has a single chassis to monitor.'
+ class: group
+ group: path
+ members:
+ - meta: CHASSIS
+ path: /xyz/openbmc_project/inventory/system/chassis
+
+- name: fan present
+ description: >
+ 'Monitor the presence state of each fan.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.Inventory.Item
+ meta: PRESENT
+ property: Present
+
+- name: fan functional
+ description: >
+ 'Monitor the functional state of each fan.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ meta: FUNCTIONAL
+ property: Functional
+
+- name: chassis powered
+ description: >
+ 'Monitor the chassis power state.'
+ class: group
+ group: property
+ type: string
+ members:
+ - interface: xyz.openbmc_project.State.Chassis
+ meta: CHASSIS_STATE
+ property: CurrentPowerState
+
+- name: chassis air cooled
+ description: >
+ 'Monitor the chassis cooling type.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ meta: COOLING_TYPE
+ property: WaterCooled
+
+- name: watch fan present
+ description: >
+ 'Trigger logic on fan presence state changes.'
+ class: watch
+ watch: property
+ paths: fans
+ properties: fan present
+ callback: check cooling type
+
+- name: watch fan functional
+ description: >
+ 'Trigger logic on fan functional state changes.'
+ class: watch
+ watch: property
+ paths: fans
+ properties: fan functional
+ callback: check cooling type
+
+- name: watch chassis state
+ description: >
+ 'Trigger logic on chassis power state changes.'
+ class: watch
+ watch: property
+ paths: chassis state
+ properties: chassis powered
+ callback: check cooling type
+
+- name: watch cooling type
+ description: >
+ 'Maintain a cache of the chassis cooling type.'
+ class: watch
+ watch: property
+ paths: chassis
+ properties: chassis air cooled
+
+- name: check cooling type
+ description: >
+ 'If this condition passes the chassis is air cooled.'
+ class: condition
+ condition: count
+ paths: chassis
+ properties: chassis air cooled
+ callback: check 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 fans, power off if not.'
+ class: callback
+ callback: group
+ members:
+ - check group presence
+ - check group functional
+
+- 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: fans
+ properties: fan present
+ defer: 25000000us
+ callback: log and shutdown
+ countop: '<'
+ countbound: 1
+ op: '=='
+ bound: true
+
+- name: check group functional
+ description: >
+ 'If this condition passes more than one fan in the group has been
+ marked as nonfunctional for five seconds. Shut the system down.
+
+ For a more detailed definition of nonfunctional, consult the documentation
+ of xyz.openbmc_project.State.Decorator.OperationalStatus and/or the
+ documentation of the fan inventory object implementation.'
+ class: condition
+ condition: count
+ paths: fans
+ properties: fan functional
+ defer: 5000000us
+ callback: log and shutdown
+ countop: '>'
+ countbound: 1
+ op: '=='
+ bound: false
+
+- 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
+ - 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: log
+ description: >
+ 'Log a shutdown event to the systemd journal.'
+ class: callback
+ callback: journal
+ paths: chassis state
+ properties: chassis powered
+ severity: ERR
+ message: Shutting down system. There are not enough functional fans.
+
+- 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
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/fan-errors.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/fan-errors.yaml
new file mode 100644
index 000000000..c9e415e5f
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/fan-errors.yaml
@@ -0,0 +1,531 @@
+# Blackbird fan error policy for PDM.
+#
+# * Create a NotPresent error if fan 0, 1, or 2 is not present for more
+# than 20 seconds.
+# * Create a Nonfunctional error if fan 0, 1, or 2 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 fans 1, 5, or 6.
+# Note: An error is created each time the chassis powers on.
+#
+# * Watch for fans to become 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: chassis state
+ description: >
+ 'Blackbird has a single chassis to monitor.'
+ class: group
+ group: path
+ members:
+ - meta: CHASSISSTATE
+ path: /xyz/openbmc_project/state/chassis0
+
+- name: chassis
+ description: >
+ 'Blackbird has a single chassis to monitor.'
+ class: group
+ group: path
+ members:
+ - meta: CHASSIS
+ path: /xyz/openbmc_project/inventory/system/chassis
+
+
+- name: fan present
+ description: >
+ 'Monitor the presence state of each fan.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.Inventory.Item
+ meta: PRESENT
+ property: Present
+
+- name: fan functional
+ description: >
+ 'Monitor the functional state of each fan.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ meta: FUNCTIONAL
+ property: Functional
+
+- name: chassis powered
+ description: >
+ 'Monitor the chassis power state.'
+ class: group
+ group: property
+ type: string
+ members:
+ - interface: xyz.openbmc_project.State.Chassis
+ meta: CHASSIS_STATE
+ property: CurrentPowerState
+
+- name: chassis air cooled
+ description: >
+ 'The chassis cooling type.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ meta: COOLING_TYPE
+ property: WaterCooled
+
+- name: watch chassis state
+ description: >
+ 'Trigger logic on chassis power state changes.'
+ class: watch
+ watch: property
+ paths: chassis state
+ properties: chassis powered
+ callback: check power
+
+- name: watch fan0 presence
+ description: >
+ 'Trigger logic on fan0 presence state changes.'
+ class: watch
+ watch: property
+ paths: fan0
+ properties: fan present
+ callback: check power fan0 presence
+
+- name: watch fan0 functional
+ description: >
+ 'Trigger logic on fan0 functional state changes.'
+ class: watch
+ watch: property
+ paths: fan0
+ properties: fan functional
+ callback: check power fan0 functional
+
+- name: watch fan1 presence
+ description: >
+ 'Trigger logic on fan1 presence state changes.'
+ class: watch
+ watch: property
+ paths: fan1
+ properties: fan present
+ callback: check power fan1 presence
+
+- name: watch fan1 functional
+ description: >
+ 'Trigger logic on fan1 functional state changes.'
+ class: watch
+ watch: property
+ paths: fan1
+ properties: fan functional
+ callback: check power fan1 functional
+
+- name: watch fan2 presence
+ description: >
+ 'Trigger logic on fan2 presence state changes.'
+ class: watch
+ watch: property
+ paths: fan2
+ properties: fan present
+ callback: check power fan2 presence
+
+- name: watch fan2 functional
+ description: >
+ 'Trigger logic on fan2 functional state changes.'
+ class: watch
+ watch: property
+ paths: fan2
+ properties: fan functional
+ callback: check power fan2 functional
+
+- name: watch fan0 functional for resolving error logs
+ description: >
+ 'On fan functional state changes, check if errors need to be resolved.'
+ class: watch
+ watch: property
+ paths: fan0
+ properties: fan functional
+ callback: resolve fan0 errors if functional
+
+- name: watch fan1 functional for resolving error logs
+ description: >
+ 'On fan functional state changes, check if errors need to be resolved.'
+ class: watch
+ watch: property
+ paths: fan1
+ properties: fan functional
+ callback: resolve fan1 errors if functional
+
+- name: watch fan2 functional for resolving error logs
+ description: >
+ 'On fan functional state changes, check if errors need to be resolved.'
+ class: watch
+ watch: property
+ paths: fan2
+ properties: fan functional
+ callback: resolve fan2 errors if 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 fans
+ description: >
+ 'Verify each of the 6 fans are present.'
+ class: callback
+ callback: group
+ members:
+ - check fan0 presence
+ - check fan1 presence
+ - check fan2 presence
+ - check fan0 functional
+ - check fan1 functional
+ - check fan2 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.
+ Fan 2 is not in a water cooled Blackbird, so check for cooling type
+ before creating an error.'
+ 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.
+ Fan 2 is not in a water cooled Blackbird, so check for cooling type
+ before creating an error.'
+ class: condition
+ condition: count
+ paths: fan2
+ properties: fan functional
+ callback: nonfunctional fan2 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 fans 1 and 3.'
+ 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 fans 1 and 3'
+ 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: resolve fan0 errors if functional
+ description: >
+ 'If fan0 is functional, call the resolve fan0 errors callback.'
+ class: condition
+ condition: count
+ paths: fan0
+ properties: fan functional
+ callback: resolve fan0 errors
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: true
+
+#Go ahead and do this on water cooled as well
+- name: resolve fan1 errors if functional
+ description: >
+ 'If fan1 is functional, call the resolve fan1 errors callback.'
+ class: condition
+ condition: count
+ paths: fan1
+ properties: fan functional
+ callback: resolve fan1 errors
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: true
+
+#Go ahead and do this on water cooled as well
+- name: resolve fan2 errors if functional
+ description: >
+ 'If fan2 is functional, call the resolve fan2 errors callback.'
+ class: condition
+ condition: count
+ paths: fan2
+ properties: fan functional
+ callback: resolve fan2 errors
+ countop: '>'
+ countbound: 0
+ op: '=='
+ bound: true
+
+- name: resolve fan0 errors
+ class: callback
+ callback: resolve callout
+ paths: fan0
+ properties: fan functional
+ callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
+
+- name: resolve fan1 errors
+ class: callback
+ callback: resolve callout
+ paths: fan1
+ properties: fan functional
+ callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
+
+- name: resolve fan2 errors
+ class: callback
+ callback: resolve callout
+ paths: fan2
+ properties: fan functional
+ callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/water-cooled.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/water-cooled.yaml
new file mode 100644
index 000000000..dfb32dfcd
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-policy/water-cooled.yaml
@@ -0,0 +1,233 @@
+# Water cooled Blackbird fan policy for PDM.
+#
+# A water cooled Blackbird requires a minimum of one functional fan and one functional pump.
+# If the number of functional rotors drops below that
+# power the system off.
+
+- name: fans
+ description: >
+ 'A water cooled Blackbird has two rotors 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
+
+- name: chassis state
+ description: >
+ 'Blackbird has a single chassis to monitor.'
+ class: group
+ group: path
+ members:
+ - meta: CHASSISSTATE
+ path: /xyz/openbmc_project/state/chassis0
+
+- name: chassis
+ description: >
+ 'Blackbird has a single chassis to monitor.'
+ class: group
+ group: path
+ members:
+ - meta: CHASSIS
+ path: /xyz/openbmc_project/inventory/system/chassis
+
+- name: fan present
+ description: >
+ 'Monitor the presence state of each fan.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.Inventory.Item
+ meta: PRESENT
+ property: Present
+
+- name: fan functional
+ description: >
+ 'Monitor the functional state of each fan.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ meta: FUNCTIONAL
+ property: Functional
+
+- name: chassis powered
+ description: >
+ 'Monitor the chassis power state.'
+ class: group
+ group: property
+ type: string
+ members:
+ - interface: xyz.openbmc_project.State.Chassis
+ meta: CHASSIS_STATE
+ property: CurrentPowerState
+
+- name: chassis water cooled
+ description: >
+ 'Monitor the chassis cooling type.'
+ class: group
+ group: property
+ type: boolean
+ members:
+ - interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
+ meta: COOLING_TYPE
+ property: WaterCooled
+
+- name: watch fan present
+ description: >
+ 'Trigger logic on fan presence state changes.'
+ class: watch
+ watch: property
+ paths: fans
+ properties: fan present
+ callback: check cooling type
+
+- name: watch fan functional
+ description: >
+ 'Trigger logic on fan functional state changes.'
+ class: watch
+ watch: property
+ paths: fans
+ properties: fan functional
+ callback: check cooling type
+
+- name: watch chassis state
+ description: >
+ 'Trigger logic on chassis power state changes.'
+ class: watch
+ watch: property
+ paths: chassis state
+ properties: chassis powered
+ callback: check cooling type
+
+- name: watch cooling type
+ description: >
+ 'Maintain a cache of the chassis cooling type.'
+ class: watch
+ watch: property
+ paths: chassis
+ properties: chassis water cooled
+
+- name: check cooling type
+ description: >
+ 'If this condition passes the chassis is water cooled.'
+ class: condition
+ condition: count
+ paths: chassis
+ properties: chassis water cooled
+ callback: check 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 fans, power off if not.'
+ class: callback
+ callback: group
+ members:
+ - check group presence
+ - check group functional
+
+- 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: fans
+ properties: fan present
+ defer: 25000000us
+ callback: log and shutdown
+ countop: '<'
+ countbound: 1
+ op: '=='
+ bound: true
+
+- name: check group functional
+ description: >
+ 'If this condition passes more than one fan in the group has been marked
+ as nonfunctional for five seconds. Shut the system down.
+
+ For a more detailed definition of nonfunctional, consult the documentation
+ of xyz.openbmc_project.State.Decorator.OperationalStatus and/or the
+ documentation of the fan inventory object implementation.'
+ class: condition
+ condition: count
+ paths: fans
+ properties: fan functional
+ defer: 5000000us
+ callback: log and shutdown
+ countop: '>'
+ countbound: 1
+ op: '=='
+ bound: false
+
+- 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
+ - 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: log
+ description: >
+ 'Log a shutdown event to the systemd journal.'
+ class: callback
+ callback: journal
+ paths: chassis state
+ properties: chassis powered
+ severity: ERR
+ message: Shutting down system. There are not enough functional fans.
+
+- 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
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog.bb b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog.bb
new file mode 100644
index 000000000..9c1d40cfe
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Blackbird fan watchdog services"
+PR = "r1"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit obmc-phosphor-systemd
+
+RDEPENDS_${PN} += "virtual/obmc-gpio-monitor"
+RDEPENDS_${PN} += "busybox"
+
+RESET_SERVICE = "blackbird-reset-fan-watchdog.service"
+TGTFMT = "obmc-chassis-poweron@0.target"
+RESET_FMT = "../${RESET_SERVICE}:${TGTFMT}.requires/${RESET_SERVICE}"
+
+MONITOR_SERVICE = "blackbird-fan-watchdog-monitor@.service"
+
+WATCHDOG_SERVICE = "blackbird-fan-watchdog.service"
+WATCHDOG_FMT = "../${WATCHDOG_SERVICE}:${TGTFMT}.requires/${WATCHDOG_SERVICE}"
+
+SYSTEMD_SERVICE_${PN} += "${RESET_SERVICE} ${MONITOR_SERVICE} ${WATCHDOG_SERVICE}"
+SYSTEMD_LINK_${PN} += "${RESET_FMT} ${WATCHDOG_FMT}"
+SYSTEMD_ENVIRONMENT_FILE_${PN} += "obmc/blackbird-fan-watchdog/reset-fan-watchdog.conf"
+SYSTEMD_ENVIRONMENT_FILE_${PN} += "obmc/blackbird-fan-watchdog/fan-watchdog.conf"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-fan-watchdog-monitor@.service b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-fan-watchdog-monitor@.service
new file mode 100644
index 000000000..945561b50
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-fan-watchdog-monitor@.service
@@ -0,0 +1,10 @@
+[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/env phosphor-unit-failure-monitor --source %i --target obmc-fan-watchdog-takeover.target --action start
+SyslogIdentifier=phosphor-unit-failure-monitor
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-fan-watchdog.service b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-fan-watchdog.service
new file mode 100644
index 000000000..80ec58bec
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-fan-watchdog.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Blackbird Fan Watchdog Daemon
+Wants=phosphor-fan-control-init@0.service
+Before=phosphor-fan-control-init@0.service
+Conflicts=obmc-fan-watchdog-takeover.target
+
+[Service]
+EnvironmentFile={envfiledir}/obmc/blackbird-fan-watchdog/fan-watchdog.conf
+ExecStart=/sbin/watchdog -T ${{TIMEOUT}} -t ${{INTERVAL}} -F ${{DEVICE}}
+KillSignal=SIGKILL
+
+[Install]
+RequiredBy=obmc-chassis-poweron@0.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-reset-fan-watchdog.service b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-reset-fan-watchdog.service
new file mode 100644
index 000000000..bd7fedaaa
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/blackbird-reset-fan-watchdog.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Blackbird Fan Watchdog Reset
+Wants=phosphor-fan-control-init@0.service
+Before=phosphor-fan-control-init@0.service
+Conflicts=obmc-chassis-poweroff@0.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+EnvironmentFile={envfiledir}/obmc/blackbird-fan-watchdog/reset-fan-watchdog.conf
+ExecStart=/usr/bin/env phosphor-gpio-util -p ${{GPIO_PATH}} -g ${{GPIO}} -a ${{ACTION}} -d ${{DELAY}}
+SyslogIdentifier=phosphor-gpio-util
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/obmc/blackbird-fan-watchdog/fan-watchdog.conf b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/obmc/blackbird-fan-watchdog/fan-watchdog.conf
new file mode 100644
index 000000000..b54faae3b
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/obmc/blackbird-fan-watchdog/fan-watchdog.conf
@@ -0,0 +1,3 @@
+TIMEOUT=3
+INTERVAL=1
+DEVICE=/dev/watchdog0
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/obmc/blackbird-fan-watchdog/reset-fan-watchdog.conf b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/obmc/blackbird-fan-watchdog/reset-fan-watchdog.conf
new file mode 100644
index 000000000..b4e5ce74e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-fan-watchdog/obmc/blackbird-fan-watchdog/reset-fan-watchdog.conf
@@ -0,0 +1,4 @@
+GPIO_PATH=/dev/gpiochip0
+GPIO=109
+DELAY=1
+ACTION=low_high
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-thermal-policy-native.bb b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-thermal-policy-native.bb
new file mode 100644
index 000000000..2a60a581d
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-thermal-policy-native.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Thermal policy for Blackbird"
+PR = "r1"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit native
+inherit phosphor-dbus-monitor
+
+SRC_URI += "file://thermal-policy.yaml"
+
+do_install() {
+ install -D ${WORKDIR}/thermal-policy.yaml ${D}${config_dir}/thermal-policy.yaml
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-thermal-policy/thermal-policy.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-thermal-policy/thermal-policy.yaml
new file mode 100644
index 000000000..d4b5c1649
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/blackbird-thermal-policy/thermal-policy.yaml
@@ -0,0 +1,152 @@
+# Blackbird thermal policy for PDM.
+#
+# Shut down a Blackbird system if more than three POWER9 cores
+# have a temperature greater than 115 degrees Celcius.
+
+
+- name: core sensors
+ description: >
+ 'Blackbird has one POWER9 chips with up to 24 cores.'
+ 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
+
+- 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
+
+- name: log and shutdown
+ description: >
+ 'Shut the system down and log an event.'
+ class: callback
+ callback: group
+ members:
+ - shutdown
+ - log
+ - 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: log
+ description: >
+ 'Log a shutdown event to the systemd journal.'
+ class: callback
+ callback: journal
+ paths: core sensors
+ properties: core temp
+ severity: ERR
+ message: The system is too hot. Shutting down.
+
+- name: create criticalhigh error
+ description: >
+ 'Create a CriticalHigh Error log.'
+ class: callback
+ callback: elog
+ paths: core sensors
+ properties: core temp
+ error: xyz::openbmc_project::Sensor::Threshold::Error::CriticalHigh
+ metadata:
+ - name: xyz::openbmc_project::Sensor::Threshold::CriticalHigh::SENSOR_TYPE
+ value: temperature
+ type: string
+
+- 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
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-events-config-native.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-events-config-native.bbappend
new file mode 100644
index 000000000..72d991c7e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-events-config-native.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-events-config-native/events.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-events-config-native/events.yaml
new file mode 100644
index 000000000..131b844be
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-events-config-native/events.yaml
@@ -0,0 +1,560 @@
+groups:
+ - name: air_cooled_zone0_fans
+ description: Group of fan inventory objects for air cooled zone 0
+ type: /xyz/openbmc_project/inventory
+ members:
+ - /system/chassis/motherboard/fan2
+ - name: water_and_air_cooled_zone0_fans
+ description: Group of fan inventory objects for water/air cooled zone 0
+ type: /xyz/openbmc_project/inventory
+ members:
+ - /system/chassis/motherboard/fan2
+ - name: air_cooled_zone2_fans
+ description: Group of fan inventory objects for air cooled zone 2
+ type: /xyz/openbmc_project/inventory
+ members:
+ - /system/chassis/motherboard/fan0
+ - name: water_and_air_cooled_zone2_fans
+ description: Group of fan inventory objects for water/air cooled zone 2
+ type: /xyz/openbmc_project/inventory
+ members:
+ - /system/chassis/motherboard/fan0
+ - name: zone2_ambient
+ description: Group of ambient temperature sensors for zone 2
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/ambient
+ - /temperature/cpu_1_ambient
+ - /temperature/pcie
+ - name: occ0_object
+ description: Dbus object containing OCC0 properties
+ type: /org/open_power/control
+ members:
+ - /occ0
+ - name: zone0_cores
+ description: Group of core temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/p0_core0_temp
+ - /temperature/p0_core1_temp
+ - /temperature/p0_core2_temp
+ - /temperature/p0_core3_temp
+ - /temperature/p0_core4_temp
+ - /temperature/p0_core5_temp
+ - /temperature/p0_core6_temp
+ - /temperature/p0_core7_temp
+ - /temperature/p0_core8_temp
+ - /temperature/p0_core9_temp
+ - /temperature/p0_core10_temp
+ - /temperature/p0_core11_temp
+ - /temperature/p0_core12_temp
+ - /temperature/p0_core13_temp
+ - /temperature/p0_core14_temp
+ - /temperature/p0_core15_temp
+ - /temperature/p0_core16_temp
+ - /temperature/p0_core17_temp
+ - /temperature/p0_core18_temp
+ - /temperature/p0_core19_temp
+ - /temperature/p0_core20_temp
+ - /temperature/p0_core21_temp
+ - /temperature/p0_core22_temp
+ - /temperature/p0_core23_temp
+ - name: zone0_regulators
+ description: Group of regulator temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/p0_vdd_temp
+ - name: zone0_dimms
+ description: Group of dimm temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/dimm0_temp
+ - /temperature/dimm1_temp
+ - /temperature/dimm2_temp
+ - /temperature/dimm3_temp
+ - /temperature/dimm4_temp
+ - /temperature/dimm5_temp
+ - /temperature/dimm6_temp
+ - /temperature/dimm7_temp
+ - name: zone0_pcie
+ description: Group of pcie temperature sensors for zone 0
+ type: /xyz/openbmc_project/sensors
+ members:
+ - /temperature/pcie
+
+matches:
+ - name: propertiesChanged
+ description: >
+ A property changed match
+ parameters:
+ - object
+ - interface
+ signal: propertySignal
+ - name: interfacesAdded
+ description: >
+ An interfaces added match
+ parameters:
+ - object
+ signal: objectSignal
+ - name: interfacesRemoved
+ description: >
+ An interfaces removed match
+ parameters:
+ - object
+ signal: objectSignal
+ - name: nameOwnerChanged
+ description: >
+ A name owner changed match
+ parameters:
+ - object
+ - interface
+ signal: ownerSignal
+
+signals:
+ - name: propertySignal
+ description: >
+ Handle property signals
+ parameters:
+ - type
+ - object
+ - interface
+ - property
+ handler: setProperty
+ - name: objectSignal
+ description: >
+ Handle object signals
+ parameters:
+ - type
+ - object
+ - interface
+ - property
+ handler: setProperty
+ - name: ownerSignal
+ description: >
+ Handle owner signals
+ parameters:
+ - object
+ - interface
+ handler: setService
+
+handlers:
+ - name: setProperty
+ description: >
+ Sets a value for the given object/interface/property
+ parameters:
+ - type
+ - object
+ - interface
+ - property
+ - name: setService
+ description: >
+ Sets the service name(s) for the given group
+ parameters:
+ - group
+
+preconditions:
+ - name: property_states_match
+ description: >
+ All defined properties must match the values given to
+ enable a set speed event otherwise fan speeds are set to full
+ parameters:
+ - groups
+
+actions:
+ - name: call_actions_based_on_timer
+ description: >
+ Sets up a list of actions to be invoked when the defined timer
+ expires (or for each expiration of a repeating timer)
+ parameters:
+ - timer
+ - actions
+ - name: default_floor_on_missing_owner
+ description: >
+ Set the fan floor to the default floor
+ - name: set_speed_on_missing_owner
+ description: >
+ Set fans to the given speed when any service within the group
+ no longer exists
+ parameters:
+ - speed
+ - name: set_request_speed_base_with_max
+ description: >
+ Set the base request speed of a zone to the max value of a group for
+ calculating a new target speed
+ - name: count_state_before_speed
+ description: Set the speed when a number of properties at a state
+ parameters:
+ - count
+ - property
+ - speed
+ - name: set_floor_from_average_sensor_value
+ description: Set floor speed from first entry with average less than key
+ parameters:
+ - map
+ - name: set_ceiling_from_average_sensor_value
+ description: Set ceiling speed based on key transition values with average
+ parameters:
+ - map
+ - name: set_net_increase_speed
+ description: >
+ Set the speed increase delta based on a factor applied to
+ the delta increase size times the given value and property's
+ value difference
+ parameters:
+ - property
+ - factor
+ - delta
+ - name: set_net_decrease_speed
+ description: >
+ Set the speed decrease delta based on a factor applied to
+ the delta decrease size times the given value and property's
+ value difference
+ parameters:
+ - property
+ - factor
+ - delta
+ - name: run_pid_control
+ description: >
+ Runs PID control trying to keep value at property
+ parameters:
+ - property
+ - integrator_timestep
+ - kp
+ - ki
+ - kd
+
+events:
+ - name: default_fan_floor_on_service_fail
+ # No global zone conditions defined == all unless defined on group
+ groups:
+ - name: zone2_ambient
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ matches:
+ - name: nameOwnerChanged
+ actions:
+ - name: call_actions_based_on_timer
+ timer:
+ delay: 5
+ type: oneshot
+ actions:
+ - name: default_floor_on_missing_owner
+ - name: missing_before_high_speed_air_zone0
+ groups:
+ - name: air_cooled_zone0_fans
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Inventory.Item
+ property:
+ name: Present
+ type: bool
+ matches:
+ - name: propertiesChanged
+ actions:
+ - name: count_state_before_speed
+ count: 1
+ property:
+ value: false
+ type: bool
+ speed:
+ value: 1000
+ type: uint64_t
+ - name: fails_before_high_speed_air_zone0
+ groups:
+ - name: air_cooled_zone0_fans
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ property:
+ name: Functional
+ type: bool
+ matches:
+ - name: propertiesChanged
+ actions:
+ - name: count_state_before_speed
+ count: 1
+ property:
+ value: false
+ type: bool
+ speed:
+ value: 1000
+ type: uint64_t
+ - name: missing_before_high_speed_water_and_air_zone0
+ groups:
+ - name: water_and_air_cooled_zone0_fans
+ zone_conditions:
+ - name: water_and_air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Inventory.Item
+ property:
+ name: Present
+ type: bool
+ matches:
+ - name: propertiesChanged
+ actions:
+ - name: count_state_before_speed
+ count: 1
+ property:
+ value: false
+ type: bool
+ speed:
+ value: 1000
+ type: uint64_t
+ - name: fails_before_high_speed_water_and_air_zone0
+ groups:
+ - name: water_and_air_cooled_zone0_fans
+ zone_conditions:
+ - name: water_and_air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+ property:
+ name: Functional
+ type: bool
+ matches:
+ - name: propertiesChanged
+ actions:
+ - name: count_state_before_speed
+ count: 1
+ property:
+ value: false
+ type: bool
+ speed:
+ value: 1000
+ type: uint64_t
+ - name: set_air_cooled_speed_boundaries_based_on_ambient
+ groups:
+ - name: zone2_ambient
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 2
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ matches:
+ - name: propertiesChanged
+ actions:
+ - name: set_floor_from_average_sensor_value
+ map:
+ value:
+ - 22000: 100
+ type: std::map<int64_t, uint64_t>
+ - name: set_ceiling_from_average_sensor_value
+ map:
+ value:
+ - 27000: 1000
+ type: std::map<int64_t, uint64_t>
+ - name: set_water_cooled_speed_boundaries_based_on_ambient
+ groups:
+ - name: zone2_ambient
+ zone_conditions:
+ - name: water_and_air_cooled_chassis
+ zones:
+ - 2
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ matches:
+ - name: propertiesChanged
+ actions:
+ - name: set_floor_from_average_sensor_value
+ map:
+ value:
+ - 22000: 250
+ type: std::map<int64_t, uint64_t>
+ - name: set_ceiling_from_average_sensor_value
+ map:
+ value:
+ - 27000: 1000
+ type: std::map<int64_t, uint64_t>
+ - name: speed_changes_based_on_regulator_temps
+ groups:
+ - name: zone0_regulators
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ - name: water_and_air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ matches:
+ - name: interfacesAdded
+ - name: propertiesChanged
+ actions:
+ - name: set_net_increase_speed
+ property:
+ value: 85000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 40
+ type: uint64_t
+ timer:
+ interval: 5
+ - name: occ_active_speed_changes_zone0
+ precondition:
+ name: property_states_match
+ groups:
+ - name: occ0_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ value: true
+ matches:
+ - name: interfacesAdded
+ - name: propertiesChanged
+ events:
+ - name: speed_changes_based_on_core_temps_zone0
+ groups:
+ - name: zone0_cores
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ matches:
+ - name: interfacesAdded
+ - name: propertiesChanged
+ actions:
+ - name: run_pid_control
+ property:
+ value: 63000
+ type: int64_t
+ integrator_timestep:
+ value: 1
+ type: int64_t
+ kp:
+ value: 3500
+ type: int64_t
+ ki:
+ value: 100
+ type: int64_t
+ kd:
+ value: 0
+ type: int64_t
+ # Ensure PID values are always translated out to hardware
+ # This do-nothing "speed increase" is always called on every loop invocation
+ - name: set_net_increase_speed
+ property:
+ value: 0
+ type: int64_t
+ factor:
+ value: 0
+ type: int64_t
+ delta:
+ value: 0
+ type: uint64_t
+ timer:
+ interval: 5
+ - name: speed_changes_based_on_dimm_temps_zone0
+ groups:
+ - name: zone0_dimms
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 0
+ - name: water_and_air_cooled_chassis
+ zones:
+ - 0
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ matches:
+ - name: interfacesAdded
+ - name: propertiesChanged
+ actions:
+ - name: set_net_increase_speed
+ property:
+ value: 64000
+ type: int64_t
+ factor:
+ value: 1000
+ type: int64_t
+ delta:
+ value: 4
+ type: uint64_t
+ timer:
+ interval: 5
+ - name: occ_active_speed_changes_zone2
+ precondition:
+ name: property_states_match
+ groups:
+ - name: occ0_object
+ interface: org.open_power.OCC.Status
+ property:
+ name: OccActive
+ type: bool
+ value: true
+ matches:
+ - name: interfacesAdded
+ - name: propertiesChanged
+ events:
+ - name: speed_changes_based_on_ambient_temp
+ groups:
+ - name: zone2_ambient
+ zone_conditions:
+ - name: air_cooled_chassis
+ zones:
+ - 2
+ - name: water_and_air_cooled_chassis
+ zones:
+ - 2
+ interface: xyz.openbmc_project.Sensor.Value
+ property:
+ name: Value
+ type: int64_t
+ matches:
+ - name: interfacesAdded
+ - name: propertiesChanged
+ actions:
+ - name: run_pid_control
+ property:
+ value: 42000
+ type: int64_t
+ integrator_timestep:
+ value: 1
+ type: int64_t
+ kp:
+ value: 2500
+ type: int64_t
+ ki:
+ value: 50
+ type: int64_t
+ kd:
+ value: 0
+ type: int64_t
+ # Ensure PID values are always translated out to hardware
+ # This do-nothing "speed increase" is always called on every loop invocation
+ - name: set_net_increase_speed
+ property:
+ value: 0
+ type: int64_t
+ factor:
+ value: 0
+ type: int64_t
+ delta:
+ value: 0
+ type: uint64_t
+ timer:
+ interval: 5
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-fan-config-native.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-fan-config-native.bbappend
new file mode 100644
index 000000000..72d991c7e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-fan-config-native.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-fan-config-native/fans.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-fan-config-native/fans.yaml
new file mode 100755
index 000000000..824ad5717
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-fan-config-native/fans.yaml
@@ -0,0 +1,13 @@
+fans:
+ - inventory: /system/chassis/motherboard/fan2
+ cooling_zone: 0
+ cooling_profile: all
+ sensors:
+ - fan2
+ target_interface: xyz.openbmc_project.Control.FanSpeed
+ - inventory: /system/chassis/motherboard/fan0
+ cooling_zone: 2
+ cooling_profile: all
+ sensors:
+ - fan0
+ target_interface: xyz.openbmc_project.Control.FanSpeed
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native.bbappend
new file mode 100644
index 000000000..72d991c7e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native/zone_conditions.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native/zone_conditions.yaml
new file mode 100644
index 000000000..0c8b3c5ff
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native/zone_conditions.yaml
@@ -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
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-config-native.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-config-native.bbappend
new file mode 100644
index 000000000..6d4804d12
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-config-native.bbappend
@@ -0,0 +1,2 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-config-native/zones.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-config-native/zones.yaml
new file mode 100644
index 000000000..3aed2dfdb
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-control-zone-config-native/zones.yaml
@@ -0,0 +1,48 @@
+manager_configuration:
+ power_on_delay: 5
+
+zone_configuration:
+
+#Air cooled zones
+- zone_conditions:
+ - name: air_cooled_chassis
+
+ zones:
+ - zone: 0
+ cooling_profiles:
+ - air
+ - all
+ full_speed: 1000
+ default_floor: 100
+ increase_delay: 5
+ decrease_interval: 5
+ - zone: 2
+ cooling_profiles:
+ - air
+ - all
+ full_speed: 1000
+ default_floor: 100
+ increase_delay: 5
+ decrease_interval: 5
+
+#Water cooled zones
+- zone_conditions:
+ - name: water_and_air_cooled_chassis
+
+ zones:
+ - zone: 0
+ cooling_profiles:
+ - water
+ - all
+ full_speed: 1000
+ default_floor: 100
+ increase_delay: 5
+ decrease_interval: 5
+ - zone: 2
+ cooling_profiles:
+ - water
+ - all
+ full_speed: 1000
+ default_floor: 100
+ increase_delay: 5
+ decrease_interval: 5
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-monitor-config-native.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-monitor-config-native.bbappend
new file mode 100644
index 000000000..72d991c7e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-monitor-config-native.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml
new file mode 100644
index 000000000..504918ab4
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml
@@ -0,0 +1,37 @@
+fans:
+ - inventory: /system/chassis/motherboard/fan0
+ functional_delay: 5
+ allowed_out_of_range_time: 30
+ deviation: -500
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan0
+ has_target: true
+ target_interface: xyz.openbmc_project.Control.FanSpeed
+
+ - inventory: /system/chassis/motherboard/fan1
+ functional_delay: 5
+ allowed_out_of_range_time: 30
+ deviation: -500
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan1
+ has_target: true
+ target_interface: xyz.openbmc_project.Control.FanSpeed
+
+ - inventory: /system/chassis/motherboard/fan2
+ functional_delay: 5
+ allowed_out_of_range_time: 30
+ deviation: -500
+ num_sensors_nonfunc_for_fan_nonfunc: 1
+ sensors:
+ - name: fan2
+ has_target: true
+ target_interface: xyz.openbmc_project.Control.FanSpeed
+
+sensor_trust_groups:
+ - class: NonzeroSpeed
+ group:
+ - name: fan0
+ - name: fan1
+ - name: fan2
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-presence-config-native.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-presence-config-native.bbappend
new file mode 100644
index 000000000..72d991c7e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-presence-config-native.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-presence-config-native/config.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-presence-config-native/config.yaml
new file mode 100644
index 000000000..7b993de82
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan-presence-config-native/config.yaml
@@ -0,0 +1,26 @@
+- name: fan0
+ path: /system/chassis/motherboard/fan0
+ methods:
+ - type: tach
+ sensors:
+ - fan0
+ rpolicy:
+ type: anyof
+
+- name: fan1
+ path: /system/chassis/motherboard/fan1
+ methods:
+ - type: tach
+ sensors:
+ - fan1
+ rpolicy:
+ type: anyof
+
+- name: fan2
+ path: /system/chassis/motherboard/fan2
+ methods:
+ - type: tach
+ sensors:
+ - fan2
+ rpolicy:
+ type: anyof
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/fan-watchdog-conflicts.conf b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/fan-watchdog-conflicts.conf
new file mode 100644
index 000000000..90b1e810e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/fan-watchdog-conflicts.conf
@@ -0,0 +1,2 @@
+[Unit]
+Conflicts=obmc-fan-watchdog-takeover.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/fan-watchdog-monitor.conf b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/fan-watchdog-monitor.conf
new file mode 100644
index 000000000..9a9cd42a9
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/fan-watchdog-monitor.conf
@@ -0,0 +1,5 @@
+[Unit]
+#These overrides allow the fan watchdog to take over when this service dies
+OnFailure=blackbird-fan-watchdog-monitor@%n.service
+StartLimitIntervalSec=5
+StartLimitBurst=3
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/obmc/phosphor-fan/phosphor-cooling-type-0.conf b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/obmc/phosphor-fan/phosphor-cooling-type-0.conf
new file mode 100644
index 000000000..6b74301d1
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/obmc/phosphor-fan/phosphor-cooling-type-0.conf
@@ -0,0 +1,6 @@
+OBJPATH="--path=/system/chassis"
+AIR="--air"
+WATER=""
+DEVICE=""
+CODE=""
+
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/phosphor-cooling-type@.service b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/phosphor-cooling-type@.service
new file mode 100644
index 000000000..c1f5ae293
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan/phosphor-cooling-type@.service
@@ -0,0 +1,15 @@
+[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/env phosphor-cooling-type ${{OBJPATH}} ${{AIR}} ${{WATER}} ${{DEVICE}} ${{CODE}}
+SyslogIdentifier=phosphor-cooling-type
+
+[Install]
+RequiredBy=multi-user.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan_%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan_%.bbappend
new file mode 100644
index 000000000..36751c29a
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/fans/phosphor-fan_%.bbappend
@@ -0,0 +1,33 @@
+FILESEXTRAPATHS_append := "${THISDIR}/${PN}:"
+
+# Package configuration
+FAN_PACKAGES += " \
+ phosphor-cooling-type \
+"
+
+PACKAGECONFIG += "cooling-type"
+
+RDEPENDS_phosphor-cooling-type += "libevdev"
+
+TMPL_COOLING = "phosphor-cooling-type@.service"
+INSTFMT_COOLING = "phosphor-cooling-type@{0}.service"
+COOLING_TGT = "multi-user.target"
+FMT_COOLING = "../${TMPL_COOLING}:${COOLING_TGT}.requires/${INSTFMT_COOLING}"
+
+FILES_phosphor-cooling-type = "${sbindir}/phosphor-cooling-type"
+SYSTEMD_SERVICE_phosphor-cooling-type += "${TMPL_COOLING}"
+SYSTEMD_LINK_phosphor-cooling-type += "${@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 += "${@compose_list(d, 'COOLING_ENV_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+
+#These services are protected by the watchdog
+SYSTEMD_OVERRIDE_phosphor-fan-control += "fan-watchdog-monitor.conf:phosphor-fan-control-init@0.service.d/fan-watchdog-monitor.conf"
+SYSTEMD_OVERRIDE_phosphor-fan-control += "fan-watchdog-monitor.conf:phosphor-fan-control@0.service.d/fan-watchdog-monitor.conf"
+SYSTEMD_OVERRIDE_phosphor-fan-monitor += "fan-watchdog-monitor.conf:phosphor-fan-monitor-init@0.service.d/fan-watchdog-monitor.conf"
+SYSTEMD_OVERRIDE_phosphor-fan-monitor += "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 += "fan-watchdog-conflicts.conf:phosphor-fan-control@0.service.d/fan-watchdog-conflicts.conf"
+SYSTEMD_OVERRIDE_phosphor-fan-monitor += "fan-watchdog-conflicts.conf:phosphor-fan-monitor@0.service.d/fan-watchdog-conflicts.conf"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/flash/phosphor-software-manager_%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/flash/phosphor-software-manager_%.bbappend
new file mode 100644
index 000000000..c92b1a89c
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/flash/phosphor-software-manager_%.bbappend
@@ -0,0 +1 @@
+PACKAGECONFIG_append = " verify_signature"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button.bb b/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button.bb
new file mode 100644
index 000000000..5cee2de97
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Blackbird ID Button pressed application"
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit obmc-phosphor-systemd
+
+DEPENDS += "virtual/obmc-gpio-monitor"
+RDEPENDS_${PN} += "virtual/obmc-gpio-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')}"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/id-button-pressed.service b/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/id-button-pressed.service
new file mode 100644
index 000000000..f633fc307
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/id-button-pressed.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=ID Button Pressed Service
+Wants=mapper-wait@-xyz-openbmc_project-led-groups.service
+After=mapper-wait@-xyz-openbmc_project-led-groups.service
+StartLimitIntervalSec=0
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/env toggle_identify_led.sh
+SyslogIdentifier=id-button
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/obmc/gpio/id_button b/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/obmc/gpio/id_button
new file mode 100644
index 000000000..b1963573f
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/obmc/gpio/id_button
@@ -0,0 +1,5 @@
+DEVPATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=135
+POLARITY=1
+TARGET=id-button-pressed.service
+EXTRA_ARGS=--continue
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/toggle_identify_led.sh b/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/toggle_identify_led.sh
new file mode 100755
index 000000000..eec96d3f1
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/gpio/id-button/toggle_identify_led.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+# Toggle the state of identify LED Group
+
+SERVICE="xyz.openbmc_project.LED.GroupManager"
+INTERFACE="xyz.openbmc_project.Led.Group"
+PROPERTY="Asserted"
+
+# Get current state
+object=$(busctl tree $SERVICE --list | grep identify)
+state=$(busctl get-property $SERVICE $object $INTERFACE $PROPERTY \
+ | awk '{print $NF;}')
+
+if [ "$state" == "false" ]; then
+ target='true'
+else
+ target='false'
+fi
+
+# Set target state
+busctl set-property $SERVICE $object $INTERFACE $PROPERTY b $target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/host/p9-host-start.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/host/p9-host-start.bbappend
new file mode 100644
index 000000000..cd7c978f6
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/host/p9-host-start.bbappend
@@ -0,0 +1,4 @@
+RDEPENDS_${PN} += 'avsbus-control'
+RDEPENDS_${PN} += 'vrm-control'
+RDEPENDS_${PN} += 'fpga-config'
+RDEPENDS_${PN} += 'lvds-config'
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/images/obmc-phosphor-image.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/images/obmc-phosphor-image.bbappend
new file mode 100644
index 000000000..772685db7
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/images/obmc-phosphor-image.bbappend
@@ -0,0 +1 @@
+OBMC_IMAGE_EXTRA_INSTALL_append = " mboxd liberation-fonts uart-render-controller"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-fru-read-inventory-native.bb b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-fru-read-inventory-native.bb
new file mode 100644
index 000000000..1b8347717
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-fru-read-inventory-native.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Blackbird inventory map for phosphor-ipmi-host"
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit native
+inherit phosphor-ipmi-host
+
+SRC_URI += "file://config.yaml"
+
+PROVIDES += "virtual/phosphor-ipmi-fru-read-inventory"
+
+S = "${WORKDIR}"
+
+do_install() {
+ DEST=${D}${config_datadir}
+ install -d ${DEST}
+ install config.yaml ${DEST}
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-inventory-map-native.bb b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-inventory-map-native.bb
new file mode 100644
index 000000000..c0620ff5d
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-inventory-map-native.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Romulus IPMI to DBus Inventory mapping."
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit native
+inherit phosphor-ipmi-fru
+
+SRC_URI += "file://config.yaml"
+
+PROVIDES += "virtual/phosphor-ipmi-fru-inventory"
+
+S = "${WORKDIR}"
+
+do_install() {
+ # TODO: install this to inventory_datadir
+ # after ipmi-fru-parser untangles the host
+ # firmware config from the machine inventory.
+ DEST=${D}${config_datadir}
+
+ install -d ${DEST}
+ install config.yaml ${DEST}
+}
+
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-inventory-sel-native.bb b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-inventory-sel-native.bb
new file mode 100644
index 000000000..a49af397b
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/blackbird-ipmi-inventory-sel-native.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Inventory to Sensor config for Blackbird"
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit native
+inherit phosphor-ipmi-host
+
+PROVIDES += "virtual/phosphor-ipmi-inventory-sel"
+
+SRC_URI += "file://sel-config.yaml"
+
+S = "${WORKDIR}"
+
+do_install() {
+ DEST=${D}${sensor_datadir}
+ install -d ${DEST}
+ install sel-config.yaml ${DEST}/invsensor.yaml
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/files/config.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/files/config.yaml
new file mode 100644
index 000000000..de2e81474
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/files/config.yaml
@@ -0,0 +1,538 @@
+1:
+ /system/chassis/motherboard/cpu0:
+ entityID: 3
+ entityInstance: 1
+ interfaces:
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Custom Field 2
+ IPMIFruSection: Board
+ IPMIFruValueDelimiter: 58
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Board
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Board
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Board
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Board
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Board
+2:
+ /system/chassis/motherboard/cpu1:
+ entityID: 3
+ entityInstance: 2
+ interfaces:
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Custom Field 2
+ IPMIFruSection: Board
+ IPMIFruValueDelimiter: 58
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Board
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Board
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Board
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Board
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Board
+ Value: False
+3:
+ /system/chassis/motherboard:
+ entityID: 7
+ entityInstance: 1
+ interfaces:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Board
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Board
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Board
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Board
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Board
+ /system:
+ entityID: 7
+ entityInstance: 1
+ interfaces:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Chassis
+ Model:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Chassis
+
+
+4:
+ /system/chassis/motherboard/dimm0:
+ entityID: 32
+ entityInstance: 1
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+5:
+ /system/chassis/motherboard/dimm1:
+ entityID: 32
+ entityInstance: 2
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+6:
+ /system/chassis/motherboard/dimm2:
+ entityID: 32
+ entityInstance: 3
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+7:
+ /system/chassis/motherboard/dimm3:
+ entityID: 32
+ entityInstance: 4
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+8:
+ /system/chassis/motherboard/dimm4:
+ entityID: 32
+ entityInstance: 5
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+9:
+ /system/chassis/motherboard/dimm5:
+ entityID: 32
+ entityInstance: 6
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+10:
+ /system/chassis/motherboard/dimm6:
+ entityID: 32
+ entityInstance: 7
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+11:
+ /system/chassis/motherboard/dimm7:
+ entityID: 32
+ entityInstance: 8
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+12:
+ /system/chassis/motherboard/dimm8:
+ entityID: 32
+ entityInstance: 9
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+13:
+ /system/chassis/motherboard/dimm9:
+ entityID: 32
+ entityInstance: 10
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+14:
+ /system/chassis/motherboard/dimm10:
+ entityID: 32
+ entityInstance: 11
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+15:
+ /system/chassis/motherboard/dimm11:
+ entityID: 32
+ entityInstance: 12
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+16:
+ /system/chassis/motherboard/dimm12:
+ entityID: 32
+ entityInstance: 13
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+17:
+ /system/chassis/motherboard/dimm13:
+ entityID: 32
+ entityInstance: 14
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+18:
+ /system/chassis/motherboard/dimm14:
+ entityID: 32
+ entityInstance: 15
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
+19:
+ /system/chassis/motherboard/dimm15:
+ entityID: 32
+ entityInstance: 16
+ interfaces:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Name
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFruProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFruProperty: Manufacturer
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFruProperty: Part Number
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFruProperty: Mfg Date
+ IPMIFruSection: Product
+ Model:
+ IPMIFruProperty: Model Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Decorator.Revision:
+ Version:
+ IPMIFruProperty: Version
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/files/sel-config.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/files/sel-config.yaml
new file mode 100755
index 000000000..9a5189a6e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/files/sel-config.yaml
@@ -0,0 +1,340 @@
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0:
+ sensorID: 0x0B
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1:
+ sensorID: 0x0C
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm10:
+ sensorID: 0x15
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm11:
+ sensorID: 0x16
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm12:
+ sensorID: 0x17
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm13:
+ sensorID: 0x18
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm14:
+ sensorID: 0x19
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm15:
+ sensorID: 0x1A
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm2:
+ sensorID: 0x0D
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm3:
+ sensorID: 0x0E
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm4:
+ sensorID: 0x0F
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm5:
+ sensorID: 0x10
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm6:
+ sensorID: 0x11
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm7:
+ sensorID: 0x12
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm8:
+ sensorID: 0x13
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm9:
+ sensorID: 0x14
+ sensorType: 0x0C
+ eventReadingType: 0x6F
+ offset: 0x04
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0:
+ sensorID: 0x08
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core0:
+ sensorID: 0x2B
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core1:
+ sensorID: 0x2C
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core2:
+ sensorID: 0x2D
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core3:
+ sensorID: 0x2E
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core4:
+ sensorID: 0x2F
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core5:
+ sensorID: 0x30
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core6:
+ sensorID: 0x31
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core7:
+ sensorID: 0x32
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core8:
+ sensorID: 0x33
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core9:
+ sensorID: 0x34
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core10:
+ sensorID: 0x35
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core11:
+ sensorID: 0x36
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core12:
+ sensorID: 0x37
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core13:
+ sensorID: 0x38
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core14:
+ sensorID: 0x39
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core15:
+ sensorID: 0x3A
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core16:
+ sensorID: 0x3B
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core17:
+ sensorID: 0x3C
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core18:
+ sensorID: 0x3D
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core19:
+ sensorID: 0x3E
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core20:
+ sensorID: 0x3F
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core21:
+ sensorID: 0x40
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core22:
+ sensorID: 0x41
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core23:
+ sensorID: 0x42
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1:
+ sensorID: 0x09
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core0:
+ sensorID: 0x43
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core1:
+ sensorID: 0x44
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core2:
+ sensorID: 0x45
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core3:
+ sensorID: 0x46
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core4:
+ sensorID: 0x47
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core5:
+ sensorID: 0x48
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core6:
+ sensorID: 0x49
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core7:
+ sensorID: 0x4A
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core8:
+ sensorID: 0x4B
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core9:
+ sensorID: 0x4C
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core10:
+ sensorID: 0x4D
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core11:
+ sensorID: 0x4E
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core12:
+ sensorID: 0x4F
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core13:
+ sensorID: 0x50
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core14:
+ sensorID: 0x51
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core15:
+ sensorID: 0x52
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core16:
+ sensorID: 0x53
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core17:
+ sensorID: 0x54
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core18:
+ sensorID: 0x55
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core19:
+ sensorID: 0x56
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core20:
+ sensorID: 0x57
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core21:
+ sensorID: 0x58
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core22:
+ sensorID: 0x59
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core23:
+ sensorID: 0x5A
+ sensorType: 0x07
+ eventReadingType: 0x6F
+ offset: 0x08
+/xyz/openbmc_project/inventory/system/chassis/motherboard:
+ sensorID: 0x8C
+ sensorType: 0xC7
+ eventReadingType: 0x03
+ offset: 0x00
+/xyz/openbmc_project/inventory/system:
+ sensorID: 0x90
+ sensorType: 0x12
+ eventReadingType: 0x6F
+ offset: 0x02
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend
new file mode 100644
index 000000000..05a95346f
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend
@@ -0,0 +1,45 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+# Calculate the auxiliary firmware revision to be updated in the dev_id.json
+# file. It is calculated from the VERSION_ID field which currently has two
+# formats. The revision field is 4 bytes, the first two bytes represent the
+# count of commits from the tagging and next two bytes represent the version.
+# Both fields are represented in BCD encoded format, so 9999 is the maximum
+# value both fields can take. With the format "v2.1-216-ga78ace8", Petitboot
+# would display the firmware revision as "Firmware version: 2.01.02160000",
+# "0216" is count and the revision is "0000". With the format
+# "ibm-v2.0-10-r41-0-gd0c319e" Petitboot would display the firmware revision
+# as "Firmware version: 2.00.00100041", "0010" is count and the revision
+# is "0041".
+inherit image_version
+
+unset do_patch[noexec]
+do_patch[depends] = "os-release:do_populate_sysroot"
+
+python do_patch() {
+ import json
+ import re
+ from shutil import copyfile
+ version_id = do_get_version(d)
+
+ # count from the commit version
+ count = re.findall("-(\d{1,4})-", version_id)
+
+ #release = re.findall("-r(\d{1,4})", version_id)
+ #if release:
+ # auxVer = count[0] + "{0:0>4}".format(release[0])
+ #else:
+ # auxVer = count[0] + "0000"
+ auxVer = "00000"
+
+ workdir = d.getVar('WORKDIR', True)
+ file = os.path.join(workdir, 'dev_id.json')
+
+ # Update dev_id.json with the auxiliary firmware revision
+ with open(file, "r+") as jsonFile:
+ data = json.load(jsonFile)
+ jsonFile.seek(0)
+ jsonFile.truncate()
+ data["aux"] = int(auxVer, 16)
+ json.dump(data, jsonFile)
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/dcmi_sensors.json b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/dcmi_sensors.json
new file mode 100644
index 000000000..56170bf48
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/dcmi_sensors.json
@@ -0,0 +1,59 @@
+{
+ "inlet": [
+ {"instance": 1, "dbus": "/xyz/openbmc_project/sensors/temperature/ambient", "record_id": 254}
+ ],
+ "baseboard": [
+ {"instance": 1, "dbus": "/xyz/openbmc_project/sensors/temperature/pcie", "record_id": 253}
+ {"instance": 1, "dbus": "/xyz/openbmc_project/sensors/temperature/cpu_1_ambient", "record_id": 252}
+ ],
+ "cpu": [
+ {"instance": 1, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core0_temp", "record_id": 17},
+ {"instance": 2, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core1_temp", "record_id": 20},
+ {"instance": 3, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core2_temp", "record_id": 23},
+ {"instance": 4, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core3_temp", "record_id": 26},
+ {"instance": 5, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core4_temp", "record_id": 29},
+ {"instance": 6, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core5_temp", "record_id": 32},
+ {"instance": 7, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core6_temp", "record_id": 35},
+ {"instance": 8, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core7_temp", "record_id": 38},
+ {"instance": 9, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core8_temp", "record_id": 41},
+ {"instance": 10, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core9_temp", "record_id": 44},
+ {"instance": 11, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core10_temp", "record_id": 47},
+ {"instance": 12, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core11_temp", "record_id": 50},
+ {"instance": 13, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core12_temp", "record_id": 53},
+ {"instance": 14, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core13_temp", "record_id": 56},
+ {"instance": 15, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core14_temp", "record_id": 59},
+ {"instance": 16, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core15_temp", "record_id": 62},
+ {"instance": 17, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core16_temp", "record_id": 65},
+ {"instance": 18, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core17_temp", "record_id": 68},
+ {"instance": 19, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core18_temp", "record_id": 71},
+ {"instance": 20, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core19_temp", "record_id": 74},
+ {"instance": 21, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core20_temp", "record_id": 77},
+ {"instance": 22, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core21_temp", "record_id": 80},
+ {"instance": 23, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core22_temp", "record_id": 83},
+ {"instance": 24, "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core23_temp", "record_id": 86},
+ {"instance": 25, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core0_temp", "record_id": 91},
+ {"instance": 26, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core1_temp", "record_id": 94},
+ {"instance": 27, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core2_temp", "record_id": 97},
+ {"instance": 28, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core3_temp", "record_id": 100},
+ {"instance": 29, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core4_temp", "record_id": 103},
+ {"instance": 30, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core5_temp", "record_id": 106},
+ {"instance": 31, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core6_temp", "record_id": 109},
+ {"instance": 32, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core7_temp", "record_id": 112},
+ {"instance": 33, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core8_temp", "record_id": 115},
+ {"instance": 34, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core9_temp", "record_id": 118},
+ {"instance": 35, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core10_temp", "record_id": 121},
+ {"instance": 36, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core11_temp", "record_id": 124},
+ {"instance": 37, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core12_temp", "record_id": 127},
+ {"instance": 38, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core13_temp", "record_id": 130},
+ {"instance": 39, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core14_temp", "record_id": 133},
+ {"instance": 40, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core15_temp", "record_id": 136},
+ {"instance": 41, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core16_temp", "record_id": 139},
+ {"instance": 42, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core17_temp", "record_id": 142},
+ {"instance": 43, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core18_temp", "record_id": 145},
+ {"instance": 44, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core19_temp", "record_id": 148},
+ {"instance": 45, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core20_temp", "record_id": 151},
+ {"instance": 46, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core21_temp", "record_id": 154},
+ {"instance": 47, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core22_temp", "record_id": 157},
+ {"instance": 48, "dbus": "/xyz/openbmc_project/sensors/temperature/p1_core23_temp", "record_id": 160}
+ ]
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/dev_id.json b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/dev_id.json
new file mode 100644
index 000000000..f443fe134
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/dev_id.json
@@ -0,0 +1,2 @@
+{"id": 0, "revision": 128, "addn_dev_support": 141,
+ "manuf_id": 51974, "prod_id": 1, "aux": 0}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/power_reading.json b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/power_reading.json
new file mode 100644
index 000000000..97e8f32b5
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-config/power_reading.json
@@ -0,0 +1,3 @@
+{
+ "path": "/xyz/openbmc_project/sensors/power/total_power"
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-properties%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-properties%.bbappend
new file mode 100644
index 000000000..72d991c7e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-properties%.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-properties%/extra-properties.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-properties%/extra-properties.yaml
new file mode 100644
index 000000000..ae626ed05
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-properties%/extra-properties.yaml
@@ -0,0 +1,159 @@
+/system/chassis/motherboard/cpu0:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/cpu1:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm0:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm1:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm2:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm3:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm4:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm5:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm6:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm7:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm8:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm9:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm10:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm11:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm12:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm13:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm14:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
+
+/system/chassis/motherboard/dimm15:
+ xyz.openbmc_project.Inventory.Decorator.Replaceable:
+ FieldReplaceable: 'true'
+ xyz.openbmc_project.Inventory.Decorator.Cacheable:
+ Cached: 'true'
+ xyz.openbmc_project.Inventory.Item:
+ Present: 'true'
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-read-bmc-inventory%/bmc-fru-config.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-read-bmc-inventory%/bmc-fru-config.yaml
new file mode 100644
index 000000000..c020c51c1
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-fru-read-bmc-inventory%/bmc-fru-config.yaml
@@ -0,0 +1,18 @@
+50:
+ /system/chassis/motherboard/fan0:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Product Name
+ IPMIFruSection: Product
+51:
+ /system/chassis/motherboard/fan1:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Product Name
+ IPMIFruSection: Product
+52:
+ /system/chassis/motherboard/fan2:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruProperty: Product Name
+ IPMIFruSection: Product
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/channel.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/channel.yaml
new file mode 100644
index 000000000..627f4965f
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/channel.yaml
@@ -0,0 +1,4 @@
+# Channel Number (must be unique) is the key
+1:
+ # ifName the ethernet device name (used in the dbus path)
+ ifName: eth0
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/hwmon_sensors.hardcoded.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/hwmon_sensors.hardcoded.yaml
new file mode 100644
index 000000000..fe6d12096
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/hwmon_sensors.hardcoded.yaml
@@ -0,0 +1,1078 @@
+0xa5:
+ entityID: 0x20
+ entityInstance: 1
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm0_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xa7:
+ entityID: 0x20
+ entityInstance: 2
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm1_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xa9:
+ entityID: 0x20
+ entityInstance: 3
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm2_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xab:
+ entityID: 0x20
+ entityInstance: 4
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm3_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xad:
+ entityID: 0x20
+ entityInstance: 5
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm4_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xaf:
+ entityID: 0x20
+ entityInstance: 6
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm5_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xb1:
+ entityID: 0x20
+ entityInstance: 7
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm6_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xb3:
+ entityID: 0x20
+ entityInstance: 8
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm7_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xb5:
+ entityID: 0x20
+ entityInstance: 9
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm8_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xb7:
+ entityID: 0x20
+ entityInstance: 10
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm9_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xb9:
+ entityID: 0x20
+ entityInstance: 11
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm10_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xbb:
+ entityID: 0x20
+ entityInstance: 12
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm11_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xbd:
+ entityID: 0x20
+ entityInstance: 13
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm12_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xbf:
+ entityID: 0x20
+ entityInstance: 14
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm13_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xc1:
+ entityID: 0x20
+ entityInstance: 15
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm14_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xc3:
+ entityID: 0x20
+ entityInstance: 16
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/dimm15_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x11:
+ entityID: 0x03
+ entityInstance: 1
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core0_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+
+0x14:
+ entityID: 0x03
+ entityInstance: 2
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core1_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x17:
+ entityID: 0x03
+ entityInstance: 3
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core2_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x1a:
+ entityID: 0x03
+ entityInstance: 4
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core3_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x1d:
+ entityID: 0x03
+ entityInstance: 5
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core4_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x20:
+ entityID: 0x03
+ entityInstance: 6
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core5_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x23:
+ entityID: 0x03
+ entityInstance: 7
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core6_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x26:
+ entityID: 0x03
+ entityInstance: 8
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core7_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x29:
+ entityID: 0x03
+ entityInstance: 9
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core8_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x2c:
+ entityID: 0x03
+ entityInstance: 10
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core9_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x2f:
+ entityID: 0x03
+ entityInstance: 11
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core10_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x32:
+ entityID: 0x03
+ entityInstance: 12
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core11_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x35:
+ entityID: 0x03
+ entityInstance: 13
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core12_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x38:
+ entityID: 0x03
+ entityInstance: 14
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core13_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x3b:
+ entityID: 0x03
+ entityInstance: 15
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core14_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x3e:
+ entityID: 0x03
+ entityInstance: 16
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core15_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x41:
+ entityID: 0x03
+ entityInstance: 17
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core16_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x44:
+ entityID: 0x03
+ entityInstance: 18
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core17_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+0x47:
+ entityID: 0x03
+ entityInstance: 19
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core18_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x4a:
+ entityID: 0x03
+ entityInstance: 20
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core19_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x4d:
+ entityID: 0x03
+ entityInstance: 21
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core20_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x50:
+ entityID: 0x03
+ entityInstance: 22
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core21_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x53:
+ entityID: 0x03
+ entityInstance: 23
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core22_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0x56:
+ entityID: 0x03
+ entityInstance: 24
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/p0_core23_temp
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: -127
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xe7:
+ entityID: 0x0A
+ entityInstance: 2
+ sensorType: 0x08
+ path: /xyz/openbmc_project/sensors/power/p0_power
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: 0
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
+ scale: -6
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xe8:
+ entityID: 0x0A
+ entityInstance: 2
+ sensorType: 0x08
+ path: /xyz/openbmc_project/sensors/power/p0_vdd_power
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: 0
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
+ scale: -6
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xe9:
+ entityID: 0x0A
+ entityInstance: 2
+ sensorType: 0x08
+ path: /xyz/openbmc_project/sensors/power/p0_vdn_power
+ sensorReadingType: 0x01
+ multiplierM: 1
+ offsetB: 0
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.Watts
+ scale: -6
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xdd:
+ entityID: 0x1D
+ entityInstance: 1
+ sensorType: 0x04
+ path: /xyz/openbmc_project/sensors/fan_tach/fan0
+ sensorReadingType: 0x01
+ multiplierM: 100
+ offsetB: 0
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
+ scale: 0
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xde:
+ entityID: 0x1D
+ entityInstance: 2
+ sensorType: 0x04
+ path: /xyz/openbmc_project/sensors/fan_tach/fan1
+ sensorReadingType: 0x01
+ multiplierM: 100
+ offsetB: 0
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
+ scale: 0
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xdf:
+ entityID: 0x1D
+ entityInstance: 3
+ sensorType: 0x04
+ path: /xyz/openbmc_project/sensors/fan_tach/fan2
+ sensorReadingType: 0x01
+ multiplierM: 100
+ offsetB: 0
+ bExp: 0
+ rExp: 0
+ unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS
+ scale: 0
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xfc:
+ entityID: 0x23
+ entityInstance: 1
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/cpu_1_ambient
+ sensorReadingType: 0x01
+ multiplierM: 30
+ offsetB: 0
+ bExp: 0
+ rExp: -2
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xfd:
+ entityID: 0x23
+ entityInstance: 1
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/pcie
+ sensorReadingType: 0x01
+ multiplierM: 30
+ offsetB: 0
+ bExp: 0
+ rExp: -2
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
+0xfe:
+ entityID: 0x40
+ entityInstance: 1
+ sensorType: 0x01
+ path: /xyz/openbmc_project/sensors/temperature/ambient
+ sensorReadingType: 0x01
+ multiplierM: 20
+ offsetB: 0
+ bExp: 0
+ rExp: -2
+ unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC
+ scale: -3
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingData
+ sensorNamePattern: nameLeaf
+ interfaces:
+ xyz.openbmc_project.Sensor.Value:
+ Value:
+ Offsets:
+ 0xFF:
+ type: int64_t
+
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/occ_sensors.hardcoded.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/occ_sensors.hardcoded.yaml
new file mode 100644
index 000000000..a52a8f042
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host/occ_sensors.hardcoded.yaml
@@ -0,0 +1,44 @@
+0x08:
+ entityID: 0xD2
+ entityInstance: 1
+ sensorType: 0x09
+ path: /org/open_power/control/occ0
+ sensorReadingType: 0x09
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ sensorNamePattern: nameLeaf
+ interfaces:
+ org.open_power.OCC.Status:
+ OccActive:
+ Offsets:
+ 0x00:
+ assert: false
+ deassert: true
+ type: bool
+ 0x01:
+ assert: true
+ deassert: false
+ type: bool
+0x09:
+ entityID: 0xD2
+ entityInstance: 2
+ sensorType: 0x09
+ path: /org/open_power/control/occ1
+ sensorReadingType: 0x09
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ sensorNamePattern: nameLeaf
+ interfaces:
+ org.open_power.OCC.Status:
+ OccActive:
+ Offsets:
+ 0x00:
+ assert: false
+ deassert: true
+ type: bool
+ 0x01:
+ assert: true
+ deassert: false
+ type: bool
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
new file mode 100644
index 000000000..e1798ad4b
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
@@ -0,0 +1,10 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/${PN}"
+SRC_URI_append = " \
+ file://occ_sensors.hardcoded.yaml \
+ file://hwmon_sensors.hardcoded.yaml \
+ file://channel.yaml \
+ "
+
+EXTRA_OECONF_append = " \
+ CHANNEL_YAML_GEN=${WORKDIR}/channel.yaml \
+ "
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-sensor-inventory%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-sensor-inventory%.bbappend
new file mode 100644
index 000000000..72d991c7e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-sensor-inventory%.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-sensor-inventory%/config.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-sensor-inventory%/config.yaml
new file mode 100755
index 000000000..db62dd2f5
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/ipmi/phosphor-ipmi-sensor-inventory%/config.yaml
@@ -0,0 +1,1939 @@
+0x02:
+ sensorType: 0x0F
+ path: /xyz/openbmc_project/state/host0
+ sensorReadingType: 0x6F
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: eventdata2
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Boot.Progress:
+ BootProgress:
+ Offsets:
+ 0x13:
+ type: string
+ set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.OSStart
+ 0x00:
+ type: string
+ set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.Unspecified
+ 0x01:
+ type: string
+ set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.MemoryInit
+ 0x07:
+ type: string
+ set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.PCIInit
+ 0x14:
+ type: string
+ set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.MotherboardInit
+ 0x03:
+ type: string
+ set: xyz.openbmc_project.State.Boot.Progress.ProgressStages.SecondaryProcInit
+0x03:
+ sensorType: 0x07
+ path: /org/open_power/control/occ0
+ sensorReadingType: 0x09
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ org.open_power.OCC.Status:
+ OccActive:
+ Offsets:
+ 0x00:
+ assert: false
+ deassert: true
+ type: bool
+ 0x01:
+ assert: true
+ deassert: false
+ type: bool
+0x04:
+ sensorType: 0x07
+ path: /org/open_power/control/occ1
+ sensorReadingType: 0x09
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ org.open_power.OCC.Status:
+ OccActive:
+ Offsets:
+ 0x00:
+ assert: false
+ deassert: true
+ type: bool
+ 0x01:
+ assert: true
+ deassert: false
+ type: bool
+0x05:
+ sensorType: 0xC3
+ path: /xyz/openbmc_project/state/host0
+ sensorReadingType: 0x6F
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: readingAssertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.Control.Boot.RebootAttempts:
+ AttemptsLeft:
+ Offsets:
+ 0xFF:
+ type: uint32_t
+0x07:
+ sensorType: 0x1F
+ path: /xyz/openbmc_project/state/host0
+ sensorReadingType: 0x6F
+ serviceInterface: org.freedesktop.DBus.Properties
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.OperatingSystem.Status:
+ OperatingSystemState:
+ Offsets:
+ 0x02:
+ assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.PXEBoot
+ type: string
+ 0x06:
+ assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.BootComplete
+ type: string
+ 0x04:
+ assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.CDROMBoot
+ type: string
+ 0x01:
+ assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.CBoot
+ type: string
+ 0x03:
+ assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.DiagBoot
+ type: string
+ 0x05:
+ assert: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.ROMBoot
+ type: string
+0x08:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+0x09:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+0x0b:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm0
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x0c:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm1
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x0d:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm2
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x0e:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm3
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x0f:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm4
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x10:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm5
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x11:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm6
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x12:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm7
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x13:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm8
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x14:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm9
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x15:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm10
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x16:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm11
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x17:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm12
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x18:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm13
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x19:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm14
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x1a:
+ sensorType: 0x0C
+ path: /system/chassis/motherboard/dimm15
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x04:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x06:
+ assert: true
+ deassert: false
+ type: bool
+0x2b:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core0
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x2c:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core1
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x2d:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core2
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x2e:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core3
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x2f:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core4
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x30:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core5
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x31:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core6
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x32:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core7
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x33:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core8
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x34:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core9
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x35:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core10
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x36:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core11
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x37:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core12
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x38:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core13
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x39:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core14
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x3a:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core15
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x3b:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core16
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x3c:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core17
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x3d:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core18
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x3e:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core19
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x3f:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core20
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x40:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core21
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x41:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core22
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x42:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu0/core23
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x43:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core0
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x44:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core1
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x45:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core2
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x46:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core3
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x47:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core4
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x48:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core5
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x49:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core6
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x4a:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core7
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x4b:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core8
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x4c:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core9
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x4d:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core10
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x4e:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core11
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x4f:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core12
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x50:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core13
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x51:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core14
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x52:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core15
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x53:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core16
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x54:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core17
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x55:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core18
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x56:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core19
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x57:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core20
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x58:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core21
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x59:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core22
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
+0x5a:
+ sensorType: 0x07
+ path: /system/chassis/motherboard/cpu1/core23
+ sensorReadingType: 0x6F
+ serviceInterface: xyz.openbmc_project.Inventory.Manager
+ readingType: assertion
+ mutability: Mutability::Write|Mutability::Read
+ interfaces:
+ xyz.openbmc_project.State.Decorator.OperationalStatus:
+ Functional:
+ Prereqs:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ Offsets:
+ 0x08:
+ assert: false
+ deassert: true
+ type: bool
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ Offsets:
+ 0x07:
+ assert: true
+ deassert: false
+ type: bool
+ skipOn: deassert
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/leds/blackbird-led-manager-config-native.bb b/meta-rcs/meta-blackbird/recipes-phosphor/leds/blackbird-led-manager-config-native.bb
new file mode 100644
index 000000000..54e37d9a9
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/leds/blackbird-led-manager-config-native.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Phosphor LED Group Management for Blackbird"
+PR = "r1"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit native
+
+PROVIDES += "virtual/phosphor-led-manager-config-native"
+
+SRC_URI += "file://led.yaml"
+S = "${WORKDIR}"
+
+# Overwrite the example led layout yaml file prior
+# to building the phosphor-led-manager package
+do_install() {
+ SRC=${S}
+ DEST=${D}${datadir}/phosphor-led-manager
+ install -D ${SRC}/led.yaml ${DEST}/led.yaml
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/leds/blackbird-led-manager-config/led.yaml b/meta-rcs/meta-blackbird/recipes-phosphor/leds/blackbird-led-manager-config/led.yaml
new file mode 100755
index 000000000..f0e5cf1d4
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/leds/blackbird-led-manager-config/led.yaml
@@ -0,0 +1,36 @@
+bmc_booted:
+ power:
+ Action: 'Off'
+ Priority: 'On'
+
+ bmc_ready:
+ Action: 'On'
+
+power_on:
+ power:
+ Action: 'On'
+ DutyOn: 50
+ Period: 0
+ Priority: 'On'
+
+enclosure_fault:
+ fault:
+ Action: 'On'
+
+enclosure_identify:
+ identify:
+ Action: 'Blink'
+ DutyOn: 50
+ Period: 1000
+
+# The Op Panel on the Blackbird system holds a multicolor LED.
+# Both the 'fault' and 'identify' gpios are wired to the same LED.
+# By holding one in 'on' while the other in 'blink' state, ensures
+# the manufacturing process can verify both colors function
+lamp_test:
+ fault:
+ Action: 'Blink'
+ DutyOn: 50
+ Period: 1000
+ identify:
+ Action: 'On'
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/mboxd/mboxd_%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/mboxd/mboxd_%.bbappend
new file mode 100644
index 000000000..8b6248a46
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/mboxd/mboxd_%.bbappend
@@ -0,0 +1 @@
+MBOXD_FLASH_SIZE = "64M"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/network/network/ncsi-netlink.service b/meta-rcs/meta-blackbird/recipes-phosphor/network/network/ncsi-netlink.service
new file mode 100644
index 000000000..44b34195e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/network/network/ncsi-netlink.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Stop the ethernet link failover
+Wants=xyz.openbmc_project.Network.service
+After=xyz.openbmc_project.Network.service
+
+[Service]
+Restart=no
+ExecStart=/usr/bin/env ncsi-netlink --set -x 2 -p 0 -c 0
+SyslogIdentifier=ncsi-netlink
+Type=oneshot
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/network/phosphor-network_%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/network/phosphor-network_%.bbappend
new file mode 100644
index 000000000..5137f4e00
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/network/phosphor-network_%.bbappend
@@ -0,0 +1,8 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/network:"
+SRC_URI += "file://ncsi-netlink.service"
+SYSTEMD_SERVICE_${PN} += "ncsi-netlink.service"
+
+do_install_append() {
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/ncsi-netlink.service ${D}${systemd_system_unitdir}
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
new file mode 100644
index 000000000..74866b373
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
@@ -0,0 +1 @@
+RDEPENDS_${PN}-inventory += " openpower-occ-control phosphor-cooling-type"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/70-hwmon.rules b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/70-hwmon.rules
new file mode 100644
index 000000000..cdc9b9c54
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/70-hwmon.rules
@@ -0,0 +1,3 @@
+SUBSYSTEM=="hwmon", ACTION=="add", DRIVERS!="occ-hwmon", PROGRAM="/bin/systemd-escape -p '%E{OF_FULLNAME}'", RUN="/bin/systemctl start xyz.openbmc_project.Hwmon@%c.service"
+SUBSYSTEM=="hwmon", ACTION=="add", DRIVERS=="occ-hwmon", RUN="/usr/bin/start_hwmon.sh start %p %E{OF_FULLNAME}"
+SUBSYSTEM=="hwmon", ACTION=="remove", RUN="/usr/bin/start_hwmon.sh stop %p %E{OF_FULLNAME}"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/power-supply@68.conf b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/power-supply@68.conf
new file mode 100644
index 000000000..e463b517c
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/power-supply@68.conf
@@ -0,0 +1,23 @@
+LABEL_in1="ps1_input_voltage"
+WARNHI_in1="290000"
+WARNLO_in1="200000"
+CRITHI_in1="300000"
+CRITLO_in1="180000"
+
+LABEL_in2="ps1_output_voltage"
+WARNHI_in2="12700"
+WARNLO_in2="0"
+CRITHI_in2="13000"
+CRITLO_in2="0"
+
+LABEL_curr1="ps1_output_current"
+WARNHI_curr1="170000"
+WARNLO_curr1="0"
+CRITHI_curr1="180000"
+CRITLO_curr1="0"
+
+LABEL_power1="ps1_input_power"
+WARNHI_power1="2350000000"
+WARNLO_power1="0"
+CRITHI_power1="2500000000"
+CRITLO_power1="0"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/power-supply@69.conf b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/power-supply@69.conf
new file mode 100644
index 000000000..2fadbdec0
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/power-supply@69.conf
@@ -0,0 +1,23 @@
+LABEL_in1="ps0_input_voltage"
+WARNHI_in1="290000"
+WARNLO_in1="200000"
+CRITHI_in1="300000"
+CRITLO_in1="180000"
+
+LABEL_in2="ps0_output_voltage"
+WARNHI_in2="12700"
+WARNLO_in2="0"
+CRITHI_in2="13000"
+CRITLO_in2="0"
+
+LABEL_curr1="ps0_output_current"
+WARNHI_curr1="170000"
+WARNLO_curr1="0"
+CRITHI_curr1="180000"
+CRITLO_curr1="0"
+
+LABEL_power1="ps0_input_power"
+WARNHI_power1="2350000000"
+WARNLO_power1="0"
+CRITHI_power1="2500000000"
+CRITLO_power1="0"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/w83773g@4c.conf b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/w83773g@4c.conf
new file mode 100644
index 000000000..506687fcd
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/w83773g@4c.conf
@@ -0,0 +1,3 @@
+LABEL_temp1 = "pcie"
+LABEL_temp2 = "cpu_1_ambient"
+LABEL_temp3 = "ambient"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf
new file mode 100644
index 000000000..f6360879a
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf
@@ -0,0 +1,17 @@
+# Blackbird has 3 fan ports, but the two chassis fans are connected together
+LABEL_fan9 = "fan0"
+LABEL_fan10 = "fan1"
+LABEL_fan11 = "fan2"
+
+RPM_TARGET_fan9 = "1"
+# Fan 1 can be monitored but will not be factored in to automatic PID control
+# This is accomplished by setting its RPM control path to a non-existent node
+RPM_TARGET_fan10 = "3"
+RPM_TARGET_fan11 = "2"
+
+# PWM nodes use raw mode (0-255 value range)
+RAWPWM_fan1 = "1"
+RAWPWM_fan2 = "1"
+
+# Legacy mode
+TARGET_MODE = "RPM"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--06/sbefifo1-dev0/occ-hwmon.1.conf b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--06/sbefifo1-dev0/occ-hwmon.1.conf
new file mode 100644
index 000000000..7752d2bbb
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--06/sbefifo1-dev0/occ-hwmon.1.conf
@@ -0,0 +1,123 @@
+MODE_temp1 = "label"
+MODE_temp2 = "label"
+MODE_temp3 = "label"
+MODE_temp4 = "label"
+MODE_temp5 = "label"
+MODE_temp6 = "label"
+MODE_temp7 = "label"
+MODE_temp8 = "label"
+MODE_temp9 = "label"
+MODE_temp10 = "label"
+MODE_temp11 = "label"
+MODE_temp12 = "label"
+MODE_temp13 = "label"
+MODE_temp14 = "label"
+MODE_temp15 = "label"
+MODE_temp16 = "label"
+MODE_temp17 = "label"
+MODE_temp18 = "label"
+MODE_temp19 = "label"
+MODE_temp20 = "label"
+MODE_temp21 = "label"
+MODE_temp22 = "label"
+MODE_temp23 = "label"
+MODE_temp24 = "label"
+MODE_temp25 = "label"
+MODE_temp26 = "label"
+MODE_temp27 = "label"
+MODE_temp28 = "label"
+MODE_temp29 = "label"
+MODE_temp30 = "label"
+MODE_temp31 = "label"
+MODE_temp32 = "label"
+MODE_freq1 = "label"
+MODE_freq2 = "label"
+MODE_freq3 = "label"
+MODE_freq4 = "label"
+MODE_freq5 = "label"
+MODE_freq6 = "label"
+MODE_freq7 = "label"
+MODE_freq8 = "label"
+MODE_freq9 = "label"
+MODE_freq10 = "label"
+MODE_freq11 = "label"
+MODE_freq12 = "label"
+MODE_freq13 = "label"
+MODE_freq14 = "label"
+MODE_freq15 = "label"
+MODE_freq16 = "label"
+MODE_freq17 = "label"
+MODE_freq18 = "label"
+MODE_freq19 = "label"
+MODE_freq20 = "label"
+MODE_freq21 = "label"
+MODE_freq22 = "label"
+MODE_freq23 = "label"
+MODE_freq24 = "label"
+MODE_freq25 = "label"
+MODE_freq26 = "label"
+MODE_freq27 = "label"
+MODE_freq28 = "label"
+MODE_freq29 = "label"
+MODE_freq30 = "label"
+MODE_freq31 = "label"
+MODE_freq32 = "label"
+LABEL_temp91 = "p0_core0_temp"
+LABEL_temp92 = "p0_core1_temp"
+LABEL_temp93 = "p0_core2_temp"
+LABEL_temp94 = "p0_core3_temp"
+LABEL_temp95 = "p0_core4_temp"
+LABEL_temp96 = "p0_core5_temp"
+LABEL_temp97 = "p0_core6_temp"
+LABEL_temp98 = "p0_core7_temp"
+LABEL_temp99 = "p0_core8_temp"
+LABEL_temp100 = "p0_core9_temp"
+LABEL_temp101 = "p0_core10_temp"
+LABEL_temp102 = "p0_core11_temp"
+LABEL_temp103 = "p0_core12_temp"
+LABEL_temp104 = "p0_core13_temp"
+LABEL_temp105 = "p0_core14_temp"
+LABEL_temp106 = "p0_core15_temp"
+LABEL_temp107 = "p0_core16_temp"
+LABEL_temp108 = "p0_core17_temp"
+LABEL_temp109 = "p0_core18_temp"
+LABEL_temp110 = "p0_core19_temp"
+LABEL_temp111 = "p0_core20_temp"
+LABEL_temp112 = "p0_core21_temp"
+LABEL_temp113 = "p0_core22_temp"
+LABEL_temp114 = "p0_core23_temp"
+LABEL_temp27 = "dimm0_temp"
+LABEL_temp28 = "dimm1_temp"
+LABEL_temp29 = "dimm2_temp"
+LABEL_temp30 = "dimm3_temp"
+LABEL_temp31 = "dimm4_temp"
+LABEL_temp32 = "dimm5_temp"
+LABEL_temp33 = "dimm6_temp"
+LABEL_temp34 = "dimm7_temp"
+LABEL_freq91 = "p0_core0_freq"
+LABEL_freq92 = "p0_core1_freq"
+LABEL_freq93 = "p0_core2_freq"
+LABEL_freq94 = "p0_core3_freq"
+LABEL_freq95 = "p0_core4_freq"
+LABEL_freq96 = "p0_core5_freq"
+LABEL_freq97 = "p0_core6_freq"
+LABEL_freq98 = "p0_core7_freq"
+LABEL_freq99 = "p0_core8_freq"
+LABEL_freq100 = "p0_core9_freq"
+LABEL_freq101 = "p0_core10_freq"
+LABEL_freq102 = "p0_core11_freq"
+LABEL_freq103 = "p0_core12_freq"
+LABEL_freq104 = "p0_core13_freq"
+LABEL_freq105 = "p0_core14_freq"
+LABEL_freq106 = "p0_core15_freq"
+LABEL_freq107 = "p0_core16_freq"
+LABEL_freq108 = "p0_core17_freq"
+LABEL_freq109 = "p0_core18_freq"
+LABEL_freq110 = "p0_core19_freq"
+LABEL_freq111 = "p0_core20_freq"
+LABEL_freq112 = "p0_core21_freq"
+LABEL_freq113 = "p0_core22_freq"
+LABEL_freq114 = "p0_core23_freq"
+LABEL_power2 = "p0_power"
+LABEL_power3 = "p0_vdd_power"
+LABEL_power4 = "p0_vdn_power"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--0a/fsi1/slave@01--00/01--01--00--06/sbefifo2-dev0/occ-hwmon.2.conf b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--0a/fsi1/slave@01--00/01--01--00--06/sbefifo2-dev0/occ-hwmon.2.conf
new file mode 100644
index 000000000..d90820d8c
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--0a/fsi1/slave@01--00/01--01--00--06/sbefifo2-dev0/occ-hwmon.2.conf
@@ -0,0 +1,123 @@
+MODE_temp1 = "label"
+MODE_temp2 = "label"
+MODE_temp3 = "label"
+MODE_temp4 = "label"
+MODE_temp5 = "label"
+MODE_temp6 = "label"
+MODE_temp7 = "label"
+MODE_temp8 = "label"
+MODE_temp9 = "label"
+MODE_temp10 = "label"
+MODE_temp11 = "label"
+MODE_temp12 = "label"
+MODE_temp13 = "label"
+MODE_temp14 = "label"
+MODE_temp15 = "label"
+MODE_temp16 = "label"
+MODE_temp17 = "label"
+MODE_temp18 = "label"
+MODE_temp19 = "label"
+MODE_temp20 = "label"
+MODE_temp21 = "label"
+MODE_temp22 = "label"
+MODE_temp23 = "label"
+MODE_temp24 = "label"
+MODE_temp25 = "label"
+MODE_temp26 = "label"
+MODE_temp27 = "label"
+MODE_temp28 = "label"
+MODE_temp29 = "label"
+MODE_temp30 = "label"
+MODE_temp31 = "label"
+MODE_temp32 = "label"
+MODE_freq1 = "label"
+MODE_freq2 = "label"
+MODE_freq3 = "label"
+MODE_freq4 = "label"
+MODE_freq5 = "label"
+MODE_freq6 = "label"
+MODE_freq7 = "label"
+MODE_freq8 = "label"
+MODE_freq9 = "label"
+MODE_freq10 = "label"
+MODE_freq11 = "label"
+MODE_freq12 = "label"
+MODE_freq13 = "label"
+MODE_freq14 = "label"
+MODE_freq15 = "label"
+MODE_freq16 = "label"
+MODE_freq17 = "label"
+MODE_freq18 = "label"
+MODE_freq19 = "label"
+MODE_freq20 = "label"
+MODE_freq21 = "label"
+MODE_freq22 = "label"
+MODE_freq23 = "label"
+MODE_freq24 = "label"
+MODE_freq25 = "label"
+MODE_freq26 = "label"
+MODE_freq27 = "label"
+MODE_freq28 = "label"
+MODE_freq29 = "label"
+MODE_freq30 = "label"
+MODE_freq31 = "label"
+MODE_freq32 = "label"
+LABEL_temp115 = "p1_core0_temp"
+LABEL_temp116 = "p1_core1_temp"
+LABEL_temp117 = "p1_core2_temp"
+LABEL_temp118 = "p1_core3_temp"
+LABEL_temp119 = "p1_core4_temp"
+LABEL_temp120 = "p1_core5_temp"
+LABEL_temp121 = "p1_core6_temp"
+LABEL_temp122 = "p1_core7_temp"
+LABEL_temp123 = "p1_core8_temp"
+LABEL_temp124 = "p1_core9_temp"
+LABEL_temp125 = "p1_core10_temp"
+LABEL_temp126 = "p1_core11_temp"
+LABEL_temp127 = "p1_core12_temp"
+LABEL_temp128 = "p1_core13_temp"
+LABEL_temp129 = "p1_core14_temp"
+LABEL_temp130 = "p1_core15_temp"
+LABEL_temp131 = "p1_core16_temp"
+LABEL_temp132 = "p1_core17_temp"
+LABEL_temp133 = "p1_core18_temp"
+LABEL_temp134 = "p1_core19_temp"
+LABEL_temp135 = "p1_core20_temp"
+LABEL_temp136 = "p1_core21_temp"
+LABEL_temp137 = "p1_core22_temp"
+LABEL_temp138 = "p1_core23_temp"
+LABEL_temp35 = "dimm8_temp"
+LABEL_temp36 = "dimm9_temp"
+LABEL_temp37 = "dimm10_temp"
+LABEL_temp38 = "dimm11_temp"
+LABEL_temp39 = "dimm12_temp"
+LABEL_temp40 = "dimm13_temp"
+LABEL_temp41 = "dimm14_temp"
+LABEL_temp42 = "dimm15_temp"
+LABEL_freq115 = "p1_core0_freq"
+LABEL_freq116 = "p1_core1_freq"
+LABEL_freq117 = "p1_core2_freq"
+LABEL_freq118 = "p1_core3_freq"
+LABEL_freq119 = "p1_core4_freq"
+LABEL_freq120 = "p1_core5_freq"
+LABEL_freq121 = "p1_core6_freq"
+LABEL_freq122 = "p1_core7_freq"
+LABEL_freq123 = "p1_core8_freq"
+LABEL_freq124 = "p1_core9_freq"
+LABEL_freq125 = "p1_core10_freq"
+LABEL_freq126 = "p1_core11_freq"
+LABEL_freq127 = "p1_core12_freq"
+LABEL_freq128 = "p1_core13_freq"
+LABEL_freq129 = "p1_core14_freq"
+LABEL_freq130 = "p1_core15_freq"
+LABEL_freq131 = "p1_core16_freq"
+LABEL_freq132 = "p1_core17_freq"
+LABEL_freq133 = "p1_core18_freq"
+LABEL_freq134 = "p1_core19_freq"
+LABEL_freq135 = "p1_core20_freq"
+LABEL_freq136 = "p1_core21_freq"
+LABEL_freq137 = "p1_core22_freq"
+LABEL_freq138 = "p1_core23_freq"
+LABEL_power2 = "p1_power"
+LABEL_power3 = "p1_vdd_power"
+LABEL_power4 = "p1_vdn_power"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/xyz.openbmc_project.Hwmon@.service b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/xyz.openbmc_project.Hwmon@.service
new file mode 100644
index 000000000..b930b5711
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon/xyz.openbmc_project.Hwmon@.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Phosphor Hwmon Poller
+ConditionFileNotEmpty=/etc/default/obmc/hwmon/%I.conf
+After=xyz.openbmc_project.ObjectMapper.service
+
+[Service]
+Restart=on-failure
+ExecStart=/usr/bin/env phosphor-hwmon-readd -o %I
+SyslogIdentifier=phosphor-hwmon-readd
+EnvironmentFile=/etc/default/obmc/hwmon/%I.conf
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend
new file mode 100644
index 000000000..0dff905b2
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend
@@ -0,0 +1,21 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+BLACKBIRD_CHIPS = " \
+ pwm-tacho-controller@1e786000 \
+ bus@1e78a000/i2c-bus@440/w83773g@4c \
+ bus@1e78a000/i2c-bus@440/power-supply@68 \
+ bus@1e78a000/i2c-bus@440/power-supply@69 \
+ "
+BLACKBIRD_ITEMSFMT = "ahb/apb/{0}.conf"
+BLACKBIRD_ITEMS = "${@compose_list(d, 'BLACKBIRD_ITEMSFMT', 'BLACKBIRD_CHIPS')}"
+
+BLACKBIRD_OCCS = " \
+ 00--00--00--06/sbefifo1-dev0/occ-hwmon.1 \
+ "
+
+BLACKBIRD_OCCSFMT = "devices/platform/gpio-fsi/fsi0/slave@00--00/{0}.conf"
+BLACKBIRD_OCCITEMS = "${@compose_list(d, 'BLACKBIRD_OCCSFMT', 'BLACKBIRD_OCCS')}"
+
+ENVS = "obmc/hwmon/{0}"
+SYSTEMD_ENVIRONMENT_FILE_${PN} += "${@compose_list(d, 'ENVS', 'BLACKBIRD_ITEMS')}"
+SYSTEMD_ENVIRONMENT_FILE_${PN} += "${@compose_list(d, 'ENVS', 'BLACKBIRD_OCCITEMS')}"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/skeleton/obmc-libobmc-intf/gpio_defs.json b/meta-rcs/meta-blackbird/recipes-phosphor/skeleton/obmc-libobmc-intf/gpio_defs.json
new file mode 100644
index 000000000..9790e958c
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/skeleton/obmc-libobmc-intf/gpio_defs.json
@@ -0,0 +1,66 @@
+{
+ "gpio_configs": {
+
+ "power_config": {
+ "power_good_in": "SYS_PWROK_BUFF",
+ "power_up_outs": [
+ { "name": "BMC_POWER_UP", "polarity": true}
+ ],
+ "reset_outs": [
+ ]
+ }
+ },
+
+ "gpio_definitions": [
+ {
+ "name": "BMC_POWER_UP",
+ "pin": "D1",
+ "direction": "out"
+ },
+ {
+ "name": "SYS_PWROK_BUFF",
+ "pin": "D2",
+ "direction": "in"
+ },
+ {
+ "name": "BMC_WD_CLEAR_PULSE_N",
+ "pin": "N5",
+ "direction": "falling"
+ },
+ {
+ "name": "CHECKSTOP",
+ "pin": "J2",
+ "direction": "falling"
+ },
+ {
+ "name": "BMC_CP0_RESET_N",
+ "pin": "A1",
+ "direction": "out"
+ },
+ {
+ "name": "BMC_CP0_PERST_ENABLE_R",
+ "pin": "A3",
+ "direction": "out"
+ },
+ {
+ "name": "BMC_THROTTLE",
+ "pin": "J3",
+ "direction": "out"
+ },
+ {
+ "name": "IDBTN",
+ "pin": "Q7",
+ "direction": "out"
+ },
+ {
+ "name": "POWER_BUTTON",
+ "pin": "I3",
+ "direction": "both"
+ },
+ {
+ "name": "RESET_BUTTON",
+ "pin": "O6",
+ "direction": "both"
+ }
+ ]
+}
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/skeleton/obmc-libobmc-intf_%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/skeleton/obmc-libobmc-intf_%.bbappend
new file mode 100644
index 000000000..72d991c7e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/skeleton/obmc-libobmc-intf_%.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/state/phosphor-state-manager/obmc/phosphor-reboot-host/reboot.conf b/meta-rcs/meta-blackbird/recipes-phosphor/state/phosphor-state-manager/obmc/phosphor-reboot-host/reboot.conf
new file mode 100644
index 000000000..25b617371
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/state/phosphor-state-manager/obmc/phosphor-reboot-host/reboot.conf
@@ -0,0 +1,3 @@
+# Sleep 8 seconds on Blackbird to make sure the checkstop status on
+# CPU is cleared. See https://github.com/openbmc/openbmc/issues/3330
+REBOOT_DELAY=8
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/state/phosphor-state-manager_%.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/state/phosphor-state-manager_%.bbappend
new file mode 100644
index 000000000..594e1cc34
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/state/phosphor-state-manager_%.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend_blackbird := "${THISDIR}/${PN}:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fb.modes b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fb.modes
new file mode 100644
index 000000000..dfc51fe97
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fb.modes
@@ -0,0 +1,7 @@
+mode "800x600-60"
+ # D: 40.00 MHz, H: 37.879 kHz, V: 60.32 Hz
+ geometry 800 600 800 600 32
+ timings 0 88 40 23 1 128 4
+ hsync high
+ vsync high
+endmode
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm
new file mode 100644
index 000000000..0cf29d433
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm
@@ -0,0 +1 @@
+FB_MODE=800x600-60
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm-static-background.png b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm-static-background.png
new file mode 100644
index 000000000..71a136d36
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm-static-background.png
Binary files differ
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm.service b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm.service
new file mode 100644
index 000000000..4f2daaaae
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm/fbterm.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=UART renderer
+Requires=obmc-console@ttyVUART0.service
+
+[Service]
+EnvironmentFile={envfiledir}/fbterm
+ExecStartPre=/usr/sbin/fbset $FB_MODE
+ExecStart=/usr/bin/fbterm-bi /usr/share/images/fbterm-static-background.png --write-only obmc-console-client --color-foreground=7 --color-background=7 --font-names=mono
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm_git.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm_git.bbappend
new file mode 100644
index 000000000..822d1e15e
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/fbterm_git.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/fbterm:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config.bb b/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config.bb
new file mode 100644
index 000000000..f1707b631
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Blackbird HDMI Setup"
+DESCRIPTION = "Configure Blackbird HDMI transceiver"
+PR = "r1"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit obmc-phosphor-systemd
+
+RDEPENDS_${PN} += "i2c-tools bash"
+
+S = "${WORKDIR}"
+SRC_URI += "file://lvds.sh \
+ file://COPYING.GPLv3"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/lvds.sh ${D}${bindir}/lvds.sh
+}
+
+TMPL = "lvds-config@.service"
+INSTFMT = "lvds-config@{0}.service"
+TGTFMT = "obmc-chassis-poweron@{0}.target"
+FMT = "../${TMPL}:${TGTFMT}.requires/${INSTFMT}"
+
+SYSTEMD_SERVICE_${PN} += "${TMPL}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT', 'OBMC_CHASSIS_INSTANCES')}"
+
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/COPYING.GPLv3 b/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/COPYING.GPLv3
new file mode 100644
index 000000000..94a9ed024
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/COPYING.GPLv3
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/lvds-config@.service b/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/lvds-config@.service
new file mode 100644
index 000000000..9c307bc91
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/lvds-config@.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=Set up LVDS transceiver
+Wants=obmc-host-start-pre@%i.target
+Before=obmc-host-start-pre@%i.target
+Wants=obmc-power-on@%i.target
+After=obmc-power-on@%i.target
+Conflicts=obmc-chassis-poweroff@%i.target
+ConditionPathExists=!/run/openbmc/chassis@%i-on
+
+[Service]
+ExecStart=/usr/bin/env lvds.sh
+SyslogIdentifier=lvds.sh
+Type=oneshot
+RemainAfterExit=yes
+
+[Install]
+WantedBy=obmc-chassis-poweron@i.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/lvds.sh b/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/lvds.sh
new file mode 100755
index 000000000..2d0197d26
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/lvds-config/lvds.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+#
+# Copyright 2018 - 2019 Raptor Engineering, LLC
+# Released under the terms of the GPL v3
+
+# ***** BMC PINMUX *****
+
+# HACK
+# Work around pinmux hog failure on cold boot
+# Remove this block once the pinmux is fixed in the kernel!
+devmem 0x1e6e2094 32 0x00004001
+devmem 0x1e6e208c 32 0x000000ff
+devmem 0x1e6e20a4 32 0xfffff000
+devmem 0x1e6e20a8 32 0x000fffff
+devmem 0x1e6e6064 32 0x00000080
+
+
+# ***** SET UP ITE HDMI TRANSCEIVER *****
+
+I2C_BUS=5
+I2C_DEV=0x4c
+
+# ***** GENERAL *****
+# Reset device
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0x4 0x1c
+
+
+# ***** VIDEO *****
+# Set bank 0
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0x0f 0x08 # 0x0f[1:0] = 0
+
+# AVMute output
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0xc1 0x01 # 0xc1[0] = 1
+
+# Take device out of reset
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0x04 0x00
+
+# Enable HDMI transmitter reset
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0x61 0x10
+
+# Configure input signal
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0x70 0x00 # RGB mode, I/O latch at TxClk, non-CCIR656, non-embedded sync, single edge, no PCLK delay
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0x90 0x00 # PG horizontal total = 0, H/V sync provided by external driver, active low VSYNC, active low HSYNC, Data Enable provided by external driver
+
+# Enable DVI mode (works for HDMI as well, host should configure HDMI later in the boot process)
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0xc0 0x00 # 0xc0[0] = 0
+
+# Release HDMI transmitter reset
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0x61 0x00 # 0x61[4] = 0
+
+# Un-AVMute output
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0xc1 0x00 # 0xc1[0] = 0
+
+# ***** AUDIO *****
+# Disable audio channel
+i2cset -y ${I2C_BUS} ${I2C_DEV} 0xe0 0x08 # 0xe0[3:0] = 0
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/uart-render-controller/uart-render-controller.service b/meta-rcs/meta-blackbird/recipes-phosphor/video/uart-render-controller/uart-render-controller.service
new file mode 100644
index 000000000..e2c51d00d
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/uart-render-controller/uart-render-controller.service
@@ -0,0 +1,14 @@
+
+[Unit]
+Description=UART render controller
+Requires=xyz.openbmc_project.State.Host.service
+After=xyz.openbmc_project.State.Host.service
+
+[Service]
+ExecStart=/usr/sbin/obmc-uart-render-controller \
+ /sys/devices/platform/ahb/ahb:apb/1e6e2000.syscon/1e6e2000.syscon:scratch/vga0 \
+ /sys/devices/platform/ahb/ahb:apb/1e6e2000.syscon/1e6e2000.syscon:scratch/dvo_mux \
+ fbterm.service
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/video/uart-render-controller_git.bbappend b/meta-rcs/meta-blackbird/recipes-phosphor/video/uart-render-controller_git.bbappend
new file mode 100644
index 000000000..173e5227d
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/video/uart-render-controller_git.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/uart-render-controller:"
diff --git a/meta-rcs/meta-blackbird/recipes-phosphor/workbook/blackbird-config_git.bb b/meta-rcs/meta-blackbird/recipes-phosphor/workbook/blackbird-config_git.bb
new file mode 100644
index 000000000..9b28915a3
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes-phosphor/workbook/blackbird-config_git.bb
@@ -0,0 +1,6 @@
+SUMMARY = "Blackbird board wiring"
+DESCRIPTION = "Blackbird wiring information for the Blackbird OpenPOWER system."
+PR = "r1"
+PV = "1.0+git${SRCPV}"
+
+inherit config-in-skeleton
diff --git a/meta-rcs/meta-blackbird/recipes.txt b/meta-rcs/meta-blackbird/recipes.txt
new file mode 100644
index 000000000..3ec3f4a42
--- /dev/null
+++ b/meta-rcs/meta-blackbird/recipes.txt
@@ -0,0 +1,2 @@
+recipes-kernel - The kernel and generic applications/libraries with strong kernel dependencies
+recipes-phosphor - Phosphor OpenBMC applications and configuration
OpenPOWER on IntegriCloud