| #!/bin/bash |
| |
| # shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions |
| source /usr/libexec/fb-common-functions |
| # shellcheck source=meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd |
| source /usr/libexec/phosphor-state-manager/power-cmd |
| |
| IMAGE_FILE=$1 |
| |
| # SPI Get Link name |
| SPI_DEV=$(find /sys/bus/spi/devices/ -type l -exec sh -c 'readlink "$1" | grep -q "1e631000.spi" && basename "$1"' _ {} \;) |
| SPI_PATH="/sys/bus/spi/drivers/spi-nor" |
| |
| set_gpio_to_bmc() |
| { |
| echo "switch bios GPIO to bmc" |
| # bmc-spi-mux-select-0: 1:BMC / 0:CPU |
| set_gpio bmc-spi-mux-select-0 1 |
| return 0 |
| } |
| |
| set_gpio_to_cpu() |
| { |
| echo "switch bios GPIO to CPU" |
| # bmc-spi-mux-select-0: 1:BMC / 0:CPU |
| set_gpio bmc-spi-mux-select-0 0 |
| return 0 |
| } |
| |
| echo "Bios upgrade started at $(date)" |
| |
| #Power off host server. |
| echo "Power off host server" |
| power_off |
| sleep 15 |
| if [ "$(power_status)" != "off" ]; |
| then |
| echo "Host server didn't power off" |
| echo "Bios upgrade failed" |
| exit 1 |
| fi |
| echo "Host server powered off" |
| |
| #Flip GPIO to access SPI flash used by host. |
| echo "Set GPIO $GPIO to access SPI flash from BMC used by host" |
| set_gpio_to_bmc |
| |
| #Bind spi driver to access flash |
| echo "bind aspeed-smc spi driver" |
| echo -n "$SPI_DEV" > "$SPI_PATH"/bind |
| sleep 1 |
| |
| #Flashcp image to device. |
| if [ -e "$IMAGE_FILE" ]; |
| then |
| echo "Bios image is $IMAGE_FILE" |
| for d in mtd6 mtd7 ; do |
| if [ -e "/dev/$d" ]; then |
| mtd=$(cat /sys/class/mtd/$d/name) |
| if [ "$mtd" == "pnor" ]; then |
| echo "Flashing bios image to $d..." |
| if flashcp -v "$IMAGE_FILE" /dev/$d; then |
| echo "bios updated successfully..." |
| else |
| echo "bios update failed..." |
| fi |
| break |
| fi |
| echo "$d is not a pnor device" |
| fi |
| echo "$d not available" |
| done |
| else |
| echo "Bios image $IMAGE_FILE doesn't exist" |
| fi |
| |
| #Unbind spi driver |
| sleep 1 |
| echo "Unbind aspeed-smc spi driver" |
| echo -n "$SPI_DEV" > "$SPI_PATH"/unbind |
| sleep 10 |
| |
| #Flip GPIO back for host to access SPI flash |
| echo "Set GPIO $GPIO back for host to access SPI flash" |
| set_gpio_to_cpu |
| sleep 5 |
| |
| echo "Please do sled cycle." |