diff options
author | Potin Lai <potin.lai@quantatw.com> | 2022-08-09 12:46:48 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2022-09-06 21:00:45 +0300 |
commit | 8d5ee805cbd88a8614e0b4d7a5e2548e4f56a5fb (patch) | |
tree | 432896d4e13dffcc50b5073e8bf2c7bd26c2a2cd /meta-facebook | |
parent | 09fec31614174282f018c603c095b03b1a574fb8 (diff) | |
download | openbmc-8d5ee805cbd88a8614e0b4d7a5e2548e4f56a5fb.tar.xz |
meta-bletchley: introduce board-type-checker-fpb service
Add board-type-checker-fpb service for checking the board type
(main or 2nd source) of front panel board.
Base on the board type result, this service help probing i2c device
with compatable driver and creating a softlink to link virtual sensor
configuration to corresponding json file.
This commit require a kernel patch to remove hdc1080 node from
devicetree.
Signed-off-by: Potin Lai <potin.lai@quantatw.com>
Change-Id: I2b9aabb41c9749f525fe5444fb519871f0a7796d
Diffstat (limited to 'meta-facebook')
4 files changed, 138 insertions, 0 deletions
diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/board-type-checker/board-type-checker.bb b/meta-facebook/meta-bletchley/recipes-bletchley/board-type-checker/board-type-checker.bb new file mode 100644 index 0000000000..a75f6e7570 --- /dev/null +++ b/meta-facebook/meta-bletchley/recipes-bletchley/board-type-checker/board-type-checker.bb @@ -0,0 +1,21 @@ +SUMMARY = "Bletchley board type checker" +DESCRIPTION = "Bletchley board type checker to probe i2c device with correct driver in user-space" +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit allarch systemd obmc-phosphor-systemd + +RDEPENDS:${PN} += " bash i2c-tools" + +SRC_URI = " file://board-type-checker-fpb \ + file://board-type-checker-fpb.service \ + " + +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE:${PN}:append = " board-type-checker-fpb.service" + +do_install() { + install -d ${D}${libexecdir} + install -m 0755 ${WORKDIR}/board-type-checker-fpb ${D}${libexecdir}/ +} diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/board-type-checker/files/board-type-checker-fpb b/meta-facebook/meta-bletchley/recipes-bletchley/board-type-checker/files/board-type-checker-fpb new file mode 100644 index 0000000000..3bd100f118 --- /dev/null +++ b/meta-facebook/meta-bletchley/recipes-bletchley/board-type-checker/files/board-type-checker-fpb @@ -0,0 +1,99 @@ +#!/bin/bash + +add_i2c_device() +{ + local I2C_BUS=$1 + local DEV_ADDR=$2 + local DEVICE_COMP=$3 + local I2C_BUS_DIR="/sys/bus/i2c/devices/i2c-$I2C_BUS" + local NEW_DEVIVE="$I2C_BUS_DIR/new_device" + + echo "$DEVICE_COMP" "$DEV_ADDR" > "$NEW_DEVIVE" +} + +delete_i2c_device() +{ + local I2C_BUS=$1 + local DEV_ADDR=$2 + local I2C_BUS_DIR="/sys/bus/i2c/devices/i2c-$I2C_BUS" + local DEL_DEVIVE="$I2C_BUS_DIR/delete_device" + + echo "$DEV_ADDR" > "$DEL_DEVIVE" +} + +is_valid_hdc1080() +{ + local I2C_BUS=$1 + local DEV_ADDR=$2 + + MFR_ID=$(i2ctransfer -y -f "${I2C_BUS}" w1@"${DEV_ADDR}" 0xfe r2) + if [ "$MFR_ID" != "0x54 0x49" ]; then + return 1; + fi + + DEV_ID=$(i2ctransfer -y -f "${I2C_BUS}" w1@"${DEV_ADDR}" 0xff r2) + if [ "$DEV_ID" != "0x10 0x50" ]; then + return 1; + fi + + return 0; +} + + +I2C_BUS=10 +DEV_ADDR=0x40 +I2C_BUS_DIR="/sys/bus/i2c/devices/i2c-$I2C_BUS" +DEV_ADDR_HEXSTR="$(printf %04X $DEV_ADDR)" +DEV_DIR="$I2C_BUS_DIR/$I2C_BUS-$DEV_ADDR_HEXSTR" +DEV_NAME_FILE="$DEV_DIR/name" + +# Check chip type +if is_valid_hdc1080 "$I2C_BUS" "$DEV_ADDR"; then + CHIP_TYPE="HDC1080" + DEVICE_COMP="ti,hdc1080" +else + CHIP_TYPE="SI7021" + DEVICE_COMP="silabs,si7020" +fi + +# Check and probe i2c device +if [ ! -f "$DEV_NAME_FILE" ]; then + # i2c device not porbed yet + add_i2c_device "$I2C_BUS" "$DEV_ADDR" "$DEVICE_COMP" +else + DEV_NAME=$(cat "$DEV_NAME_FILE") + if [ "$DEV_NAME" != "$DEVICE_COMP" ]; then + # incorrect driver probed, delete and add again + delete_i2c_device "$I2C_BUS" "$DEV_ADDR" + add_i2c_device "$I2C_BUS" "$DEV_ADDR" "$DEVICE_COMP" + fi +fi + + +VIRT_SNR_CONF="/usr/share/phosphor-virtual-sensor/virtual_sensor_config.json" +HDC1080_VIRT_SNR_CONF="/usr/share/phosphor-virtual-sensor/virtual_sensor_config_hdc1080.json" +SI7021_VIRT_SNR_CONF="/usr/share/phosphor-virtual-sensor/virtual_sensor_config_si7021.json" + + +# Setup virtual_sensor_config.json for phosphor-virtual-sensor +case "$CHIP_TYPE" in +"HDC1080") + REQUIRED_CONF_PATH="$HDC1080_VIRT_SNR_CONF" + ;; +"SI7021") + REQUIRED_CONF_PATH="$SI7021_VIRT_SNR_CONF" + ;; +*) + REQUIRED_CONF_PATH="$HDC1080_VIRT_SNR_CONF" + ;; +esac + +if [ ! -e "$VIRT_SNR_CONF" ]; then + ln -s "$REQUIRED_CONF_PATH" "$VIRT_SNR_CONF" +else + REAL_CONF_PATH="$(realpath $VIRT_SNR_CONF)" + if [ "$REAL_CONF_PATH" != "$REQUIRED_CONF_PATH" ]; then + rm "$VIRT_SNR_CONF" + ln -s "$REQUIRED_CONF_PATH" "$VIRT_SNR_CONF" + fi +fi diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/board-type-checker/files/board-type-checker-fpb.service b/meta-facebook/meta-bletchley/recipes-bletchley/board-type-checker/files/board-type-checker-fpb.service new file mode 100644 index 0000000000..531aed3eaf --- /dev/null +++ b/meta-facebook/meta-bletchley/recipes-bletchley/board-type-checker/files/board-type-checker-fpb.service @@ -0,0 +1,17 @@ +[Unit] +Description=Front Panel Board Checker +StartLimitIntervalSec=90 +StartLimitBurst=5 +Before=phosphor-virtual-sensor.service +Before=xyz.openbmc_project.EntityManager.service + +[Service] +ExecStart=/usr/libexec/board-type-checker-fpb +SyslogIdentifier=Front Panel Board Checker +Type=oneshot +RemainAfterExit=yes +Restart=on-failure +RestartSec=1 + +[Install] +WantedBy=multi-user.target
\ No newline at end of file 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 8a51904217..c359c5b553 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 @@ -11,4 +11,5 @@ OBMC_IMAGE_EXTRA_INSTALL:append = " \ detect-sled-present \ phosphor-ipmi-ipmb \ fb-ipmi-oem \ + board-type-checker \ " |