diff options
author | Wei-Cheng Xiao <garryxiao@chromium.org> | 2018-10-17 13:16:34 +0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2019-03-29 07:20:02 +0000 |
commit | 21b6355736c0fb589ea385b475a386063feb472d (patch) | |
tree | 5e17ae69e7b6cb6948158d559951e6719f6a0fe0 | |
parent | 095f4eadb043df9ed89955582aed1d9278099a73 (diff) | |
download | chrome-ec-21b6355736c0fb589ea385b475a386063feb472d.tar.gz |
gsctool: add machine output support (-M) to chip board ID (-i, -O)
Now gsctool can print out GSC board ID in a machine-friendly way. This
allows other programs (e.g., debugd) to parse the output.
This is the final CL that adds machine output support to gsctool during
verify_ro migration.
BRANCH=none
BUG=None
TEST=manually run gsctool -M -i and gsctool -O verify_ro.db -M on a soraka
device connected with a naultilus and check the board ID part in the
outputs. Sample output (the board ID part is identical in the outputs
of both commands):
BID_TYPE=5a534b4d
BID_TYPE_INV=a5acb4b2
BID_FLAGS=00007f80
Signed-off-by: Wei-Cheng Xiao <garryxiao@chromium.org>
Change-Id: Ia275806672c08841c5b5fcc7758d8e0c777b3fc9
Reviewed-on: https://chromium-review.googlesource.com/1286312
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Wei-Cheng Xiao <garryxiao@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1539438
Reviewed-by: Cheng-Han Yang <chenghan@chromium.org>
Commit-Queue: Cheng-Han Yang <chenghan@chromium.org>
Tested-by: Cheng-Han Yang <chenghan@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1545791
-rw-r--r-- | extra/usb_updater/gsctool.c | 38 | ||||
-rw-r--r-- | extra/usb_updater/gsctool.h | 7 | ||||
-rw-r--r-- | extra/usb_updater/verify_ro.c | 6 | ||||
-rw-r--r-- | extra/usb_updater/verify_ro.h | 11 |
4 files changed, 46 insertions, 16 deletions
diff --git a/extra/usb_updater/gsctool.c b/extra/usb_updater/gsctool.c index bb92494599..7fb8c580a1 100644 --- a/extra/usb_updater/gsctool.c +++ b/extra/usb_updater/gsctool.c @@ -541,7 +541,7 @@ static void usage(int errs) "character string.\n" " -k,--ccd_lock Lock CCD\n" " -M,--machine Output in a machine-friendly way. " - "Effective with -f and -b only.\n" + "Effective with -b, -f, -i, and -O.\n" " -O,--openbox_rma <desc_file>\n" " Verify other device's RO integrity\n" " using information provided in " @@ -1889,7 +1889,8 @@ static void process_ccd_state(struct transfer_descriptor *td, int ccd_unlock, void process_bid(struct transfer_descriptor *td, enum board_id_action bid_action, - struct board_id *bid) + struct board_id *bid, + bool show_machine_output) { size_t response_size; @@ -1900,16 +1901,31 @@ void process_bid(struct transfer_descriptor *td, bid, sizeof(*bid), bid, &response_size); - if (response_size == sizeof(*bid)) { + if (response_size != sizeof(*bid)) { + fprintf(stderr, + "Error reading board ID: response size %zd, " + "first byte %#02x\n", + response_size, + response_size ? *(uint8_t *)&bid : -1); + exit(update_error); + } + + if (show_machine_output) { + print_machine_output( + "BID_TYPE", "%08x", be32toh(bid->type)); + print_machine_output( + "BID_TYPE_INV", "%08x", be32toh(bid->type_inv)); + print_machine_output( + "BID_FLAGS", "%08x", be32toh(bid->flags)); + + } else { printf("Board ID space: %08x:%08x:%08x\n", - be32toh(bid->type), be32toh(bid->type_inv), + be32toh(bid->type), + be32toh(bid->type_inv), be32toh(bid->flags)); - return; } - fprintf(stderr, "Error reading board ID: response size %zd," - " first byte %#02x\n", response_size, - response_size ? *(uint8_t *)&bid : -1); - exit(update_error); + + return; } if (bid_action == bid_set) { @@ -2289,7 +2305,7 @@ int main(int argc, char *argv[]) } if (openbox_desc_file) - return verify_ro(&td, openbox_desc_file); + return verify_ro(&td, openbox_desc_file, show_machine_output); if (ccd_unlock || ccd_open || ccd_lock || ccd_info) process_ccd_state(&td, ccd_unlock, ccd_open, @@ -2299,7 +2315,7 @@ int main(int argc, char *argv[]) process_password(&td); if (bid_action != bid_none) - process_bid(&td, bid_action, &bid); + process_bid(&td, bid_action, &bid, show_machine_output); if (rma) process_rma(&td, rma_auth_code); diff --git a/extra/usb_updater/gsctool.h b/extra/usb_updater/gsctool.h index 23108f7a84..9b3660ca65 100644 --- a/extra/usb_updater/gsctool.h +++ b/extra/usb_updater/gsctool.h @@ -7,6 +7,7 @@ #ifndef __EXTRA_USB_UPDATER_GSCTOOL_H #define __EXTRA_USB_UPDATER_GSCTOOL_H +#include <stdbool.h> #include <stdint.h> #include <sys/types.h> @@ -79,11 +80,13 @@ enum board_id_action { /* * This function allows to retrieve or set (if not initialized) board ID of - * the H1 chip. + * the H1 chip. If bid_action is bid_get and show_machine_output is set, + * prints out board ID in a machine-friendly format. */ void process_bid(struct transfer_descriptor *td, enum board_id_action bid_action, - struct board_id *bid); + struct board_id *bid, + bool show_machine_output); /* * This function can be used to retrieve the current PP status from Cr50 and diff --git a/extra/usb_updater/verify_ro.c b/extra/usb_updater/verify_ro.c index 6f6de59867..20354d2692 100644 --- a/extra/usb_updater/verify_ro.c +++ b/extra/usb_updater/verify_ro.c @@ -5,6 +5,7 @@ */ #include <errno.h> +#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -304,7 +305,8 @@ static int process_descriptor_sections(struct transfer_descriptor *td) } int verify_ro(struct transfer_descriptor *td, - const char *desc_file_name) + const char *desc_file_name, + bool show_machine_output) { /* First find out board ID of the target. */ struct board_id bid; @@ -314,7 +316,7 @@ int verify_ro(struct transfer_descriptor *td, * Find out what Board ID is the device we are talking to. This * function calls exit() on any error. */ - process_bid(td, bid_get, &bid); + process_bid(td, bid_get, &bid, show_machine_output); if (bid.type != ~bid.type_inv) { fprintf(stderr, "Inconsistent board ID: %08x != ~%08x\n", diff --git a/extra/usb_updater/verify_ro.h b/extra/usb_updater/verify_ro.h index c37ba3a337..de2443b8b4 100644 --- a/extra/usb_updater/verify_ro.h +++ b/extra/usb_updater/verify_ro.h @@ -7,9 +7,18 @@ #ifndef __EXTRA_USB_UPDATER_VERIFY_RO_H #define __EXTRA_USB_UPDATER_VERIFY_RO_H +#include <stdbool.h> + #include "gsctool.h" +/* + * Runs RO verification on the target specified in td using the description file + * desc_file_name. If show_machine_output is set, target's board ID will be + * outputted in a machine-friendly format. Returns 0 on success or a negative + * value if there is an error. + */ int verify_ro(struct transfer_descriptor *td, - const char *desc_file_name); + const char *desc_file_name, + bool show_machine_output); #endif // __EXTRA_USB_UPDATER_VERIFY_RO_H |