blob: c1c16aba5c825f1d1ee8f55cba63ab53ec4baaff [file] [log] [blame]
#!/bin/bash
# Handle the SCP Failover feature in which:
# - If the BMC receives the SCP_AUTH_FAILURE signal from Socket0,
# attempts to boot from the failover boot EEPROM.
# - If the second boot fails, treats this as a permanent boot failure
# and logs an event in SEL.
# shellcheck disable=SC1091
# shellcheck disable=SC2046
source /usr/sbin/gpio-lib.sh
source /usr/sbin/gpio-defs.sh
# Check the I2C_BACKUP_SEL
I2C_BACKUP_SEL=$(gpio_get_val "$BMC_I2C_BACKUP_SEL")
if [ "${I2C_BACKUP_SEL}" == "1" ]; then
# If it is HIGH, set it LOW. Then reset the Host to boot from
# the failover Boot EEPROM.
echo "scp-failover: switch HOST to failover boot EEPROM"
gpioset $(gpiofind BMC_SELECT_EEPROM)=0
# Reset the Host to boot on the failover EEPROM
ampere_power_util.sh mb force_reset
else
# Turn OFF Host as SCP firmware on both Boot EEPROM fail
obmcutil chassisoff
echo "scp-failover: switch HOST back to the main Boot EEPROM"
gpioset $(gpiofind BMC_SELECT_EEPROM)=1
# Log event
ampere_add_redfishevent.sh OpenBMC.0.1.GeneralFirmwareSecurityViolation.Critical "SCP Authentication failure"
fi