From 4357d53d395f5c4c8fed92c14f31de0e81959105 Mon Sep 17 00:00:00 2001 From: Lancelot Kao Date: Mon, 22 Feb 2021 15:20:35 -0600 Subject: meta-fii/meta-kudo: support the bios update feature 1. add kudo-bios-update package to support bios update Signed-off-by: Lancelot Kao Change-Id: Ic245828ed3bb0ddf6d7363e7c2c4d3b8b538aa88 Signed-off-by: XP Chen Signed-off-by: Mohaimen Alsamarai --- meta-fii/meta-kudo/conf/machine/kudo.conf | 2 +- .../kudo-fw-utility/kudo-bios-update.bb | 33 ++++++ .../kudo-bios-update/config-bios.json | 19 ++++ .../phosphor-ipmi-flash-bios-update.service | 6 ++ .../recipes-kudo/kudo-fw-utility/kudo-fw.bb | 34 ++++++ .../kudo-fw-utility/kudo-fw/kudo-fw-ver.service | 10 ++ .../kudo-fw-utility/kudo-fw/kudo-fw-ver.sh | 27 +++++ .../kudo-fw-utility/kudo-fw/kudo-fw.sh | 120 +++++++++++++++++++++ .../packagegroups/packagegroup-kudo-apps.bb | 25 ++--- .../image/obmc-phosphor-image.bbappend | 3 - 10 files changed, 263 insertions(+), 16 deletions(-) create mode 100644 meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update.bb create mode 100644 meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update/config-bios.json create mode 100644 meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update/phosphor-ipmi-flash-bios-update.service create mode 100644 meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw.bb create mode 100644 meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw-ver.service create mode 100644 meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw-ver.sh create mode 100644 meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw.sh (limited to 'meta-fii') diff --git a/meta-fii/meta-kudo/conf/machine/kudo.conf b/meta-fii/meta-kudo/conf/machine/kudo.conf index f3a3757f6..a9df13164 100644 --- a/meta-fii/meta-kudo/conf/machine/kudo.conf +++ b/meta-fii/meta-kudo/conf/machine/kudo.conf @@ -20,7 +20,7 @@ OBMC_MACHINE_FEATURES += " \ obmc-host-ipmi \ " -VIRTUAL-RUNTIME_obmc-fan-control = "phosphor-pid-control" PREFERRED_PROVIDER_virtual/obmc-fan-control = "phosphor-pid-control" PREFERRED_PROVIDER_virtual/obmc-system-mgmt = "packagegroup-kudo-apps" PREFERRED_PROVIDER_virtual/obmc-host-ipmi-hw = "phosphor-ipmi-ssif" +PREFERRED_PROVIDER_virtual/obmc-flash-mgmt = "packagegroup-kudo-apps" diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update.bb b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update.bb new file mode 100644 index 000000000..b126bfc8c --- /dev/null +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update.bb @@ -0,0 +1,33 @@ +SUMMARY = "Phosphor OpenBMC Kudo BIOS Firmware Upgrade Command" +DESCRIPTION = "Phosphor OpenBMC Kudo BIOS Firmware Upgrade Comman Daemon" + +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit systemd +inherit obmc-phosphor-systemd + +DEPENDS += "systemd" +DEPENDS += "phosphor-ipmi-flash" +RDEPENDS_${PN} += "libsystemd" +RDEPENDS_${PN} += "bash" + +FILES_${PN} += "${datadir}/phosphor-ipmi-flash/config-bios.json" + +SRC_URI_append_kudo = " \ + file://phosphor-ipmi-flash-bios-update.service \ + file://config-bios.json \ + " + +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE_${PN}_append_kudo = " \ + phosphor-ipmi-flash-bios-update.service \ + " + +do_install () { + install -d ${D}${datadir}/phosphor-ipmi-flash + install -m 0644 ${WORKDIR}/config-bios.json ${D}${datadir}/phosphor-ipmi-flash + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/phosphor-ipmi-flash-bios-update.service ${D}${systemd_system_unitdir} +} diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update/config-bios.json b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update/config-bios.json new file mode 100644 index 000000000..de2382346 --- /dev/null +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update/config-bios.json @@ -0,0 +1,19 @@ +[{ + "blob": "/flash/bios", + "handler": { + "type": "file", + "path": "/run/initramfs/bios-image" + }, + "actions": { + "preparation": { + "type": "skip" + }, + "verification": { + "type": "skip" + }, + "update": { + "type": "systemd", + "unit": "phosphor-ipmi-flash-bios-update.service" + } + } +}] diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update/phosphor-ipmi-flash-bios-update.service b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update/phosphor-ipmi-flash-bios-update.service new file mode 100644 index 000000000..1702153d7 --- /dev/null +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-bios-update/phosphor-ipmi-flash-bios-update.service @@ -0,0 +1,6 @@ +[Unit] +Description=Phosphor-ipmi-flash update BIOS firmware service + +[Service] +ExecStart=/usr/sbin/kudo-fw.sh bios /run/initramfs/bios-image +Type=oneshot \ No newline at end of file diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw.bb b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw.bb new file mode 100644 index 000000000..3f5a30ec6 --- /dev/null +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw.bb @@ -0,0 +1,34 @@ +SUMMARY = "Phosphor OpenBMC Kudo Firmware Upgrade Command" +DESCRIPTION = "Phosphor OpenBMC Kudo Firmware Upgrade Comman Daemon" + +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit systemd +inherit obmc-phosphor-systemd + +DEPENDS += "systemd" +DEPENDS += "phosphor-ipmi-flash" +RDEPENDS_${PN} += "libsystemd" +RDEPENDS_${PN} += "bash" + + +SRC_URI_append_kudo = " \ + file://kudo-fw.sh \ + file://kudo-fw-ver.service \ + file://kudo-fw-ver.sh \ + " + +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE_${PN}_append_kudo = " \ + kudo-fw-ver.service \ + " + +do_install () { + install -d ${D}/${sbindir} + install -m 0755 ${WORKDIR}/kudo-fw.sh ${D}/${sbindir}/kudo-fw.sh + install -m 0755 ${WORKDIR}/kudo-fw-ver.sh ${D}/${sbindir}/kudo-fw-ver.sh + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/kudo-fw-ver.service ${D}${systemd_system_unitdir} +} diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw-ver.service b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw-ver.service new file mode 100644 index 000000000..24e21d236 --- /dev/null +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw-ver.service @@ -0,0 +1,10 @@ +[Unit] +Description=Firmware Version Daemon + +[Service] +RemainAfterExit=yes +Type=oneshot +ExecStart=/usr/sbin/kudo-fw-ver.sh + +[Install] +WantedBy=multi-user.target diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw-ver.sh b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw-ver.sh new file mode 100644 index 000000000..2c502980a --- /dev/null +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw-ver.sh @@ -0,0 +1,27 @@ + +#!/bin/bash +BMC_CPLD_VER_FILE="/run/cpld0.version" +MB_CPLD_VER_FILE="/run/cpld1.version" +ver='' + +function fw_rev() { + case $1 in + cpldb) + rsp=($(i2cget -y -f -a 13 0x76 0x00 i 5)) + ver=$(printf '%d.%d.%d.%d' ${rsp[6]} ${rsp[5]} ${rsp[4]} ${rsp[3]}) + ;; + cpldm) + I2C_BUS_DEV=$(readlink "/sys/bus/i2c/devices/4-0077/channel-2" | cut -c 8-) + rsp=($(i2cget -y -f -a $I2C_BUS_DEV 0x76 0x00 i 5)) + ver=$(printf '%d.%d.%d.%d' ${rsp[6]} ${rsp[5]} ${rsp[4]} ${rsp[3]}) + ;; + *) + ;; + esac +} +fw_rev cpldb +echo "BMC CPLD version : ${ver}" +echo "${ver}" > "${BMC_CPLD_VER_FILE}" +fw_rev cpldm +echo "MB CPLD version : ${ver}" +echo "${ver}" > "${MB_CPLD_VER_FILE}" diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw.sh b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw.sh new file mode 100644 index 000000000..e42795f0c --- /dev/null +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw.sh @@ -0,0 +1,120 @@ +#!/bin/bash + +devpath="/sys/bus/i2c/devices/13-0077/driver" + +# set_gpio_ctrl +# pin #, direction, high(1)/low(0) +function set_gpio_ctrl() { + echo $1 > /sys/class/gpio/export + echo $2 > /sys/class//gpio/gpio$1/direction + echo $3 > /sys/class/gpio/gpio$1/value + echo $1 > /sys/class/gpio/unexport + sleep 1 +} + +function fwbios() { + KERNEL_FIU_ID="c0000000.spi" + KERNEL_SYSFS_FIU="/sys/bus/platform/drivers/NPCM-FIU" + + # switch the SPI mux from Host to BMC + i2cset -y -f -a 13 0x76 0x10 0x01 + + # rescan the spi bus + if [ -d "${KERNEL_SYSFS_FIU}/${KERNEL_FIU_ID}" ]; then + echo "${KERNEL_FIU_ID}" > "${KERNEL_SYSFS_FIU}"/unbind + sleep 1 + fi + echo "${KERNEL_FIU_ID}" > "${KERNEL_SYSFS_FIU}"/bind + + # write to the mtd device + BIOS_MTD=$(cat /proc/mtd | grep "bios" | sed -n 's/^\(.*\):.*/\1/p') + + if [ ! -f $1 ]; then + echo " Cannot find the" $1 "image file" + exit 1 + fi + + echo "Flashing BIOS @/dev/$BIOS_MTD" + flashcp -v $1 /dev/$BIOS_MTD + wait + + # switch the SPI mux from BMC to Host + if [ -d "${KERNEL_SYSFS_FIU}/${KERNEL_FIU_ID}" ]; then + echo "${KERNEL_FIU_ID}" > "${KERNEL_SYSFS_FIU}"/unbind + fi + i2cset -y -f -a 13 0x76 0x10 0x00 + + if [[ $(find ${1} -type f -size +17156k 2>/dev/null) ]]; then + echo "Extracting the SCP from the image" + dd if=$1 bs=1024 skip=17156 count=256 of=/run/initramfs/myscp.img + fwscp /run/initramfs/myscp.img + fi + rm -f $1 +} + + +function fwbmccpld() { + # BMC_JTAG_MUX_1 #218 0:BMC 1:MB + set_gpio_ctrl 218 out 0 + loadsvf -d /dev/jtag0 -s $1 -m 0 + wait + set_gpio_ctrl 218 out 1 + rm -f $1 +} + +function fwmbcpld() { + # BMC_JTAG_MUX_1 #218 0:BMC 1:MB + # BMC_JTAG_SEL #164 0:BMC 1:CPU + set_gpio_ctrl 218 out 1 + set_gpio_ctrl 164 out 1 + loadsvf -d /dev/jtag0 -s $1 -m 0 + wait + rm -f $1 +} + +function fwscp() { + # BMC_I2C_BACKUP_SEL #168 0:failover, 1:main + # BMC_CPU_EEPROM_I2C_SEL #85 0:BMC, 1:CPU + set_gpio_ctrl 168 out 1 + set_gpio_ctrl 85 out 0 + I2C_BUS_DEV=$(ls -l $devpath/"13-0077/" | grep channel-0 | awk '{ print $11}' | cut -c 8-) + ampere_eeprom_prog -b $I2C_BUS_DEV -s 0x50 -p -f $1 + wait + set_gpio_ctrl 85 out 1 + set_gpio_ctrl 168 out 1 + rm -f $1 +} + +function fwscpback() { + # BMC_I2C_BACKUP_SEL #168 0:failover, 1:main + # BMC_CPU_EEPROM_I2C_SEL #85 0:BMC, 1:CPU + set_gpio_ctrl 168 out 0 + set_gpio_ctrl 85 out 0 + I2C_BUS_DEV=$(ls -l $devpath/"13-0077/" | grep channel-0 | awk '{ print $11}' | cut -c 8-) + ampere_eeprom_prog -b $I2C_BUS_DEV -s 0x50 -p -f $1 + wait + set_gpio_ctrl 85 out 1 + set_gpio_ctrl 168 out 1 + rm -f $1 +} + + +case $1 in + bios) + fwbios $2 + ;; + bmccpld) + fwbmccpld $2 + ;; + mbcpld) + fwmbcpld $2 + ;; + scp) + fwscp $2 + ;; + scpback) + fwscpback $2 + ;; + *) + ;; +esac diff --git a/meta-fii/meta-kudo/recipes-kudo/packagegroups/packagegroup-kudo-apps.bb b/meta-fii/meta-kudo/recipes-kudo/packagegroups/packagegroup-kudo-apps.bb index be879455d..8601f9656 100644 --- a/meta-fii/meta-kudo/recipes-kudo/packagegroups/packagegroup-kudo-apps.bb +++ b/meta-fii/meta-kudo/recipes-kudo/packagegroups/packagegroup-kudo-apps.bb @@ -5,26 +5,27 @@ inherit packagegroup PROVIDES = "${PACKAGES}" PACKAGES = " \ - ${PN}-kudo-system \ - ${PN}-kudo-common-utils \ - " + ${PN}-kudo-system \ + ${PN}-kudo-fw \ + " PROVIDES += "virtual/obmc-system-mgmt" RPROVIDES_${PN}-kudo-system += "virtual-obmc-system-mgmt" +RPROVIDES_${PN}-kudo-fw += "virtual-obmc-system-mgmt" SUMMARY_${PN}-kudo-system = "KUDO System" RDEPENDS_${PN}-kudo-system = " \ - google-ipmi-sys \ - google-ipmi-i2c \ - " - -SUMMARY_${PN}-kudo-common-utils = "KUDO common utils" -RDEPENDS_${PN}-kudo-common-utils = " \ ipmitool \ - phosphor-webui \ - phosphor-host-postd \ + ethtool \ + memtester \ loadsvf \ obmc-console \ - phosphor-sel-logger \ + usb-network \ + " + +SUMMARY_${PN}-kudo-fw = "KUDO Firmware" +RDEPENDS_${PN}-kudo-fw = " \ + kudo-fw \ + kudo-bios-update \ " diff --git a/meta-fii/meta-kudo/recipes-phosphor/image/obmc-phosphor-image.bbappend b/meta-fii/meta-kudo/recipes-phosphor/image/obmc-phosphor-image.bbappend index f0eb9724d..dd5b10f2a 100644 --- a/meta-fii/meta-kudo/recipes-phosphor/image/obmc-phosphor-image.bbappend +++ b/meta-fii/meta-kudo/recipes-phosphor/image/obmc-phosphor-image.bbappend @@ -1,6 +1,3 @@ -OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " ipmitool" -OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " ethtool" -OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " loadsvf" OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " google-ipmi-sys" OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " google-ipmi-i2c" OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " phosphor-ipmi-blobs" -- cgit v1.2.3