diff options
author | Potin Lai <potin.lai@quantatw.com> | 2022-05-25 14:42:58 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2022-07-18 18:05:20 +0300 |
commit | fc73800f6782a6fe57ab41bc828a9494fe3711d3 (patch) | |
tree | da9dcfe48ddcafb612cd934fc745f28184618b24 | |
parent | 9f90761025688ea585060d873dcd7211cbd370e2 (diff) | |
download | openbmc-fc73800f6782a6fe57ab41bc828a9494fe3711d3.tar.xz |
meta-bletchley: detect-gpio-present: sled present managerment service
A service to monitor the presence status of sleds and perform
corresponding actions when sleds are inserted or removed.
This patch require phosphor-gpio-monitor-presence enabled and gpio-keys
defined in kernel dts file, the LORE link as below.
* https://lore.kernel.org/all/20220613095150.21917-4-potin.lai.pt@gmail.com/
Signed-off-by: Potin Lai <potin.lai@quantatw.com>
Change-Id: Id43c7c5c40ccad904db3e6d55870b154a68626ca
4 files changed, 144 insertions, 0 deletions
diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/detect-sled-present_0.1.bb b/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/detect-sled-present_0.1.bb new file mode 100644 index 0000000000..f70a740b6e --- /dev/null +++ b/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/detect-sled-present_0.1.bb @@ -0,0 +1,27 @@ +SUMMARY = "Bletchley SLED Present Service" +DESCRIPTION = "OpenBMC Quanta Detect Present Daemon." +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit obmc-phosphor-systemd + +DEPENDS += "systemd" +RDEPENDS:${PN} += " bash phosphor-gpio-monitor-presence" + +SRC_URI = " file://detect-sled-present \ + file://detect-sled-present@.service \ + " + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${WORKDIR}/detect-sled-present ${D}${bindir}/ + + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/detect-sled-present@.service ${D}${systemd_system_unitdir} +} + +TGT = "${SYSTEMD_DEFAULT_TARGET}" +SLED_PRESENT_INSTFMT="../detect-sled-present@.service:${TGT}.wants/detect-sled-present@{0}.service" +SYSTEMD_SERVICE:${PN} += "detect-sled-present@.service" +SYSTEMD_LINK:${PN} += "${@compose_list(d, 'SLED_PRESENT_INSTFMT', 'OBMC_HOST_INSTANCES')}" diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present b/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present new file mode 100644 index 0000000000..62830bfd0d --- /dev/null +++ b/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present @@ -0,0 +1,103 @@ +#!/bin/bash + +SLED_ID=$1 +SERVICE_NAME="xyz.openbmc_project.Inventory.Manager" +PRESENT_OBJPATH="/xyz/openbmc_project/inventory/system/chassis/presence/presence_sled${SLED_ID}" +DBUS_PROPERTY_INTF="org.freedesktop.DBus.Properties" + +bind_i2c_driver() +{ + I2C_BUS_ADDR=$1 + DRIVER_NAME=$2 + DRIVER_DIR="/sys/bus/i2c/drivers/${DRIVER_NAME}" + if [ ! -e "${DRIVER_DIR}/${I2C_BUS_ADDR}" ]; then + echo "${I2C_BUS_ADDR}" > "${DRIVER_DIR}"/bind + fi +} + +unbind_i2c_driver() +{ + I2C_BUS_ADDR=$1 + DRIVER_NAME=$2 + DRIVER_DIR="/sys/bus/i2c/drivers/${DRIVER_NAME}" + if [ -e "${DRIVER_DIR}/${I2C_BUS_ADDR}" ]; then + echo "${I2C_BUS_ADDR}" > "${DRIVER_DIR}"/unbind + fi +} + +sled_insert_action() +{ + SLED_ID=$1 + I2C_BUS_NUM=$((SLED_ID-1)) + + # 0022: fusb302 + bind_i2c_driver "${I2C_BUS_NUM}-0022" "typec_fusb302" + + # 0045: ina230 + bind_i2c_driver "${I2C_BUS_NUM}-0045" "ina2xx" + + # 0040: mp5023 + bind_i2c_driver "${I2C_BUS_NUM}-0040" "mp5023" + + # 0041: pca9536 + bind_i2c_driver "${I2C_BUS_NUM}-0041" "pca953x" + + # 0076: pca9539 + bind_i2c_driver "${I2C_BUS_NUM}-0076" "pca953x" + + # 004f: tmp421 + bind_i2c_driver "${I2C_BUS_NUM}-004f" "tmp421" + + # 0067: pca9552 + bind_i2c_driver "${I2C_BUS_NUM}-0067" "leds-pca955x" + + # 0054: 24c64 + bind_i2c_driver "${I2C_BUS_NUM}-0054" "at24" +} + +sled_remove_action() +{ + SLED_ID=$1 + I2C_BUS_NUM=$((SLED_ID-1)) + + # 0022: fusb302 + unbind_i2c_driver "${I2C_BUS_NUM}-0022" "typec_fusb302" + + # # 0045: ina230 + # unbind_i2c_driver "${I2C_BUS_NUM}-0045" "ina2xx" + + # # 0040: mp5023 + # unbind_i2c_driver "${I2C_BUS_NUM}-0040" "mp5023" + + # # 0041: pca9536 + # unbind_i2c_driver "${I2C_BUS_NUM}-0041" "pca953x" + + # # 0076: pca9539 + # unbind_i2c_driver "${I2C_BUS_NUM}-0076" "pca953x" + + # # 004f: tmp421 + # unbind_i2c_driver "${I2C_BUS_NUM}-004f" "tmp421" + + # # 0067: pca9552 + # unbind_i2c_driver "${I2C_BUS_NUM}-0067" "leds-pca955x" + + # # 0054: 24c64 + # unbind_i2c_driver "${I2C_BUS_NUM}-0054" "at24" +} + + +dbus-monitor --system "type=signal,interface=${DBUS_PROPERTY_INTF},sender=${SERVICE_NAME},path=${PRESENT_OBJPATH}" | +while read -r line; do + case "$line" in + *"boolean false"*) + echo "SLED${SLED_ID} Removal" + sled_remove_action "$SLED_ID" + ;; + *"boolean true"*) + echo "SLED${SLED_ID} Insertion" + sled_insert_action "$SLED_ID" + ;; + esac +done + +exit 0 diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present@.service b/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present@.service new file mode 100644 index 0000000000..d9cfe86187 --- /dev/null +++ b/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present@.service @@ -0,0 +1,13 @@ +[Unit] +Description=SLED%i Present Manager +After=phosphor-gpio-presence@presence-sled%i.service +Wants=phosphor-gpio-presence@presence-sled%i.service +After=mapper-wait@-xyz-openbmc_project-inventory-system-chassis-presence-presence_sled%i.service +Wants=mapper-wait@-xyz-openbmc_project-inventory-system-chassis-presence-presence_sled%i.service + +[Service] +ExecStart=/usr/bin/detect-sled-present %i +Type=simple + +[Install] +WantedBy=multi-user.target diff --git a/meta-facebook/meta-bletchley/recipes-phosphor/images/fb-bletchley-phosphor-image.inc b/meta-facebook/meta-bletchley/recipes-phosphor/images/fb-bletchley-phosphor-image.inc index 65531cb603..1ce8907a4b 100644 --- a/meta-facebook/meta-bletchley/recipes-phosphor/images/fb-bletchley-phosphor-image.inc +++ b/meta-facebook/meta-bletchley/recipes-phosphor/images/fb-bletchley-phosphor-image.inc @@ -8,4 +8,5 @@ OBMC_IMAGE_EXTRA_INSTALL:append = " \ fw-update \ phosphor-sel-logger \ phosphor-gpio-monitor-presence \ + detect-sled-present \ " |