Initial commit

This commit is contained in:
Your Name
2026-04-23 17:07:55 +08:00
commit b7e39e063b
16725 changed files with 1625565 additions and 0 deletions
@@ -0,0 +1,90 @@
#!/bin/bash
# Copyright 2020 Google LLC
# Copyright 2020 Quanta Computer Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Global variables
# GPIO to control the host SPI mux
SPI_SW_SELECT=169
# Kernel control string for bind/unbind
KERNEL_FIU_ID="c0000000.spi"
# Kernel sysfs path for bind/unbind
KERNEL_SYSFS_FIU="/sys/bus/platform/drivers/NPCM-FIU"
# the node of FIU is spi for kernel 5.10, but
# for less than or equal kernel 5.4, the node
# is fiu
if ls "$KERNEL_SYSFS_FIU"/*.fiu 1> /dev/null 2>&1; then
KERNEL_FIU_ID="c0000000.fiu"
fi
IMAGE_FILE="/tmp/image-bios"
# Taken from /run/initramfs/update
# Given label name, return mtd node. e.g. `findmtd bmc` returns 'mtd0'
findmtd() {
m=$(grep -xl "$1" /sys/class/mtd/*/name)
m=${m%/name}
m=${m##*/}
echo "$m"
}
cleanup() {
if [ -d "${KERNEL_SYSFS_FIU}/${KERNEL_FIU_ID}" ]; then
echo "${KERNEL_FIU_ID}" > "${KERNEL_SYSFS_FIU}"/unbind
fi
echo low > /sys/class/gpio/gpio${SPI_SW_SELECT}/direction # Switch mux to host
rm -f ${IMAGE_FILE}
}
trap cleanup EXIT SIGHUP SIGINT SIGTERM
main() {
if [ ! -f ${IMAGE_FILE} ]; then
echo "Invalid bios image file!"
exit 1
fi
echo "Starting bios update..."
if [ ! -d "/sys/class/gpio/gpio${SPI_SW_SELECT}" ]; then
echo "${SPI_SW_SELECT}" > /sys/class/gpio/export
fi
echo high > /sys/class/gpio/gpio${SPI_SW_SELECT}/direction # Switch mux to BMC
if [ -d "${KERNEL_SYSFS_FIU}/${KERNEL_FIU_ID}" ]; then
echo "${KERNEL_FIU_ID}" > "${KERNEL_SYSFS_FIU}"/unbind
fi
echo "${KERNEL_FIU_ID}" > "${KERNEL_SYSFS_FIU}"/bind
# BIOS flash is labelled 'bios-primary'
bios_mtd=$(findmtd bios-primary)
if [ -z "${bios_mtd}" ]; then
echo "Cannot find bios flash mtd partition!"
exit 1
fi
if flashcp -v $IMAGE_FILE /dev/"${bios_mtd}" ; then
echo "bios update successfully..."
else
echo "bios update failed..."
exit 1
fi
}
# Exit without running main() if sourced
if ! (return 0 2>/dev/null); then
main "$@"
fi
@@ -0,0 +1,32 @@
#!/bin/sh
# Copyright (c) 2019-present Lenovo
# Copyright (c) 2020 Quanta Computer Inc.
# Licensed under BSD-3, see COPYING.BSD file for details.
IMAGE_FILE="/tmp/bios-image"
SIG_FILE="/tmp/bmc.sig"
BURN_IMAGE="/tmp/image-bios"
sha256_image="FFFF"
sha256_file="EEEE"
echo "Verify bios image..."
if [ -e $IMAGE_FILE ] && [ -e $SIG_FILE ];
then
sha256_image=$(sha256sum "$IMAGE_FILE" | awk '{print $1}')
sha256_file=$(awk '{print $1}' $SIG_FILE)
fi
if [ "$sha256_image" != "$sha256_file" ];
then
echo "bios image verify fail."
rm -f $IMAGE_FILE
echo "Remove bios image"
exit 1
else
echo "bios image verify ok."
mv $IMAGE_FILE $BURN_IMAGE
rm -f $SIG_FILE
exit 0
fi
@@ -0,0 +1,20 @@
[{
"blob": "/flash/bios",
"handler": {
"type": "file",
"path": "/tmp/bios-image"
},
"actions": {
"preparation": {
"type": "skip"
},
"verification": {
"type": "systemd",
"unit": "phosphor-ipmi-flash-bios-verify.service"
},
"update": {
"type": "systemd",
"unit": "phosphor-ipmi-flash-bios-update.service"
}
}
}]
@@ -0,0 +1,9 @@
[Unit]
Description=Phosphor-ipmi-flash update BIOS service
[Service]
ExecStart=/usr/bin/bios-update.sh
Type=oneshot
[Install]
WantedBy=phosphor-ipmi-flash-bios-update.target
@@ -0,0 +1,9 @@
[Unit]
Description=Phosphor-ipmi-flash verify BIOS service
[Service]
ExecStart=/usr/bin/bios-verify.sh
Type=oneshot
[Install]
WantedBy=phosphor-ipmi-flash-bios-verify.target