blob: 98754393da357d12fc75d2b4f6f248e4c1b58ddc [file] [log] [blame]
#!/bin/sh
#
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
set -e
# Status codes defined by tpm-firmware-updater.
EXIT_CODE_SUCCESS=0
EXIT_CODE_ERROR=1
EXIT_CODE_NO_UPDATE=3
EXIT_CODE_UPDATE_FAILED=4
EXIT_CODE_LOW_BATTERY=5
EXIT_CODE_NOT_UPDATABLE=6
EXIT_CODE_SUCCESS_COLD_REBOOT=8
EXIT_CODE_BAD_RETRY=9
# Reboot and wait to guarantee that we don't proceed further until reboot
# actually happens. Show log if a param is given.
reboot_here() {
local answer
if [ -n "$1" ]; then
read -p "Press L for log or [ENTER] to reboot." answer
case ${answer} in
[lL]*)
less /var/log/tpm-firmware-updater.log
;;
esac
else
read -p "Press [ENTER] to reboot."
fi
reboot
sleep 1d
exit 1
}
main() {
if [ ! "$#" -eq "0" ]; then
echo "This script does not take any command line arguments."
reboot_here
fi
(
set +e
/usr/sbin/tpm-firmware-updater 2> /var/log/tpm-firmware-updater.log
status=$?
echo "${status}" > /run/tpm-firmware-updater.status
)
local status="$(cat /run/tpm-firmware-updater.status)"
case "${status:-1}" in
${EXIT_CODE_SUCCESS}|${EXIT_CODE_SUCCESS_COLD_REBOOT})
echo "TPM Firmware Update completed successfully."
reboot_here
;;
${EXIT_CODE_NO_UPDATE})
echo "No update needed."
reboot_here 1
;;
${EXIT_CODE_ERROR})
echo "Unexpected error."
reboot_here 1
;;
${EXIT_CODE_UPDATE_FAILED})
# The TPM is likely to be in an inoperational state due to the failed
# update. If it is, we need to go through recovery anyways to retry the
# update. Show a message to the user telling them about the failed update
# and reboot so the firmware can determine whether recovery is necessary.
echo "Something went wrong and the update wasn't successful."
reboot_here 1
;;
${EXIT_CODE_LOW_BATTERY})
echo "Battery is low. Charge battery to at least 10% and try again."
;;
${EXIT_CODE_NOT_UPDATABLE})
echo "Not updatable."
reboot_here 1
;;
${EXIT_CODE_BAD_RETRY})
echo "Too many prior update attempts or firmware image mismatch."
reboot_here 1
;;
*)
echo "Undefined status code. TPM Firmware Update wasn't successful."
reboot_here 1
;;
esac
exit 0
}
main "$@"