Edward O'Callaghan submitted this change.
cli_classic: Add convenient '--{flash,get}-size' 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: Rename '--get-size' to '--flash-size' however keep old arg as
'undocumented' for back-compat.
V.4: Add missing --help line.
V.5: Add man page entry.
V.6: Use printf() directly.
Change-Id: I8f002f3b2012aec4d26b0e81456697b9a5de28d6
Signed-off-by: Edward O'Callaghan <quasisec@chromium.org>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/35592
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
---
M cli_classic.c
M flashrom.8.tmpl
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/cli_classic.c b/cli_classic.c
index 5dff904..d23298e 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -52,6 +52,7 @@
" -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"
+ " --flash-size read out the detected flash size\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"
@@ -102,7 +103,7 @@
#if CONFIG_PRINT_WIKI == 1
int list_supported_wiki = 0;
#endif
- int flash_name = 0;
+ int flash_name = 0, flash_size = 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;
@@ -113,6 +114,7 @@
OPTION_FMAP_FILE,
OPTION_FLASH_CONTENTS,
OPTION_FLASH_NAME,
+ OPTION_FLASH_SIZE,
};
int ret = 0;
@@ -134,6 +136,8 @@
{"image", 1, NULL, 'i'},
{"flash-contents", 1, NULL, OPTION_FLASH_CONTENTS},
{"flash-name", 0, NULL, OPTION_FLASH_NAME},
+ {"flash-size", 0, NULL, OPTION_FLASH_SIZE},
+ {"get-size", 0, NULL, OPTION_FLASH_SIZE}, // (deprecated): back compatibility.
{"list-supported", 0, NULL, 'L'},
{"list-supported-wiki", 0, NULL, 'z'},
{"programmer", 1, NULL, 'p'},
@@ -308,6 +312,14 @@
}
flash_name = 1;
break;
+ case OPTION_FLASH_SIZE:
+ if (++operation_specified > 1) {
+ fprintf(stderr, "More than one operation "
+ "specified. Aborting.\n");
+ cli_classic_abort_usage();
+ }
+ flash_size = 1;
+ break;
case 'L':
if (++operation_specified > 1) {
fprintf(stderr, "More than one operation "
@@ -614,7 +626,7 @@
goto out_shutdown;
}
- if (!(read_it | write_it | verify_it | erase_it | flash_name)) {
+ if (!(read_it | write_it | verify_it | erase_it | flash_name | flash_size)) {
msg_ginfo("No operations were specified.\n");
goto out_shutdown;
}
@@ -630,6 +642,11 @@
goto out_shutdown;
}
+ if (flash_size) {
+ printf("%d\n", fill_flash->chip->total_size * 1024);
+ 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 7002c72..eb7fdec 100644
--- a/flashrom.8.tmpl
+++ b/flashrom.8.tmpl
@@ -46,7 +46,7 @@
.SH SYNOPSIS
.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\-\-flash\-name\fR|\fB\-\-flash\-size\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])]
@@ -247,6 +247,9 @@
.B "\-\-flash\-name"
Prints out the detected flash chips name.
.TP
+.B "\-\-flash\-size"
+Prints out the detected flash chips size.
+.TP
.B "\-L, \-\-list\-supported"
List the flash chips, chipsets, mainboards, and external programmers
(including PCI, USB, parallel port, and serial port based devices)
To view, visit change 35592. To unsubscribe, or for help writing mail filters, visit settings.