diff options
author | Richard Hughes <richard@hughsie.com> | 2021-01-15 09:48:12 +0000 |
---|---|---|
committer | Edward O'Callaghan <quasisec@chromium.org> | 2022-05-25 08:08:13 +0000 |
commit | 40892b0c08fbc8029921e91511dd3f91fc956f90 (patch) | |
tree | 56b6fccd5c99c00649369fcf097c4555313b753c /spi25.c | |
parent | b86ae179adfb4acb4190ef2abe2ee8905c44f26a (diff) | |
download | flashrom-40892b0c08fbc8029921e91511dd3f91fc956f90.tar.gz flashrom-40892b0c08fbc8029921e91511dd3f91fc956f90.tar.bz2 flashrom-40892b0c08fbc8029921e91511dd3f91fc956f90.zip |
libflashrom: Return progress state to the library user
Projects using libflashrom like fwupd expect the user to wait for the
operation to complete. To avoid the user thinking the process has
"hung" or "got stuck" report back the progress complete of the erase,
write and read operations.
Add a new --progress flag to the CLI to report progress of operations.
Include a test for the dummy spi25 device.
TEST=./test_build.sh; ./flashrom -p lspcon_i2c_spi:bus=7 -r /dev/null --progress
Change-Id: I7197572bb7f19e3bdb2bde855d70a0f50fd3854c
Signed-off-by: Richard Hughes <richard@hughsie.com>
Signed-off-by: Daniel Campello <campello@chromium.org>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/49643
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Reviewed-by: Thomas Heijligen <src@posteo.de>
Diffstat (limited to 'spi25.c')
-rw-r--r-- | spi25.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -674,11 +674,14 @@ int spi_read_chunked(struct flashctx *flash, uint8_t *buf, unsigned int start, { int ret; size_t to_read; + size_t start_address = start; + size_t end_address = len - start; for (; len; len -= to_read, buf += to_read, start += to_read) { to_read = min(chunksize, len); ret = spi_nbyte_read(flash, start, buf, to_read); if (ret) return ret; + update_progress(flash, FLASHROM_PROGRESS_READ, start - start_address + to_read, end_address); } return 0; } @@ -698,6 +701,8 @@ int spi_write_chunked(struct flashctx *flash, const uint8_t *buf, unsigned int s * we're OK for now. */ unsigned int page_size = flash->chip->page_size; + size_t start_address = start; + size_t end_address = len - start; /* Warning: This loop has a very unusual condition and body. * The loop needs to go through each page with at least one affected @@ -722,6 +727,7 @@ int spi_write_chunked(struct flashctx *flash, const uint8_t *buf, unsigned int s if (rc) return rc; } + update_progress(flash, FLASHROM_PROGRESS_WRITE, start - start_address + lenhere, end_address); } return 0; @@ -741,6 +747,7 @@ int spi_chip_write_1(struct flashctx *flash, const uint8_t *buf, unsigned int st for (i = start; i < start + len; i++) { if (spi_nbyte_program(flash, i, buf + i - start, 1)) return 1; + update_progress(flash, FLASHROM_PROGRESS_WRITE, i - start, len - start); } return 0; } |