diff --git a/initrd/bin/flash.sh b/initrd/bin/flash.sh index cd5b9a6e1..926e3457e 100755 --- a/initrd/bin/flash.sh +++ b/initrd/bin/flash.sh @@ -21,7 +21,11 @@ case "$CONFIG_FLASH_OPTIONS" in esac flash_rom() { - ROM=$1 + #backup firmware to rollback into in all failed attempts + $CONFIG_FLASH_OPTIONS -r /tmp/${CONFIG_BOARD}_bak.rom + + ROM=$1 # ROM file to flash + if [ "$READ" -eq 1 ]; then $CONFIG_FLASH_OPTIONS -r "${ROM}" \ || recovery "Backup to $ROM failed" @@ -47,9 +51,10 @@ flash_rom() { dd if=/tmp/pchstrp9.bin bs=1 count=4 seek=292 of=/tmp/${CONFIG_BOARD}.rom conv=notrunc >/dev/null 2>&1 fi - warn "Do not power off computer. Updating firmware, this will take a few minutes" + warn "Do not power off computer. Updating firmware, this could take a few minutes" $CONFIG_FLASH_OPTIONS -w /tmp/${CONFIG_BOARD}.rom 2>&1 \ - || recovery "$ROM: Flash failed" + || $CONFIG_FLASH_OPTIONS -w /tmp/${CONFIG_BOARD}_bak.rom \ + && recovery "$ROM: Flash failed, restored previous known good firmware state" \ fi } @@ -104,6 +109,6 @@ fi flash_rom $ROM # don't leave temporary files lying around -rm -f /tmp/flash.sh.bak +rm -f /tmp/flash.sh.bak /tmp/${CONFIG_BOARD}_bak.rom exit 0