summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorNamyoon Woo <namyoon@chromium.org>2019-01-17 16:18:22 -0800
committerchrome-bot <chrome-bot@chromium.org>2019-01-30 20:41:30 -0800
commit479672d677c13aafb53c1695a41be26e1ff0a247 (patch)
tree04c1a383317e82a87598c29c89df029268b02a69 /util
parent8eaeaa23c39159574e941381c6fd70454e1c85e7 (diff)
downloadchrome-ec-479672d677c13aafb53c1695a41be26e1ff0a247.tar.gz
flash_ec: add "--read" and "--verify" flags for npcx chip.
"--read" takes a following string as a path to store the image file. If it is specified, flash_ec reads only an EC firmware image and store it to the given path, but does not program EC firmware. "--verify" lets flash_ec read EC firmware image after flashing it, and compare the read image to the source image to check if they match. CQ-DEPEND=CL:1409497 BUG=b:123044471 BRANCH=none TEST=manually ran flash_ec on coral. util/flash_ec --board coral --image ${IMG_PATH} --verify --verbose util/flash_ec --board coral --read ${TEMP_IMG_PATH} --verbose util/flash_ec --board coral --read "/tmp/ec.co ral.bin" --verbose util/flash_ec --chip npcx_spi --raiden --image ${IMG_PATH} --verify util/flash_ec --chip npcx_spi --raiden --read ${TEMP_IMG_PATH} util/flash_ec --chip npcx_spi --raiden --read "/tmp/ec.co r al.bin" util/flash_ec --board nocturne --image ${IMG_PATH} --verify --verbose util/flash_ec --board nocturne --read ${TEMP_IMG_PATH} --verbose Change-Id: I5461ec7ce0c6d0bdb2eb984d9f7fb73c2f73a420 Signed-off-by: Namyoon Woo <namyoon@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1423126 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Diffstat (limited to 'util')
-rwxr-xr-xutil/flash_ec121
1 files changed, 71 insertions, 50 deletions
diff --git a/util/flash_ec b/util/flash_ec
index 8b523ce454..e64b25787f 100755
--- a/util/flash_ec
+++ b/util/flash_ec
@@ -230,8 +230,8 @@ DEFINE_integer port "${DEFAULT_PORT}" \
"Port to communicate to servo on."
DEFINE_boolean raiden "${FLAGS_FALSE}" \
"Use raiden_debug_spi programmer"
-DEFINE_string read "" \
- "Stm32 only: pathname of the file to store EC firmware image."
+DEFINE_string read "" "Stm32 and npcx_spi only:"\
+" pathname of the file to store EC firmware image."
DEFINE_boolean ro "${FLAGS_FALSE}" \
"Write only the read-only partition"
DEFINE_integer timeout 600 \
@@ -239,7 +239,7 @@ DEFINE_integer timeout 600 \
DEFINE_boolean verbose "${FLAGS_FALSE}" \
"Verbose hw control logging"
DEFINE_boolean verify "${FLAGS_FALSE}" \
- "Stm32 only: verify EC firmware image after programming."
+ "Stm32 and npcx_spi only: verify EC firmware image after programming."
# Parse command line
FLAGS_HELP="usage: $0 [flags]"
@@ -387,7 +387,7 @@ if [ "${CHIP}" = "stm32_dfu" -o "${CHIP}" = "it83xx" ]; then
fi
case "${CHIP}" in
- "stm32") ;;
+ "stm32"|"npcx_spi") ;;
*)
if [[ -n "${FLAGS_read}" ]]; then
die "The flag is not yet supported on ${CHIP}."
@@ -883,59 +883,80 @@ function flash_flashrom() {
# Temp layout
L=/tmp/flash_spi_layout_$$
- dump_fmap -F "${IMG}" > "${L}"
+ [[ -z "${FLAGS_read}" ]] && dump_fmap -F "${IMG}" > "${L}"
- FLASHROM_OPTIONS="-i EC_RW -i WP_RO -l "${L}" --ignore-fmap \
- --fast-verify"
+ FLASHROM_OPTIONS="-i EC_RW -i WP_RO -l "${L}" --ignore-fmap"
+ FLASHROM_OPTIONS+=" --fast-verify"
fi
- # flashrom should report the image size at the end of the output.
- FLASHROM_CMDLINE="sudo ${FLASHROM} ${FLASHROM_PARAM} --get-size"
- if [ "${FLAGS_verbose}" = ${FLAGS_TRUE} ]; then
- echo "Running flashrom:" 1>&2
- echo " ${FLASHROM_CMDLINE}" 1>&2
- fi
- SPI_SIZE=$(${FLASHROM_CMDLINE} 2>/dev/null |\
- grep -oe '[0-9]\+$') || \
- die "Failed to determine chip size!"
- (( SPI_SIZE == 0 )) && die "Chip size is 0!"
-
- IMG_SIZE=$(stat -c%s "$IMG")
- PATCH_SIZE=$((${SPI_SIZE} - ${IMG_SIZE}))
-
- # Temp image
- T=/tmp/flash_spi_$$
-
- if [[ "${CHIP}" =~ ^npcx(|_int)_spi$ ]] ; then
- { # Patch temp image up to SPI_SIZE
- cat $IMG
- if [[ ${IMG_SIZE} -lt ${SPI_SIZE} ]] ; then
- dd if=/dev/zero bs=${PATCH_SIZE} count=1 | \
- tr '\0' '\377'
+ # Generate the correct flashrom command base.
+ FLASHROM_CMDLINE="${FLASHROM} ${FLASHROM_PARAM}"
+ if [[ -z "${FLAGS_read}" ]]; then
+ # Program EC image.
+ # flashrom should report the image size at the end of the output.
+ local FLASHROM_GETSIZE="sudo ${FLASHROM_CMDLINE} --get-size"
+ if [[ "${FLAGS_verbose}" == ${FLAGS_TRUE} ]]; then
+ info "Running flashrom:" 1>&2
+ echo " ${FLASHROM_GETSIZE}" 1>&2
+ fi
+ SPI_SIZE=$(${FLASHROM_GETSIZE} 2>/dev/null |\
+ grep -oe '[0-9]\+$') || \
+ die "Failed to determine chip size!"
+ [[ ${SPI_SIZE} -eq 0 ]] && die "Chip size is 0!"
+
+ IMG_SIZE=$(stat -c%s "${IMG}")
+ PATCH_SIZE=$((${SPI_SIZE} - ${IMG_SIZE}))
+
+ # Temp image
+ T=/tmp/flash_spi_$$
+
+ if [[ "${CHIP}" =~ ^npcx(|_int)_spi$ ]] ; then
+ { # Patch temp image up to SPI_SIZE
+ cat $IMG
+ if [[ ${IMG_SIZE} -lt ${SPI_SIZE} ]] ; then
+ dd if=/dev/zero bs=${PATCH_SIZE} count=1 | \
+ tr '\0' '\377'
+ fi
+ } > $T
+ else
+ { # Patch temp image up to SPI_SIZE
+ if [[ ${IMG_SIZE} -lt ${SPI_SIZE} ]] ; then
+ dd if=/dev/zero bs=${PATCH_SIZE} count=1 | \
+ tr '\0' '\377'
+ fi
+ cat $IMG
+ } > $T
+ fi
+
+ info "Start programming EC firmware image."
+ local FLASHROM_WRITE="${FLASHROM_CMDLINE} ${FLASHROM_OPTIONS}"
+ if [[ "${FLAGS_verbose}" == ${FLAGS_TRUE} ]]; then
+ info "Running flashrom:" 1>&2
+ echo " ${FLASHROM_WRITE} -w ${T}" 1>&2
fi
- } > $T
+ sudo timeout -k 10 -s 9 "${FLAGS_timeout}" \
+ ${FLASHROM_WRITE} -w "${T}"
else
- { # Patch temp image up to SPI_SIZE
- if [[ ${IMG_SIZE} -lt ${SPI_SIZE} ]] ; then
- dd if=/dev/zero bs=${PATCH_SIZE} count=1 | \
- tr '\0' '\377'
+ # Read EC image.
+ info "Start reading EC firmware image."
+ if [[ "${FLAGS_verbose}" == ${FLAGS_TRUE} ]]; then
+ info "Running flashrom:" 1>&2
+ echo " ${FLASHROM_CMDLINE} -r ${FLAGS_read}" 1>&2
fi
- cat $IMG
- } > $T
+ sudo timeout -k 10 -s 9 "${FLAGS_timeout}" \
+ ${FLASHROM_CMDLINE} -r "${FLAGS_read}"
fi
-
- # Generate the correct flashrom command to write the ec.
- FLASHROM_CMDLINE="${FLASHROM} ${FLASHROM_PARAM}"
- FLASHROM_CMDLINE+=" ${FLASHROM_OPTIONS} -w ${T}"
-
- if [ "${FLAGS_verbose}" = ${FLAGS_TRUE} ]; then
- echo "Running flashrom:" 1>&2
- echo " ${FLASHROM_CMDLINE}" 1>&2
+ if [[ -z "${FLAGS_read}" && "${FLAGS_verify}" == ${FLAGS_TRUE} ]]; then
+ # Verify EC image.
+ info "Verify EC firmware image."
+ if [[ "${FLAGS_verbose}" == ${FLAGS_TRUE} ]]; then
+ info "Running flashrom:" 1>&2
+ echo " ${FLASHROM_CMDLINE} -v ${T}" 1>&2
+ fi
+ sudo timeout -k 10 -s 9 "${FLAGS_timeout}" \
+ ${FLASHROM_CMDLINE} -v "${T}"
fi
- sudo timeout -k 10 -s 9 "${FLAGS_timeout}" \
- ${FLASHROM_CMDLINE}
-
- rm $T
+ [[ -f "${T}" ]] && rm "${T}"
# Set GP_SEL# as default to disable GP mode when ec reboots
if [[ ${board_is_npcx_internal_spi} -eq 0 ]]; then
@@ -950,7 +971,7 @@ function flash_flashrom() {
fi
else
- rm $L
+ [[ -f "${L}" ]] && rm "${L}"
fi
# Do not save/restore servo settings