summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2017-07-06 18:32:41 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2017-09-14 19:07:18 +0000
commit3a75b1f23f1ba5a8198498db35766c5b64de63d6 (patch)
tree527e50e554cf286ddfaf389dbc3901b40983a1a1
parent164b36ba02b53835b26c134e887de7e1cb683bce (diff)
downloadchrome-ec-3a75b1f23f1ba5a8198498db35766c5b64de63d6.tar.gz
usb_updater: display board ID information from RW headers
This patch adds code to interpret the contents of the Cr50 image's RW headers board ID fields. Board ID fields are added to the RW and RW_B version strings, as a three field colon separated value. The actual board ID is likely to be a 4 symbol ASCII string, if it is, the 4 ASCII characters are displayed. If it is not - the 8 character hex value is printed. The rest of the fields are displayed as 8 characters hex values. BRANCH=none BUG=b:62294740 TEST=tried the new option on various Cr50 images: $ ./extra/usb_updater/usb_updater -b build/cr50/ec.bin read 524288(0x80000) bytes from build/cr50/ec.bin RO_A:4919.0.0 RW_A:0.0.21[00000000:00000000:00000000] ... $ ./extra/usb_updater/usb_updater -b cr50.bin.dev read 524288(0x80000) bytes from cr50.bin.dev RO_A:0.0.10 RW_A:0.0.21[XXXR:00000004:00000001]... Change-Id: I5a92a600d24e4a7d6d615f256b5979414e883d77 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/562919 Reviewed-by: Randall Spangler <rspangler@chromium.org> (cherry picked from commit f50e0086e61aed2b722bd37c188e7e2204735f32) Reviewed-on: https://chromium-review.googlesource.com/571647 (cherry picked from commit db1327e6a0c15cc97fa5c8598b6378ce25ac2004) Reviewed-on: https://chromium-review.googlesource.com/666541
-rw-r--r--extra/usb_updater/usb_updater.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/extra/usb_updater/usb_updater.c b/extra/usb_updater/usb_updater.c
index fa4f5e383f..48d45d08fb 100644
--- a/extra/usb_updater/usb_updater.c
+++ b/extra/usb_updater/usb_updater.c
@@ -5,6 +5,7 @@
*/
#include <asm/byteorder.h>
+#include <ctype.h>
#include <endian.h>
#include <fcntl.h>
#include <getopt.h>
@@ -1232,11 +1233,45 @@ static int show_headers_versions(const void *image)
for (i = 0; i < ARRAY_SIZE(sections); i++) {
const struct SignedHeader *h;
+ size_t j;
+ uint32_t bid;
+ uint32_t bid_mask;
+ uint32_t bid_flags;
h = (const struct SignedHeader *)((uintptr_t)image +
sections[i].offset);
printf("%s%s:%d.%d.%d", i ? " " : "", sections[i].name,
h->epoch_, h->major_, h->minor_);
+
+ if (sections[i].name[1] != 'W')
+ continue;
+
+ /*
+ * For read/write sections print the board ID fields'
+ * contents, which are stored XORed with a padding value.
+ */
+ bid = h->board_id_type ^ SIGNED_HEADER_PADDING;
+ bid_mask = h->board_id_type_mask ^ SIGNED_HEADER_PADDING;
+ bid_flags = h->board_id_flags ^ SIGNED_HEADER_PADDING;
+
+ /* Beginning of a board ID section of the string. */
+ printf("[");
+
+ /*
+ * If board ID is an ASCII string (as it ought to be), print
+ * it as 4 symbols, otherwise print it as an 8 digit hex.
+ */
+ for (j = 0; j < sizeof(bid); j++)
+ if (!isalnum(((const char *)&bid)[j]))
+ break;
+
+ if (j == sizeof(bid))
+ printf("%.4s", (const char *)&bid);
+ else
+ printf("%08x", bid);
+
+ /* Print the rest of the board ID fields. */
+ printf(":%08x:%08x]", bid_mask, bid_flags);
}
printf("\n");