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 <quasisec@chromium.org>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/35591
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
diff --git a/cli_classic.c b/cli_classic.c
index b4112fd..5dff904 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -51,6 +51,7 @@
" -n | --noverify don't auto-verify\n"
" -N | --noverify-all verify included regions only (cf. -i)\n"
" -l | --layout <layoutfile> read ROM layout from <layoutfile>\n"
+ " --flash-name read out the detected flash name\n"
" --fmap read ROM layout from fmap embedded in ROM\n"
" --fmap-file <fmapfile> read ROM layout from fmap in <fmapfile>\n"
" --ifd read layout from an Intel Firmware Descriptor\n"
@@ -101,6 +102,7 @@
#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 @@
OPTION_FMAP,
OPTION_FMAP_FILE,
OPTION_FLASH_CONTENTS,
+ OPTION_FLASH_NAME,
};
int ret = 0;
@@ -130,6 +133,7 @@
{"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 @@
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 @@
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 30dc97d..7002c72 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 <programmername>[:<parameters>]
- [\fB\-E\fR|\fB\-r\fR <file>|\fB\-w\fR <file>|\fB\-v\fR <file>] [\fB\-c\fR <chipname>]
- [(\fB\-l\fR <file>|\fB\-\-ifd|\fB \-\-fmap\fR|\fB\-\-fmap-file\fR <file>) [\fB\-i\fR <image>]]
- [\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 <programmername>[:<parameters>] [\fB\-c\fR <chipname>]
+ (\fB\-\-flash\-name\fR|
+ [\fB\-E\fR|\fB\-r\fR <file>|\fB\-w\fR <file>|\fB\-v\fR <file>]
+ [(\fB\-l\fR <file>|\fB\-\-ifd|\fB \-\-fmap\fR|\fB\-\-fmap-file\fR <file>) [\fB\-i\fR <image>]]
+ [\fB\-n\fR] [\fB\-N\fR] [\fB\-f\fR])]
[\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR <logfile>]
.SH DESCRIPTION
.B flashrom
@@ -242,6 +244,9 @@
.B <imagename>
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 @@
.br
Dominik Geyer
.br
+Edward O'Callaghan
+.br
Eric Biederman
.br
Giampiero Giancipoli