#!/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."
