summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2016-10-18 12:01:44 -0500
committerchrome-bot <chrome-bot@chromium.org>2016-10-27 12:42:37 -0700
commit97158b6543d3ddb08ef75e7f458dcf860a5f6b71 (patch)
treecebcb52df8dee8635a4660de0d35f25d9a2fe451
parent5b556dbd24b3a8f671f023cede096016963a843c (diff)
downloadchrome-ec-97158b6543d3ddb08ef75e7f458dcf860a5f6b71.tar.gz
usb_updater: report running H1 firmware
Add a command line option which allows to retrieve version currently running on the cr50 device. BRANCH=none BUG=chrome-os-partner:58794 TEST=run the following command: $ sudo ./extra/usb_updater/usb_updater -f open_device 18d1:5014 found interface 4 endpoint 5, chunk_len 64 READY ------- start Target running protocol version 5 Offsets: backup RO at 0, backup RW at 0x4000 Keyids: RO 0x3716ee6b, RW 0xb93d6539 Current versions: RO 0.0.9 RW 0.0.8 Change-Id: Ia34f455d3ca826a24992adf123a07865dccb1d57 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/400418 Reviewed-by: Furquan Shaikh <furquan@chromium.org>
-rw-r--r--extra/usb_updater/usb_updater.c62
1 files changed, 40 insertions, 22 deletions
diff --git a/extra/usb_updater/usb_updater.c b/extra/usb_updater/usb_updater.c
index 6b620ea73d..873dbd7700 100644
--- a/extra/usb_updater/usb_updater.c
+++ b/extra/usb_updater/usb_updater.c
@@ -197,7 +197,7 @@ struct transfer_descriptor {
static uint32_t protocol_version;
static char *progname;
-static char *short_opts = ":bd:hsu";
+static char *short_opts = ":bfd:hsu";
static const struct option long_opts[] = {
/* name hasarg *flag val */
{"binvers", 0, NULL, 'b'},
@@ -205,6 +205,7 @@ static const struct option long_opts[] = {
{"help", 0, NULL, 'h'},
{"spi", 0, NULL, 's'},
{"upstart", 0, NULL, 'u'},
+ {"fwver", 0, NULL, 'f'},
{NULL, 0, NULL, 0},
};
@@ -303,6 +304,7 @@ static void usage(int errs)
" -b,--binvers Report versions of image's "
"RW and RO headers, do not update\n"
" -d,--device VID:PID USB device (default %04x:%04x)\n"
+ " -f,--fwver Report running firmware versions.\n"
" -h,--help Show this message\n"
" -s,--spi Use /dev/tmp0 (-d is ignored)\n"
" -u,--upstart "
@@ -957,8 +959,6 @@ static int transfer_and_reboot(struct transfer_descriptor *td,
size_t i;
int num_txed_secitons = 0;
- setup_connection(td);
-
for (i = 0; i < ARRAY_SIZE(sections); i++)
if (sections[i].ustatus == needed) {
transfer_section(td,
@@ -1040,6 +1040,7 @@ int main(int argc, char *argv[])
size_t j;
int transferred_sections;
int binary_vers = 0;
+ int show_fw_ver = 0;
progname = strrchr(argv[0], '/');
if (progname)
@@ -1064,6 +1065,9 @@ int main(int argc, char *argv[])
errorcnt++;
}
break;
+ case 'f':
+ show_fw_ver = 1;
+ break;
case 'h':
usage(errorcnt);
break;
@@ -1096,25 +1100,27 @@ int main(int argc, char *argv[])
if (errorcnt)
usage(errorcnt);
- if (optind >= argc) {
- fprintf(stderr,
- "\nERROR: Missing required <binary image>\n\n");
- usage(1);
- }
+ if (!show_fw_ver) {
+ if (optind >= argc) {
+ fprintf(stderr,
+ "\nERROR: Missing required <binary image>\n\n");
+ usage(1);
+ }
- data = get_file_or_die(argv[optind], &data_len);
- printf("read %zd(%#zx) bytes from %s\n",
- data_len, data_len, argv[optind]);
- if (data_len != CONFIG_FLASH_SIZE) {
- fprintf(stderr, "Image file is not %d bytes\n",
- CONFIG_FLASH_SIZE);
- exit(update_error);
- }
+ data = get_file_or_die(argv[optind], &data_len);
+ printf("read %zd(%#zx) bytes from %s\n",
+ data_len, data_len, argv[optind]);
+ if (data_len != CONFIG_FLASH_SIZE) {
+ fprintf(stderr, "Image file is not %d bytes\n",
+ CONFIG_FLASH_SIZE);
+ exit(update_error);
+ }
- fetch_header_versions(data);
+ fetch_header_versions(data);
- if (binary_vers)
- exit(show_headers_versions(data));
+ if (binary_vers)
+ exit(show_headers_versions(data));
+ }
if (td.ep_type == usb_xfer) {
usb_findit(vid, pid, &td.uep);
@@ -1126,10 +1132,22 @@ int main(int argc, char *argv[])
}
}
- transferred_sections = transfer_and_reboot(&td, data, data_len);
+ setup_connection(&td);
+
+ if (show_fw_ver) {
+ printf("Current versions:\n");
+ printf("RO %d.%d.%d\n", targ.shv[0].epoch, targ.shv[0].major,
+ targ.shv[0].minor);
+ printf("RW %d.%d.%d\n", targ.shv[1].epoch, targ.shv[1].major,
+ targ.shv[1].minor);
+ }
+
+ if (data) {
+ transferred_sections = transfer_and_reboot(&td, data, data_len);
- printf("bye\n");
- free(data);
+ printf("bye\n");
+ free(data);
+ }
if (td.ep_type == usb_xfer) {
libusb_close(td.uep.devh);
libusb_exit(NULL);