mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-30 18:41:11 +00:00
When a nonexisting file is specified as the EC image, the ec flash
programming script reports the error, but continues running and
returns zero status (success) after completion.
With this change the exit status on some errors gets communicated to
the caller.
The openocd script is edited to drop the unused parameter of the
flash_lm4() function and the flash_ec script is edited not to require
EC images to be executable.
BRANCH=none
BUG=chrome-os-partner:15610
TEST=manual
. run flash_ec with nonexisting or nonreadable file as a parameter,
observe it to report proper return status. Run it with a proper
image file name and observe it succeed.
. run the command again, while the device is being programmed enter
'ctl-c', observe programming stepped but the 'Restoring servo
settings..." message still showing up.
Change-Id: Iac0b233fe579b0d5a84cf5a9acf85ed8bf10422e
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/37363
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
149 lines
3.3 KiB
Bash
Executable File
149 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright (c) 2012 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.
|
|
|
|
COMMON_SH=/usr/lib/crosutils/common.sh
|
|
. "${COMMON_SH}" || exit 1
|
|
|
|
# Flags
|
|
DEFINE_string board "${DEFAULT_BOARD}" \
|
|
"The board to run debugger on."
|
|
DEFINE_string image "" \
|
|
"Full pathname of the EC firmware image to flash."
|
|
DEFINE_boolean ro "${FLAGS_FALSE}" \
|
|
"Write only the read-only partition"
|
|
DEFINE_string offset "0" \
|
|
"Offset where to program the image from."
|
|
|
|
# Parse command line
|
|
FLAGS_HELP="usage: $0 [flags]"
|
|
FLAGS "$@" || exit 1
|
|
eval set -- "${FLAGS_ARGV}"
|
|
check_flags_only_and_allow_null_arg "$@" && set --
|
|
|
|
set -e
|
|
|
|
cleanup() {
|
|
if [ -n "${save}" ]; then
|
|
info "Restoring servo settings..."
|
|
servo_restore "$save"
|
|
fi
|
|
|
|
# reset the EC
|
|
dut_control cold_reset:on
|
|
dut_control cold_reset:off
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
BOARD=${FLAGS_board}
|
|
BOARD_ROOT=/build/${BOARD}
|
|
|
|
# Possible default EC images
|
|
if [ "${FLAGS_ro}" = ${FLAGS_TRUE} ] ; then
|
|
EC_FILE=ec.RO.flat
|
|
else
|
|
EC_FILE=ec.bin
|
|
fi
|
|
EMERGE_BUILD=${BOARD_ROOT}/firmware/${EC_FILE}
|
|
LOCAL_BUILD=${SRC_ROOT}/platform/ec/build/${BOARD}/${EC_FILE}
|
|
|
|
# Find the EC image to use
|
|
function ec_image() {
|
|
# No image specified on the command line, try default ones
|
|
if [[ -n "${FLAGS_image}" ]] ; then
|
|
if [ -f "${FLAGS_image}" ]; then
|
|
echo "${FLAGS_image}"
|
|
return
|
|
fi
|
|
die "Invalid image path : ${FLAGS_image}"
|
|
else
|
|
if [ -f "${LOCAL_BUILD}" ]; then
|
|
echo "${LOCAL_BUILD}"
|
|
return
|
|
fi
|
|
if [ -f "${EMERGE_BUILD}" ]; then
|
|
echo "${EMERGE_BUILD}"
|
|
return
|
|
fi
|
|
fi
|
|
die "no EC image found : build one or specify one."
|
|
}
|
|
|
|
# Find the EC UART on the servo v2
|
|
function ec_uart() {
|
|
SERVOD_FAIL="Cannot communicate with servo. is servod running ?"
|
|
(dut-control uart1_pty || die "${SERVOD_FAIL}") | cut -d: -f2
|
|
}
|
|
|
|
# Servo variables management
|
|
|
|
SERVO_VARS="uart1_en uart1_parity uart1_baudrate \
|
|
jtag_buf_on_flex_en jtag_buf_en spi1_vref"
|
|
|
|
function dut_control() {
|
|
dut-control "$1" >/dev/null
|
|
}
|
|
|
|
function servo_save() {
|
|
dut-control ${SERVO_VARS}
|
|
}
|
|
|
|
function servo_restore() {
|
|
echo "$1" | while read line
|
|
do
|
|
dut_control "$line"
|
|
done
|
|
}
|
|
|
|
# Board specific flashing scripts
|
|
|
|
function flash_daisy() {
|
|
TOOL_PATH="${SCRIPT_LOCATION}/../build/${BOARD}/util:$PATH"
|
|
STM32MON=$(PATH="${TOOL_PATH}" which stm32mon)
|
|
if [ ! -x "$STM32MON" ]; then
|
|
die "no stm32mon util found."
|
|
fi
|
|
|
|
info "Using serial flasher : ${STM32MON}"
|
|
|
|
dut_control uart1_en:on
|
|
dut_control uart1_parity:even
|
|
dut_control uart1_baudrate:115200
|
|
# force the EC to boot in serial monitor mode
|
|
dut_control spi1_vref:pp3300
|
|
# reset the EC
|
|
dut_control cold_reset:on
|
|
dut_control cold_reset:off
|
|
${STM32MON} -d ${EC_UART} -e -w ${IMG}
|
|
}
|
|
|
|
function flash_link() {
|
|
OCD_CFG="servo_v2_slower.cfg"
|
|
OCD_PATH="${SRC_ROOT}/platform/ec/chip/lm4/openocd"
|
|
OCD_CMDS="init ; flash_lm4 ${IMG} ${FLAGS_offset}; shutdown;"
|
|
|
|
dut_control jtag_buf_on_flex_en:on
|
|
dut_control jtag_buf_en:on
|
|
|
|
sudo openocd -s "${OCD_PATH}" -f "${OCD_CFG}" -c "${OCD_CMDS}" || \
|
|
die "Failed to program ${IMG}"
|
|
}
|
|
|
|
IMG="$(ec_image)"
|
|
info "Using EC image : ${IMG}"
|
|
|
|
EC_UART="$(ec_uart)"
|
|
info "EC UART pty : ${EC_UART}"
|
|
|
|
save="$(servo_save)"
|
|
|
|
case "${BOARD}" in
|
|
daisy | snow | spring ) flash_daisy ;;
|
|
link ) flash_link ;;
|
|
*) die "board ${BOARD} not supported" ;;
|
|
esac
|
|
|
|
info "Flashing done."
|