diff options
author | Tim Lee <timlee660101@gmail.com> | 2020-06-18 04:28:26 +0300 |
---|---|---|
committer | Andrew Geissler <geissonator@yahoo.com> | 2020-07-29 02:51:39 +0300 |
commit | f7fc57b1abe73166f169503ee825fa1c96f888d1 (patch) | |
tree | 4baf5a26c6244c4b6d4d9a7cd3797e6007a4d4d4 /meta-quanta | |
parent | 6215a1a34c53aa2a91f003e31222baaf0d3b56cb (diff) | |
download | openbmc-f7fc57b1abe73166f169503ee825fa1c96f888d1.tar.xz |
meta-quanta: olympus-nuvoton: power: update psu inventory over pmbus
According to PMBUS spec, there is an Inventory Information we can update to PSU inventory.
MFR_ID - Manufacturer
MFR_MODEL - Model
MFR_SERIAL - SerialNumber
IC_DEVICE_ID - PartNumber
redfish/v1/Chassis/chassis/Power
"PowerSupplies": [{
"@odata.id": "/redfish/v1/Chassis/chassis/Power#/PowerSupplies/0",
"Manufacturer": "FlexPower",
"MemberId": "powersupply0",
"Model": "MIS-S-1020",
"Name": "powersupply0",
"PartNumber": "FPS-213-D0000293-101",
"PowerInputWatts": 104.0,
"PowerOutputWatts": 61.5,
"SerialNumber": "MISPS1839A0A0RW",
"Status": {
"Health": "OK",
"State": "Enabled"
}}],
Tested: Verified for Olympus platform
(From meta-quanta rev: cbb46b95df93a6102ebf18c0bf6105f8f6482451)
Signed-off-by: Joseph Liu <kwliu@nuvoton.com>
Signed-off-by: Tim Lee <timlee660101@gmail.com>
Change-Id: I2714293957919193b36effdaa2c07cb8e6eabda4
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Diffstat (limited to 'meta-quanta')
3 files changed, 97 insertions, 0 deletions
diff --git a/meta-quanta/meta-olympus-nuvoton/recipes-olympus-nuvoton/power/first-boot-set-psu.bb b/meta-quanta/meta-olympus-nuvoton/recipes-olympus-nuvoton/power/first-boot-set-psu.bb new file mode 100644 index 000000000..ed9c13687 --- /dev/null +++ b/meta-quanta/meta-olympus-nuvoton/recipes-olympus-nuvoton/power/first-boot-set-psu.bb @@ -0,0 +1,22 @@ +SUMMARY = "Init PSU inventory" +DESCRIPTION = "Setup PSU inventory read from PSU" +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit allarch systemd + +RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_base-utils}" +RDEPENDS_${PN} += "bash" + +SYSTEMD_SERVICE_${PN} = "first-boot-set-psu@.service" +SYSTEMD_SERVICE_${PN} += "first-boot-set-psu@0-2-0x58.service" + +SRC_URI = "file://${BPN}.sh file://${BPN}@.service" + +S = "${WORKDIR}" +do_install() { + install -d ${D}${bindir} ${D}${systemd_system_unitdir} + install ${BPN}.sh ${D}${bindir}/ + install -m 644 ${BPN}@.service ${D}${systemd_system_unitdir}/ +} diff --git a/meta-quanta/meta-olympus-nuvoton/recipes-olympus-nuvoton/power/first-boot-set-psu/first-boot-set-psu.sh b/meta-quanta/meta-olympus-nuvoton/recipes-olympus-nuvoton/power/first-boot-set-psu/first-boot-set-psu.sh new file mode 100644 index 000000000..04b447615 --- /dev/null +++ b/meta-quanta/meta-olympus-nuvoton/recipes-olympus-nuvoton/power/first-boot-set-psu/first-boot-set-psu.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +string='' +pmbus_read() { + data=$(i2cget -f -y $1 $2 $3 i $4) + + if [[ -z "$data" ]]; then + echo "i2c$1 device $2 command $3 error" >&2 + exit 1 + fi + + arry=$(echo ${data} | sed -e "s/$4\: //" | sed -e "s/\0x00//g" | sed -e "s/\0xff//g" | sed -e "s/\0x7f//g" | sed -e "s/\0x0f//g" | sed -e "s/\0x14//g") + + string='' + for d in ${arry} + do + hex=$(echo $d | sed -e "s/0\x//") + string+=$(echo -e "\x${hex}"); + done +} + +update_inventory() { + INVENTORY_SERVICE='xyz.openbmc_project.Inventory.Manager' + INVENTORY_OBJECT='/xyz/openbmc_project/inventory' + INVENTORY_PATH='xyz.openbmc_project.Inventory.Manager' + OBJECT_PATH="/system/chassis/motherboard/powersupply$1" + busctl call \ + ${INVENTORY_SERVICE} \ + ${INVENTORY_OBJECT} \ + ${INVENTORY_PATH} \ + Notify a{oa{sa{sv}}} 1 \ + ${OBJECT_PATH} 1 $2 $3 \ + $4 $5 $6 +} + +if [ $# -eq 0 ]; then + echo 'No PSU device is given' >&2 + exit 1 +fi + +input=$(echo $1 | tr "-" " ") +arr=(${input// / }); + + +pmbus_read ${arr[1]} ${arr[2]} 0x99 11 +update_inventory ${arr[0]} "xyz.openbmc_project.Inventory.Decorator.Asset" 1 "Manufacturer" "s" $string + +pmbus_read ${arr[1]} ${arr[2]} 0x9a 11 +update_inventory ${arr[0]} "xyz.openbmc_project.Inventory.Decorator.Asset" 1 "Model" "s" $string + +pmbus_read ${arr[1]} ${arr[2]} 0xad 21 +update_inventory ${arr[0]} "xyz.openbmc_project.Inventory.Decorator.Asset" 1 "PartNumber" "s" $string + +pmbus_read ${arr[1]} ${arr[2]} 0x9e 18 +update_inventory ${arr[0]} "xyz.openbmc_project.Inventory.Decorator.Asset" 1 "SerialNumber" "s" $string + +update_inventory ${arr[0]} "xyz.openbmc_project.Inventory.Decorator.Cacheable" 1 "Cached" "b" "true" +update_inventory ${arr[0]} "xyz.openbmc_project.Inventory.Decorator.Replaceable" 1 "FieldReplaceable" "b" "true" +update_inventory ${arr[0]} "xyz.openbmc_project.Inventory.Item" 1 "Present" "b" "true" +update_inventory ${arr[0]} "xyz.openbmc_project.Inventory.Item" 1 "PrettyName" "s" "powersupply${arr[0]}" +update_inventory ${arr[0]} "xyz.openbmc_project.Inventory.Item.PowerSupply" 0 diff --git a/meta-quanta/meta-olympus-nuvoton/recipes-olympus-nuvoton/power/first-boot-set-psu/first-boot-set-psu@.service b/meta-quanta/meta-olympus-nuvoton/recipes-olympus-nuvoton/power/first-boot-set-psu/first-boot-set-psu@.service new file mode 100644 index 000000000..1d414f577 --- /dev/null +++ b/meta-quanta/meta-olympus-nuvoton/recipes-olympus-nuvoton/power/first-boot-set-psu/first-boot-set-psu@.service @@ -0,0 +1,14 @@ +[Unit] +Description=Init PSU Inventory for PSU %I +Wants=mapper-wait@-xyz-openbmc_project-inventory.service +After=mapper-wait@-xyz-openbmc_project-inventory.service + +[Service] +ExecStart=/usr/bin/first-boot-set-psu.sh %i +RemainAfterExit=yes +SyslogIdentifier=first-boot-set-psu +Restart=on-failure +RestartSec=20 + +[Install] +WantedBy=multi-user.target |