coreboot-libre-fam15h-rdimm/3rdparty/chromeec/extra/tigertool/flash_dfu.sh

58 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# 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.
FLAGS_timeout=600
IMG=${1:-tigertail.bin}
echo "Flashing ${IMG}"
error() {
printf "%s\n" "$*" >&2
}
die() {
[[ "$#*" == "0" ]] || error "$@"
exit 1
}
flash_stm32_dfu() {
local DFU_DEVICE=0483:df11
local ADDR=0x08000000
[[ -e "${IMG}" ]] || die "File ${IMG} not found!"
# Check for a suitable local dfu-util
local LOCAL_DFU_UTIL=$(which dfu-util)
if [[ -n "${LOCAL_DFU_UTIL}" ]]; then
DFU_VERSION=$("${LOCAL_DFU_UTIL}" -V | head -n1 | cut -d' ' -f2)
if [[ "${DFU_VERSION}" < "0.7" ]]; then
LOCAL_DFU_UTIL=""
fi
fi
local DFU_UTIL=${LOCAL_DFU_UTIL:-'./dfu-util'}
which "${DFU_UTIL}" &> /dev/null || die \
"no dfu-util util found. Did you 'sudo emerge dfu-util'."
local dev_cnt=$(lsusb -d "${DFU_DEVICE}" | wc -l)
if [ $dev_cnt -eq 0 ] ; then
die "unable to locate dfu device at ${DFU_DEVICE}."
elif [ $dev_cnt -ne 1 ] ; then
die "too many dfu devices (${dev_cnt}). Disconnect all but one."
fi
local SIZE=$(wc -c "${IMG}" | cut -d' ' -f1)
# Remove read protection.
sudo timeout -k 10 -s 9 "${FLAGS_timeout}" \
${DFU_UTIL} -a 0 -s ${ADDR}:${SIZE}:force:unprotect -D "${IMG}"
# Wait for mass-erase and reboot after unprotection.
sleep 1
# Actual image flashing.
sudo timeout -k 10 -s 9 "${FLAGS_timeout}" \
$DFU_UTIL -a 0 -s ${ADDR}:${SIZE} -D "${IMG}"
}
flash_stm32_dfu