Initial commit
This commit is contained in:
Executable
+201
@@ -0,0 +1,201 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Helper script to flash FRU and Boot EEPROM devices.
|
||||
#
|
||||
# Syntax for FRU:
|
||||
# ampere_firmware_upgrade.sh fru <image> [<dev>]
|
||||
# dev: 1 for MB FRU (default), 2 for BMC FRU.
|
||||
#
|
||||
# Syntax for EEPROM:
|
||||
# ampere_firmware_upgrade.sh eeprom <image> [<dev>]
|
||||
# dev: 1 for main Boot EEPROM (default), 2 for secondary Boot EEPROM (if supported)
|
||||
#
|
||||
# Syntax for Mainboard CPLD:
|
||||
# ampere_firmware_upgrade.sh main_cpld <image>
|
||||
#
|
||||
# Syntax for BMC CPLD:
|
||||
# ampere_firmware_upgrade.sh bmc_cpld <image>
|
||||
#
|
||||
# Syntax for Backplane CPLD:
|
||||
# ampere_firmware_upgrade.sh bp_cpld <image> [<target>]
|
||||
# target: 1 for Front Backplane 1
|
||||
# 2 for Front Backplane 2
|
||||
# 3 for Front Backplane 3
|
||||
# 4 for Rear Backplane 1
|
||||
# 5 for Rear Backplane 2
|
||||
#
|
||||
|
||||
# shellcheck disable=SC2046
|
||||
|
||||
do_eeprom_flash() {
|
||||
FIRMWARE_IMAGE=$IMAGE
|
||||
BACKUP_SEL=$2
|
||||
|
||||
# Turn off the Host if it is currently ON
|
||||
chassisstate=$(obmcutil chassisstate | awk -F. '{print $NF}')
|
||||
echo "Current Chassis State: $chassisstate"
|
||||
if [ "$chassisstate" == 'On' ];
|
||||
then
|
||||
echo "Turning the Chassis off"
|
||||
obmcutil chassisoff
|
||||
sleep 15
|
||||
# Check if HOST was OFF
|
||||
chassisstate_off=$(obmcutil chassisstate | awk -F. '{print $NF}')
|
||||
if [ "$chassisstate_off" == 'On' ];
|
||||
then
|
||||
echo "Error : Failed turning the Chassis off"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Switch EEPROM control to BMC AST2600 I2C
|
||||
# BMC_GPIOW6_SPI0_PROGRAM_SEL
|
||||
gpioset $(gpiofind spi0-program-sel)=1
|
||||
|
||||
# BMC_GPIOX0_I2C_BACKUP_SEL (GPIO 184)
|
||||
if [[ $BACKUP_SEL == 1 ]]; then
|
||||
echo "Run update Primary EEPROM"
|
||||
gpioset $(gpiofind i2c-backup-sel)=0
|
||||
elif [[ $BACKUP_SEL == 2 ]]; then
|
||||
echo "Run update Failover EEPROM"
|
||||
gpioset $(gpiofind i2c-backup-sel)=1
|
||||
else
|
||||
echo "Please choose Primary EEPROM (1) or Failover EEPROM (2)"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# The EEPROM (AT24C64WI) with address 0x50 at BMC_I2C11 bus
|
||||
# Write Firmware to EEPROM and read back for validation
|
||||
ampere_eeprom_prog -b 10 -s 0x50 -p -f "$FIRMWARE_IMAGE"
|
||||
|
||||
# Switch to primary EEPROM
|
||||
gpioset $(gpiofind i2c-backup-sel)=0
|
||||
|
||||
# Switch EEPROM control to CPU HOST
|
||||
gpioset $(gpiofind spi0-program-sel)=0
|
||||
|
||||
if [ "$chassisstate" == 'On' ];
|
||||
then
|
||||
sleep 5
|
||||
echo "Turn on the Host"
|
||||
obmcutil poweron
|
||||
fi
|
||||
}
|
||||
|
||||
do_fru_flash() {
|
||||
FRU_IMAGE=$1
|
||||
FRU_DEV=$2
|
||||
|
||||
if [[ $FRU_DEV == 1 ]]; then
|
||||
if [ -f /sys/bus/i2c/devices/4-0050/eeprom ]; then
|
||||
FRU_DEVICE="/sys/bus/i2c/devices/4-0050/eeprom"
|
||||
else
|
||||
FRU_DEVICE="/sys/bus/i2c/devices/3-0050/eeprom"
|
||||
fi
|
||||
echo "Flash MB FRU with image $IMAGE at $FRU_DEVICE"
|
||||
elif [[ $FRU_DEV == 2 ]]; then
|
||||
FRU_DEVICE="/sys/bus/i2c/devices/14-0050/eeprom"
|
||||
echo "Flash BMC FRU with image $IMAGE at $FRU_DEVICE"
|
||||
else
|
||||
echo "Please select MB FRU (1) or BMC FRU (2)"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
ampere_fru_upgrade -d "$FRU_DEVICE" -f "$FRU_IMAGE"
|
||||
|
||||
systemctl restart xyz.openbmc_project.FruDevice.service
|
||||
systemctl restart phosphor-ipmi-host.service
|
||||
|
||||
echo "Done"
|
||||
}
|
||||
|
||||
do_mb_cpld_flash() {
|
||||
MB_CPLD_IMAGE=$1
|
||||
echo "Flashing MB CPLD"
|
||||
gpioset $(gpiofind hpm-fw-recovery)=1
|
||||
gpioset $(gpiofind jtag-program-sel)=1
|
||||
sleep 2
|
||||
ampere_cpldupdate_jtag -t 1 -p "$MB_CPLD_IMAGE"
|
||||
gpioset $(gpiofind hpm-fw-recovery)=0
|
||||
echo "Done"
|
||||
}
|
||||
|
||||
do_bmc_cpld_flash() {
|
||||
BMC_CPLD_IMAGE=$1
|
||||
echo "Flashing BMC CPLD"
|
||||
gpioset $(gpiofind jtag-program-sel)=0
|
||||
sleep 2
|
||||
ampere_cpldupdate_jtag -t 1 -p "$BMC_CPLD_IMAGE"
|
||||
echo "Done"
|
||||
}
|
||||
|
||||
do_bp_cpld_flash() {
|
||||
BP_CPLD_IMAGE=$1
|
||||
BP_TARGET=$2
|
||||
if [[ $BP_TARGET == 1 ]]; then
|
||||
echo "Flashing Front Backplane 1 CPLD"
|
||||
ampere_cpldupdate_i2c -b 101 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
|
||||
elif [[ $BP_TARGET == 2 ]]; then
|
||||
echo "Flashing Front Backplane 2 CPLD"
|
||||
ampere_cpldupdate_i2c -b 102 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
|
||||
elif [[ $BP_TARGET == 3 ]]; then
|
||||
echo "Flashing Front Backplane 3 CPLD"
|
||||
ampere_cpldupdate_i2c -b 100 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
|
||||
elif [[ $BP_TARGET == 4 ]]; then
|
||||
echo "Flashing Rear Backplane 1 CPLD"
|
||||
ampere_cpldupdate_i2c -b 103 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
|
||||
elif [[ $BP_TARGET == 5 ]]; then
|
||||
echo "Flashing Rear Backplane 2 CPLD"
|
||||
ampere_cpldupdate_i2c -b 104 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
|
||||
fi
|
||||
|
||||
echo "Done"
|
||||
}
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Usage:"
|
||||
echo " - Flash Boot EEPROM"
|
||||
echo " $(basename "$0") eeprom <Image file>"
|
||||
echo " - Flash FRU"
|
||||
echo " $(basename "$0") fru <Image file> [dev]"
|
||||
echo " Where:"
|
||||
echo " dev: 1 - MB FRU, 2 - BMC FRU"
|
||||
echo " - Flash Mainboard CPLD"
|
||||
echo " $(basename "$0") mb_cpld <Image file>"
|
||||
echo " - Flash BMC CPLD (only for DC-SCM BMC board)"
|
||||
echo " $(basename "$0") bmc_cpld <Image file>"
|
||||
echo " - Flash Backplane CPLD"
|
||||
echo " $(basename "$0") bp_cpld <Image file> <Target> "
|
||||
echo " Where:"
|
||||
echo " Target: 1 - FrontBP1, 2 - FrontBP2, 3 - FrontBP3"
|
||||
echo " 4 - RearBP1, 5 - RearBP2"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
TYPE=$1
|
||||
IMAGE=$2
|
||||
TARGET=$3
|
||||
if [ -z "$3" ]; then
|
||||
BACKUP_SEL=1
|
||||
else
|
||||
BACKUP_SEL=$3
|
||||
fi
|
||||
|
||||
if [[ $TYPE == "eeprom" ]]; then
|
||||
# Run EEPROM update: write/read/validation with CRC32 checksum
|
||||
do_eeprom_flash "$IMAGE" "$BACKUP_SEL"
|
||||
elif [[ $TYPE == "fru" ]]; then
|
||||
# Run FRU update
|
||||
do_fru_flash "$IMAGE" "$BACKUP_SEL"
|
||||
elif [[ $TYPE == "mb_cpld" ]]; then
|
||||
# Run Mainboard CPLD update
|
||||
do_mb_cpld_flash "$IMAGE"
|
||||
elif [[ $TYPE == "bmc_cpld" ]]; then
|
||||
# Run CPLD BMC update
|
||||
do_bmc_cpld_flash "$IMAGE"
|
||||
elif [[ $TYPE == "bp_cpld" ]]; then
|
||||
# Run Backplane CPLD update
|
||||
do_bp_cpld_flash "$IMAGE" "$TARGET"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user