From 0cd11d8919c66351b9508f58ca0a7f7aaad6dd59 Mon Sep 17 00:00:00 2001 From: Edward O'Callaghan Date: Mon, 23 Sep 2019 22:46:12 +1000 Subject: cli_classic: Add convenient '--flash-name' cli opt We have this in the ChromiumOS fork of flashrom which we rely on to obtain the current flash chip in use. This ports it for upstream consumption. V.2: Constrain number_of_operations to one as per Nico's comment. V.3: Move two goto's outside inner if-else block. V.4: Add missing --help line. V.5: Add man page entry. v.6: Use printf() directly. Change-Id: I23d574a2f8eaf809a5c0524490db9e3a560ede56 Signed-off-by: Edward O'Callaghan Reviewed-on: https://review.coreboot.org/c/flashrom/+/35591 Tested-by: build bot (Jenkins) Reviewed-by: Nico Huber --- cli_classic.c | 25 ++++++++++++++++++++++++- flashrom.8.tmpl | 15 +++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/cli_classic.c b/cli_classic.c index b4112fdff..5dff904da 100644 --- a/cli_classic.c +++ b/cli_classic.c @@ -51,6 +51,7 @@ static void cli_classic_usage(const char *name) " -n | --noverify don't auto-verify\n" " -N | --noverify-all verify included regions only (cf. -i)\n" " -l | --layout read ROM layout from \n" + " --flash-name read out the detected flash name\n" " --fmap read ROM layout from fmap embedded in ROM\n" " --fmap-file read ROM layout from fmap in \n" " --ifd read layout from an Intel Firmware Descriptor\n" @@ -101,6 +102,7 @@ int main(int argc, char *argv[]) #if CONFIG_PRINT_WIKI == 1 int list_supported_wiki = 0; #endif + int flash_name = 0; int read_it = 0, write_it = 0, erase_it = 0, verify_it = 0; int dont_verify_it = 0, dont_verify_all = 0, list_supported = 0, operation_specified = 0; struct flashrom_layout *layout = NULL; @@ -110,6 +112,7 @@ int main(int argc, char *argv[]) OPTION_FMAP, OPTION_FMAP_FILE, OPTION_FLASH_CONTENTS, + OPTION_FLASH_NAME, }; int ret = 0; @@ -130,6 +133,7 @@ int main(int argc, char *argv[]) {"fmap-file", 1, NULL, OPTION_FMAP_FILE}, {"image", 1, NULL, 'i'}, {"flash-contents", 1, NULL, OPTION_FLASH_CONTENTS}, + {"flash-name", 0, NULL, OPTION_FLASH_NAME}, {"list-supported", 0, NULL, 'L'}, {"list-supported-wiki", 0, NULL, 'z'}, {"programmer", 1, NULL, 'p'}, @@ -296,6 +300,14 @@ int main(int argc, char *argv[]) case OPTION_FLASH_CONTENTS: referencefile = strdup(optarg); break; + case OPTION_FLASH_NAME: + if (++operation_specified > 1) { + fprintf(stderr, "More than one operation " + "specified. Aborting.\n"); + cli_classic_abort_usage(); + } + flash_name = 1; + break; case 'L': if (++operation_specified > 1) { fprintf(stderr, "More than one operation " @@ -602,11 +614,22 @@ int main(int argc, char *argv[]) goto out_shutdown; } - if (!(read_it | write_it | verify_it | erase_it)) { + if (!(read_it | write_it | verify_it | erase_it | flash_name)) { msg_ginfo("No operations were specified.\n"); goto out_shutdown; } + if (flash_name) { + if (fill_flash->chip->vendor && fill_flash->chip->name) { + printf("vendor=\"%s\" name=\"%s\"\n", + fill_flash->chip->vendor, + fill_flash->chip->name); + } else { + ret = -1; + } + goto out_shutdown; + } + if (layoutfile) { layout = get_global_layout(); } else if (ifd && (flashrom_layout_read_from_ifd(&layout, fill_flash, NULL, 0) || diff --git a/flashrom.8.tmpl b/flashrom.8.tmpl index 30dc97d19..7002c7230 100644 --- a/flashrom.8.tmpl +++ b/flashrom.8.tmpl @@ -44,10 +44,12 @@ .SH NAME flashrom \- detect, read, write, verify and erase flash chips .SH SYNOPSIS -.B flashrom \fR[\fB\-h\fR|\fB\-R\fR|\fB\-L\fR|\fB\-z\fR|\fB\-p\fR [:] - [\fB\-E\fR|\fB\-r\fR |\fB\-w\fR |\fB\-v\fR ] [\fB\-c\fR ] - [(\fB\-l\fR |\fB\-\-ifd|\fB \-\-fmap\fR|\fB\-\-fmap-file\fR ) [\fB\-i\fR ]] - [\fB\-n\fR] [\fB\-N\fR] [\fB\-f\fR]] +.B flashrom \fR[\fB\-h\fR|\fB\-R\fR|\fB\-L\fR|\fB\-z\fR| + \fB\-p\fR [:] [\fB\-c\fR ] + (\fB\-\-flash\-name\fR| + [\fB\-E\fR|\fB\-r\fR |\fB\-w\fR |\fB\-v\fR ] + [(\fB\-l\fR |\fB\-\-ifd|\fB \-\-fmap\fR|\fB\-\-fmap-file\fR ) [\fB\-i\fR ]] + [\fB\-n\fR] [\fB\-N\fR] [\fB\-f\fR])] [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR ] .SH DESCRIPTION .B flashrom @@ -242,6 +244,9 @@ Only flash region/image .B from flash layout. .TP +.B "\-\-flash\-name" +Prints out the detected flash chips name. +.TP .B "\-L, \-\-list\-supported" List the flash chips, chipsets, mainboards, and external programmers (including PCI, USB, parallel port, and serial port based devices) @@ -1335,6 +1340,8 @@ David Hendricks .br Dominik Geyer .br +Edward O'Callaghan +.br Eric Biederman .br Giampiero Giancipoli -- cgit v1.2.3