129 lines
3.8 KiB
Bash
129 lines
3.8 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
bios_image=$(ls $1/*.bin)
|
||
|
|
|
||
|
|
bios_mtd="/dev/mtd/bios"
|
||
|
|
bios_id=$(basename "$1")
|
||
|
|
bios_slot=""
|
||
|
|
|
||
|
|
power_obj="xyz.openbmc_project.State.Chassis"
|
||
|
|
power_path="/xyz/openbmc_project/state/chassis0"
|
||
|
|
power_intf="xyz.openbmc_project.State.Chassis"
|
||
|
|
power_prop="CurrentPowerState"
|
||
|
|
|
||
|
|
update_obj="xyz.openbmc_project.Software.BMC.Updater"
|
||
|
|
update_path="/xyz/openbmc_project/software/"
|
||
|
|
target_intf="xyz.openbmc_project.Software.UpdateTarget"
|
||
|
|
target_prop="UpdateTargetSlot"
|
||
|
|
|
||
|
|
check_env() {
|
||
|
|
echo "[Info]: Check Environment."
|
||
|
|
#check power status. if On, set to Off.
|
||
|
|
#power_status=$(busctl get-property $power_obj $power_path $power_intf $power_prop)
|
||
|
|
#if [[ $power_status == *On* ]]; then
|
||
|
|
# busctl set-property $power_obj $power_path $power_intf RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.Off
|
||
|
|
#fi
|
||
|
|
sleep 10
|
||
|
|
|
||
|
|
#add other action to prepare flash bios.
|
||
|
|
bios_slot=$(busctl get-property $update_obj $update_path$bios_id $target_intf $target_prop)
|
||
|
|
bios_slot=$(echo "$bios_slot" |cut -d "\"" -f2)
|
||
|
|
if [ "$bios_slot" = "xyz.openbmc_project.Software.UpdateTarget.TargetSlot.Primary" ]; then
|
||
|
|
bios_slot="Primary"
|
||
|
|
elif [ "$bios_slot" = "xyz.openbmc_project.Software.UpdateTarget.TargetSlot.Secondary" ]; then
|
||
|
|
bios_slot="Backup"
|
||
|
|
elif [ "$bios_slot" = "xyz.openbmc_project.Software.UpdateTarget.TargetSlot.Both" ]; then
|
||
|
|
bios_slot="Both"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
switch_primary_flash_to_bmc() {
|
||
|
|
echo "[Info]: Switch Main BIOS Flash To BMC."
|
||
|
|
if [ -d /sys/bus/platform/drivers/spi-aspeed-smc/1e630000.spi ]; then
|
||
|
|
echo -n "1e630000.spi" > /sys/bus/platform/drivers/spi-aspeed-smc/unbind
|
||
|
|
fi
|
||
|
|
|
||
|
|
#Set Mux to bmc.
|
||
|
|
i2ctransfer -y -a 0 w3@0x0d 0xa0 0x03 0x80
|
||
|
|
|
||
|
|
#Switch to primary BIOS flash
|
||
|
|
i2ctransfer -y -a 0 w3@0x0d 0xa1 0x03 0x80
|
||
|
|
|
||
|
|
#mount bios flash to BMC
|
||
|
|
echo -n "1e630000.spi" > /sys/bus/platform/drivers/spi-aspeed-smc/bind
|
||
|
|
sleep 5
|
||
|
|
cat /proc/mtd
|
||
|
|
}
|
||
|
|
|
||
|
|
switch_secondary_flash_to_bmc() {
|
||
|
|
echo "[Info]: Switch Backup BIOS Flash To BMC."
|
||
|
|
if [ -d /sys/bus/platform/drivers/spi-aspeed-smc/1e630000.spi ]; then
|
||
|
|
echo -n "1e630000.spi" > /sys/bus/platform/drivers/spi-aspeed-smc/unbind
|
||
|
|
fi
|
||
|
|
|
||
|
|
#Set Mux to bmc.
|
||
|
|
i2ctransfer -y -a 0 w3@0x0d 0xa0 0x03 0x80
|
||
|
|
|
||
|
|
#Switch to backup BIOS flash
|
||
|
|
i2ctransfer -y -a 0 w3@0x0d 0xa1 0x03 0x40
|
||
|
|
|
||
|
|
#mount bios flash to BMC
|
||
|
|
echo -n "1e630000.spi" > /sys/bus/platform/drivers/spi-aspeed-smc/bind
|
||
|
|
sleep 5
|
||
|
|
cat /proc/mtd
|
||
|
|
}
|
||
|
|
|
||
|
|
flash_bios() {
|
||
|
|
echo "[Info]: Flash BIOS."
|
||
|
|
#Which flash need to be update, e.g. get for Manifest or Settings.
|
||
|
|
# bios_update_select=
|
||
|
|
#Check MTD Exist
|
||
|
|
|
||
|
|
if [[ ! -e $bios_mtd ]]; then
|
||
|
|
echo "[Error]: bios flash not found in $bios_mtd"
|
||
|
|
exit 3
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "[Info]: bios_image=$bios_image"
|
||
|
|
echo "[Info]: bios_mtd=$bios_mtd"
|
||
|
|
echo "/usr/sbin/flashcp $bios_image $bios_mtd"
|
||
|
|
/usr/sbin/flashcp $bios_image $bios_mtd
|
||
|
|
}
|
||
|
|
|
||
|
|
switch_flash_to_cpu() {
|
||
|
|
echo "[Info]: Switch Main BIOS Flash To CPU."
|
||
|
|
echo -n "1e630000.spi" > /sys/bus/platform/drivers/spi-aspeed-smc/unbind
|
||
|
|
|
||
|
|
sleep 5
|
||
|
|
#Set Mux to CPU.
|
||
|
|
i2ctransfer -y -a 0 w3@0x0d 0xa0 0x03 0x00
|
||
|
|
}
|
||
|
|
|
||
|
|
power_on_system() {
|
||
|
|
echo "[Info]: Power On System After Update BIOS."
|
||
|
|
#check power status. if Off, set to On.
|
||
|
|
power_status=$(busctl get-property $power_obj $power_path $power_intf $power_prop)
|
||
|
|
if [[ $power_status == *Off* ]]; then
|
||
|
|
sleep 5
|
||
|
|
busctl set-property $power_obj $power_path $power_intf RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.On
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
check_env
|
||
|
|
if [ "$bios_slot" = "Primary" ]; then
|
||
|
|
switch_primary_flash_to_bmc
|
||
|
|
flash_bios
|
||
|
|
elif [ "$bios_slot" = "Backup" ]; then
|
||
|
|
switch_secondary_flash_to_bmc
|
||
|
|
flash_bios
|
||
|
|
elif [ "$bios_slot" = "Both" ]; then
|
||
|
|
switch_primary_flash_to_bmc
|
||
|
|
flash_bios
|
||
|
|
sleep 5
|
||
|
|
switch_secondary_flash_to_bmc
|
||
|
|
flash_bios
|
||
|
|
fi
|
||
|
|
switch_flash_to_cpu
|
||
|
|
#power_on_system
|
||
|
|
sleep 5
|