Edward O'Callaghan submitted this change.

View Change

Approvals: build bot (Jenkins): Verified Nico Huber: Looks good to me, approved
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.

Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I8f002f3b2012aec4d26b0e81456697b9a5de28d6
Gerrit-Change-Number: 35592
Gerrit-PatchSet: 11
Gerrit-Owner: Edward O'Callaghan <quasisec@chromium.org>
Gerrit-Reviewer: Alan Green <avg@google.com>
Gerrit-Reviewer: Angel Pons <th3fanbus@gmail.com>
Gerrit-Reviewer: David Hendricks <david.hendricks@gmail.com>
Gerrit-Reviewer: Edward O'Callaghan <quasisec@chromium.org>
Gerrit-Reviewer: Nico Huber <nico.h@gmx.de>
Gerrit-Reviewer: Patrick Georgi <pgeorgi@google.com>
Gerrit-Reviewer: Stefan Reinauer <stefan.reinauer@coreboot.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org>
Gerrit-CC: Paul Menzel <paulepanter@users.sourceforge.net>
Gerrit-MessageType: merged