1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-27 07:02:34 +02:00

Revert "libflashrom: Return progress state to the library user"

This reverts commit 40892b0c08fbc8029921e91511dd3f91fc956f90.

The feature of returning progress for libflashrom users was
introduced in original commit, however later a bug was found and
reported as https://ticket.coreboot.org/issues/390.

Reverting in a release branch to unblock release candidate, since
it is unknown how much time needed to fix the bug. Meanwhile the
feature remains in a master branch and will be fixed under
ticket 390.

TEST=scenarios below run successfully
1) flashrom -h does not show --progress
2) flashrom -p dummy:emulate=W25Q128FV -r /tmp/dump.bin
3) flashrom -p dummy:emulate=W25Q128FV -v /tmp/dump.bin
4) flashrom -p dummy:emulate=W25Q128FV -E
5) head -c 16777216 </dev/urandom >/tmp/image.bin
flashrom -p dummy:image=/tmp/image.bin,emulate=W25Q128FV \
	 -w /tmp/dump.bin

Change-Id: Id3d7ffcaf266a60a44eb453fd09b7c63c05349c2
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Signed-off-by: Anastasia Klimchuk <aklm@chromium.org>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/69283
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Felix Singer <felixsinger@posteo.net>
This commit is contained in:
Edward O'Callaghan 2022-10-17 15:00:57 +11:00 committed by Felix Singer
parent 664c58f32a
commit 00635b0da2
22 changed files with 3 additions and 184 deletions

View File

@ -135,7 +135,6 @@ int write_82802ab(struct flashctx *flash, const uint8_t *src, unsigned int start
chip_writeb(flash, 0x40, dst); chip_writeb(flash, 0x40, dst);
chip_writeb(flash, *src++, dst++); chip_writeb(flash, *src++, dst++);
wait_82802ab(flash); wait_82802ab(flash);
update_progress(flash, FLASHROM_PROGRESS_WRITE, i + 1, len);
} }
/* FIXME: Ignore errors for now. */ /* FIXME: Ignore errors for now. */

View File

@ -550,7 +550,6 @@ int spi_write_at45db(struct flashctx *flash, const uint8_t *buf, unsigned int st
msg_cerr("Writing page %u failed!\n", i); msg_cerr("Writing page %u failed!\n", i);
return 1; return 1;
} }
update_progress(flash, FLASHROM_PROGRESS_WRITE, i + page_size, len);
} }
return 0; return 0;
} }

View File

@ -79,7 +79,6 @@ static void cli_classic_usage(const char *name)
#if CONFIG_PRINT_WIKI == 1 #if CONFIG_PRINT_WIKI == 1
" -z | --list-supported-wiki print supported devices in wiki syntax\n" " -z | --list-supported-wiki print supported devices in wiki syntax\n"
#endif #endif
" --progress show progress percentage on the standard output\n"
" -p | --programmer <name>[:<param>] specify the programmer device. One of\n"); " -p | --programmer <name>[:<param>] specify the programmer device. One of\n");
list_programmers_linebreak(4, 80, 0); list_programmers_linebreak(4, 80, 0);
printf(".\n\nYou can specify one of -h, -R, -L, " printf(".\n\nYou can specify one of -h, -R, -L, "
@ -580,7 +579,6 @@ int main(int argc, char *argv[])
bool read_it = false, extract_it = false, write_it = false, erase_it = false, verify_it = false; bool read_it = false, extract_it = false, write_it = false, erase_it = false, verify_it = false;
bool dont_verify_it = false, dont_verify_all = false; bool dont_verify_it = false, dont_verify_all = false;
bool list_supported = false; bool list_supported = false;
bool show_progress = false;
struct flashrom_layout *layout = NULL; struct flashrom_layout *layout = NULL;
static const struct programmer_entry *prog = NULL; static const struct programmer_entry *prog = NULL;
enum { enum {
@ -596,7 +594,6 @@ int main(int argc, char *argv[])
OPTION_WP_ENABLE, OPTION_WP_ENABLE,
OPTION_WP_DISABLE, OPTION_WP_DISABLE,
OPTION_WP_LIST, OPTION_WP_LIST,
OPTION_PROGRESS,
}; };
int ret = 0; int ret = 0;
@ -633,7 +630,6 @@ int main(int argc, char *argv[])
{"help", 0, NULL, 'h'}, {"help", 0, NULL, 'h'},
{"version", 0, NULL, 'R'}, {"version", 0, NULL, 'R'},
{"output", 1, NULL, 'o'}, {"output", 1, NULL, 'o'},
{"progress", 0, NULL, OPTION_PROGRESS},
{NULL, 0, NULL, 0}, {NULL, 0, NULL, 0},
}; };
@ -874,9 +870,6 @@ int main(int argc, char *argv[])
cli_classic_abort_usage("No log filename specified.\n"); cli_classic_abort_usage("No log filename specified.\n");
} }
break; break;
case OPTION_PROGRESS:
show_progress = true;
break;
default: default:
cli_classic_abort_usage(NULL); cli_classic_abort_usage(NULL);
break; break;
@ -1048,13 +1041,6 @@ int main(int argc, char *argv[])
fill_flash = &flashes[0]; fill_flash = &flashes[0];
unsigned int progress_user_data[FLASHROM_PROGRESS_NR];
struct flashrom_progress progress_state = {
.user_data = progress_user_data
};
if (show_progress)
flashrom_set_progress_callback(fill_flash, &flashrom_progress_cb, &progress_state);
print_chip_support_status(fill_flash->chip); print_chip_support_status(fill_flash->chip);
unsigned int limitexceeded = count_max_decode_exceedings(fill_flash); unsigned int limitexceeded = count_max_decode_exceedings(fill_flash);

View File

@ -64,31 +64,6 @@ void start_logging(void)
verbose_screen = oldverbose_screen; verbose_screen = oldverbose_screen;
} }
static const char *flashrom_progress_stage_to_string(enum flashrom_progress_stage stage)
{
if (stage == FLASHROM_PROGRESS_READ)
return "READ";
if (stage == FLASHROM_PROGRESS_WRITE)
return "WRITE";
if (stage == FLASHROM_PROGRESS_ERASE)
return "ERASE";
return "UNKNOWN";
}
void flashrom_progress_cb(struct flashrom_flashctx *flashctx)
{
struct flashrom_progress *progress_state = flashctx->progress_state;
unsigned int pc = 0;
unsigned int *percentages = progress_state->user_data;
if (progress_state->current > 0 && progress_state->total > 0)
pc = ((unsigned long long) progress_state->current * 10000llu) /
((unsigned long long) progress_state->total * 100llu);
if (percentages[progress_state->stage] != pc) {
percentages[progress_state->stage] = pc;
msg_ginfo("[%s] %u%% complete... ", flashrom_progress_stage_to_string(progress_state->stage), pc);
}
}
/* Please note that level is the verbosity, not the importance of the message. */ /* Please note that level is the verbosity, not the importance of the message. */
int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap) int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap)
{ {

View File

@ -658,7 +658,6 @@ static int dediprog_spi_bulk_write(struct flashctx *flash, const uint8_t *buf, u
msg_perr("SPI bulk write failed, expected %i, got %s!\n", 512, libusb_error_name(ret)); msg_perr("SPI bulk write failed, expected %i, got %s!\n", 512, libusb_error_name(ret));
return 1; return 1;
} }
update_progress(flash, FLASHROM_PROGRESS_WRITE, i + 1, count);
} }
return 0; return 0;

View File

@ -48,7 +48,6 @@ int write_en29lv640b(struct flashctx *flash, const uint8_t *src, unsigned int st
#endif #endif
dst += 2; dst += 2;
src += 2; src += 2;
update_progress(flash, FLASHROM_PROGRESS_WRITE, i + 2, len);
} }
/* FIXME: Ignore errors for now. */ /* FIXME: Ignore errors for now. */

View File

@ -53,8 +53,7 @@ flashrom \- detect, read, write, verify and erase flash chips
[\fB\-\-wp\-status\fR] [\fB\-\-wp\-list\fR] [\fB\-\-wp\-enable\fR|\fB\-\-wp\-disable\fR] [\fB\-\-wp\-status\fR] [\fB\-\-wp\-list\fR] [\fB\-\-wp\-enable\fR|\fB\-\-wp\-disable\fR]
[\fB\-\-wp\-range\fR <start>,<length>|\fB\-\-wp\-region\fR <region>] [\fB\-\-wp\-range\fR <start>,<length>|\fB\-\-wp\-region\fR <region>]
[\fB\-n\fR] [\fB\-N\fR] [\fB\-f\fR])] [\fB\-n\fR] [\fB\-N\fR] [\fB\-f\fR])]
[\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR <logfile>] [\fB\-\-progress\fR] [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR <logfile>]
.SH DESCRIPTION .SH DESCRIPTION
.B flashrom .B flashrom
is a utility for detecting, reading, writing, verifying and erasing flash is a utility for detecting, reading, writing, verifying and erasing flash
@ -450,9 +449,6 @@ If the file already exists, it will be overwritten. This is the recommended
way to gather logs from flashrom because they will be verbose even if the way to gather logs from flashrom because they will be verbose even if the
on-screen messages are not verbose and don't require output redirection. on-screen messages are not verbose and don't require output redirection.
.TP .TP
.B "\-\-progress"
Show progress percentage of operations on the standard output.
.TP
.B "\-R, \-\-version" .B "\-R, \-\-version"
Show version information and exit. Show version information and exit.
.SH PROGRAMMER-SPECIFIC INFORMATION .SH PROGRAMMER-SPECIFIC INFORMATION

View File

@ -420,9 +420,6 @@ struct flashrom_flashctx {
chip_restore_fn_cb_t func; chip_restore_fn_cb_t func;
uint8_t status; uint8_t status;
} chip_restore_fn[MAX_CHIP_RESTORE_FUNCTIONS]; } chip_restore_fn[MAX_CHIP_RESTORE_FUNCTIONS];
/* Progress reporting */
flashrom_progress_callback *progress_callback;
struct flashrom_progress *progress_state;
}; };
/* Timing used in probe routines. ZERO is -2 to differentiate between an unset /* Timing used in probe routines. ZERO is -2 to differentiate between an unset
@ -518,7 +515,6 @@ int open_logfile(const char * const filename);
int close_logfile(void); int close_logfile(void);
void start_logging(void); void start_logging(void);
int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap); int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap);
void flashrom_progress_cb(struct flashrom_flashctx *flashctx);
/* Let gcc and clang check for correct printf-style format strings. */ /* Let gcc and clang check for correct printf-style format strings. */
int print(enum flashrom_log_level level, const char *fmt, ...) int print(enum flashrom_log_level level, const char *fmt, ...)
#ifdef __MINGW32__ #ifdef __MINGW32__
@ -547,7 +543,6 @@ __attribute__((format(printf, 2, 3)));
#define msg_gspew(...) print(FLASHROM_MSG_SPEW, __VA_ARGS__) /* general debug spew */ #define msg_gspew(...) print(FLASHROM_MSG_SPEW, __VA_ARGS__) /* general debug spew */
#define msg_pspew(...) print(FLASHROM_MSG_SPEW, __VA_ARGS__) /* programmer debug spew */ #define msg_pspew(...) print(FLASHROM_MSG_SPEW, __VA_ARGS__) /* programmer debug spew */
#define msg_cspew(...) print(FLASHROM_MSG_SPEW, __VA_ARGS__) /* chip debug spew */ #define msg_cspew(...) print(FLASHROM_MSG_SPEW, __VA_ARGS__) /* chip debug spew */
void update_progress(struct flashctx *flash, enum flashrom_progress_stage stage, size_t current, size_t total);
/* spi.c */ /* spi.c */
struct spi_command { struct spi_command {

View File

@ -69,34 +69,6 @@ typedef int(flashrom_log_callback)(enum flashrom_log_level, const char *format,
*/ */
void flashrom_set_log_callback(flashrom_log_callback *log_callback); void flashrom_set_log_callback(flashrom_log_callback *log_callback);
enum flashrom_progress_stage {
FLASHROM_PROGRESS_READ,
FLASHROM_PROGRESS_WRITE,
FLASHROM_PROGRESS_ERASE,
FLASHROM_PROGRESS_NR,
};
struct flashrom_progress {
enum flashrom_progress_stage stage;
size_t current;
size_t total;
void *user_data;
};
struct flashrom_flashctx;
typedef void(flashrom_progress_callback)(struct flashrom_flashctx *flashctx);
/**
* @brief Set the progress callback function.
*
* Set a callback function which will be invoked whenever libflashrom wants
* to indicate the progress has changed. This allows frontends to do whatever
* they see fit with such values, e.g. update a progress bar in a GUI tool.
*
* @param progress_callback Pointer to the new progress callback function.
* @param progress_state Pointer to progress state to include with the progress
* callback.
*/
void flashrom_set_progress_callback(struct flashrom_flashctx *const flashctx,
flashrom_progress_callback *progress_callback, struct flashrom_progress *progress_state);
/** @} */ /* end flashrom-general */ /** @} */ /* end flashrom-general */
/** /**
@ -203,6 +175,7 @@ int flashrom_programmer_shutdown(struct flashrom_programmer *flashprog);
* @{ * @{
*/ */
struct flashrom_flashctx;
/** /**
* @brief Probe for a flash chip. * @brief Probe for a flash chip.
* *

View File

@ -292,7 +292,6 @@ static int it8716f_spi_chip_write_256(struct flashctx *flash, const uint8_t *buf
int ret = it8716f_spi_page_program(flash, buf, start); int ret = it8716f_spi_page_program(flash, buf, start);
if (ret) if (ret)
return ret; return ret;
update_progress(flash, FLASHROM_PROGRESS_WRITE, chip->page_size - len, chip->page_size);
start += chip->page_size; start += chip->page_size;
len -= chip->page_size; len -= chip->page_size;
buf += chip->page_size; buf += chip->page_size;

View File

@ -421,7 +421,6 @@ int write_jedec_1(struct flashctx *flash, const uint8_t *src, unsigned int start
if (write_byte_program_jedec_common(flash, src, dst, mask)) if (write_byte_program_jedec_common(flash, src, dst, mask))
failed = 1; failed = 1;
dst++, src++; dst++, src++;
update_progress(flash, FLASHROM_PROGRESS_WRITE, i + 1, len);
} }
if (failed) if (failed)
msg_cerr(" writing sector at 0x%" PRIxPTR " failed!\n", olddst); msg_cerr(" writing sector at 0x%" PRIxPTR " failed!\n", olddst);
@ -488,7 +487,6 @@ int write_jedec(struct flashctx *flash, const uint8_t *buf, unsigned int start,
* we're OK for now. * we're OK for now.
*/ */
unsigned int page_size = flash->chip->page_size; unsigned int page_size = flash->chip->page_size;
unsigned int nwrites = (start + len - 1) / page_size;
/* Warning: This loop has a very unusual condition and body. /* Warning: This loop has a very unusual condition and body.
* The loop needs to go through each page with at least one affected * The loop needs to go through each page with at least one affected
@ -499,7 +497,7 @@ int write_jedec(struct flashctx *flash, const uint8_t *buf, unsigned int start,
* (start + len - 1) / page_size. Since we want to include that last * (start + len - 1) / page_size. Since we want to include that last
* page as well, the loop condition uses <=. * page as well, the loop condition uses <=.
*/ */
for (i = start / page_size; i <= nwrites; i++) { for (i = start / page_size; i <= (start + len - 1) / page_size; i++) {
/* Byte position of the first byte in the range in this page. */ /* Byte position of the first byte in the range in this page. */
/* starthere is an offset to the base address of the chip. */ /* starthere is an offset to the base address of the chip. */
starthere = max(start, i * page_size); starthere = max(start, i * page_size);
@ -508,7 +506,6 @@ int write_jedec(struct flashctx *flash, const uint8_t *buf, unsigned int start,
if (write_page_write_jedec_common(flash, buf + starthere - start, starthere, lenhere)) if (write_page_write_jedec_common(flash, buf + starthere - start, starthere, lenhere))
return 1; return 1;
update_progress(flash, FLASHROM_PROGRESS_WRITE, i + 1, nwrites + 1);
} }
return 0; return 0;

View File

@ -65,25 +65,6 @@ int print(const enum flashrom_log_level level, const char *const fmt, ...)
return 0; return 0;
} }
void flashrom_set_progress_callback(struct flashrom_flashctx *flashctx, flashrom_progress_callback *progress_callback, struct flashrom_progress *progress_state)
{
flashctx->progress_callback = progress_callback;
flashctx->progress_state = progress_state;
}
/** @private */
void update_progress(struct flashrom_flashctx *flashctx, enum flashrom_progress_stage stage, size_t current, size_t total)
{
if (flashctx->progress_callback == NULL)
return;
if (current > total)
current = total;
flashctx->progress_state->stage = stage;
flashctx->progress_state->current = current;
flashctx->progress_state->total = total;
flashctx->progress_callback(flashctx);
}
const char *flashrom_version_info(void) const char *flashrom_version_info(void)
{ {
return flashrom_version; return flashrom_version;

View File

@ -26,7 +26,6 @@ LIBFLASHROM_1.0 {
flashrom_programmer_init; flashrom_programmer_init;
flashrom_programmer_shutdown; flashrom_programmer_shutdown;
flashrom_set_log_callback; flashrom_set_log_callback;
flashrom_set_progress_callback;
flashrom_shutdown; flashrom_shutdown;
flashrom_supported_boards; flashrom_supported_boards;
flashrom_supported_chipsets; flashrom_supported_chipsets;

View File

@ -215,7 +215,6 @@ static int linux_mtd_read(struct flashctx *flash, uint8_t *buf,
} }
i += step; i += step;
update_progress(flash, FLASHROM_PROGRESS_READ, i, len);
} }
return 0; return 0;
@ -258,7 +257,6 @@ static int linux_mtd_write(struct flashctx *flash, const uint8_t *buf,
} }
i += step; i += step;
update_progress(flash, FLASHROM_PROGRESS_WRITE, i, len);
} }
return 0; return 0;
@ -295,7 +293,6 @@ static int linux_mtd_erase(struct flashctx *flash,
__func__, ret, strerror(errno)); __func__, ret, strerror(errno));
return 1; return 1;
} }
update_progress(flash, FLASHROM_PROGRESS_ERASE, u + data->erasesize, len);
} }
return 0; return 0;

View File

@ -354,7 +354,6 @@ static int parade_lspcon_read(struct flashctx *flash, uint8_t *buf,
for (i = 0; i < len; i += TUNNEL_PAGE_SIZE) { for (i = 0; i < len; i += TUNNEL_PAGE_SIZE) {
ret |= parade_lspcon_map_page(fd, start + i); ret |= parade_lspcon_map_page(fd, start + i);
ret |= parade_lspcon_read_data(fd, PAGE_ADDRESS, buf + i, min(len - i, TUNNEL_PAGE_SIZE)); ret |= parade_lspcon_read_data(fd, PAGE_ADDRESS, buf + i, min(len - i, TUNNEL_PAGE_SIZE));
update_progress(flash, FLASHROM_PROGRESS_READ, i + TUNNEL_PAGE_SIZE, len);
} }
return ret; return ret;
@ -395,7 +394,6 @@ static int parade_lspcon_write_256(struct flashctx *flash, const uint8_t *buf,
for (unsigned int i = 0; i < len; i += TUNNEL_PAGE_SIZE) { for (unsigned int i = 0; i < len; i += TUNNEL_PAGE_SIZE) {
ret |= parade_lspcon_map_page(fd, start + i); ret |= parade_lspcon_map_page(fd, start + i);
ret |= parade_lspcon_write_page(fd, buf + i, min(len - i, TUNNEL_PAGE_SIZE)); ret |= parade_lspcon_write_page(fd, buf + i, min(len - i, TUNNEL_PAGE_SIZE));
update_progress(flash, FLASHROM_PROGRESS_WRITE, i + TUNNEL_PAGE_SIZE, len);
} }
ret |= parade_lspcon_enable_write_protection(fd); ret |= parade_lspcon_enable_write_protection(fd);

View File

@ -397,7 +397,6 @@ static int realtek_mst_i2c_spi_write_256(struct flashctx *flash, const uint8_t *
ret |= realtek_mst_i2c_execute_write(fd); ret |= realtek_mst_i2c_execute_write(fd);
if (ret) if (ret)
break; break;
update_progress(flash, FLASHROM_PROGRESS_WRITE, i + RTK_PAGE_SIZE, len);
} }
return ret; return ret;

3
spi.c
View File

@ -101,8 +101,6 @@ int spi_chip_read(struct flashctx *flash, uint8_t *buf, unsigned int start,
{ {
int ret; int ret;
size_t to_read; 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) { for (; len; len -= to_read, buf += to_read, start += to_read) {
/* Do not cross 16MiB boundaries in a single transfer. /* Do not cross 16MiB boundaries in a single transfer.
This helps with This helps with
@ -112,7 +110,6 @@ int spi_chip_read(struct flashctx *flash, uint8_t *buf, unsigned int start,
ret = flash->mst->spi.read(flash, buf, start, to_read); ret = flash->mst->spi.read(flash, buf, start, to_read);
if (ret) if (ret)
return ret; return ret;
update_progress(flash, FLASHROM_PROGRESS_READ, start - start_address + to_read, end_address);
} }
return 0; return 0;
} }

View File

@ -693,14 +693,11 @@ int spi_read_chunked(struct flashctx *flash, uint8_t *buf, unsigned int start,
{ {
int ret; int ret;
size_t to_read; 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) { for (; len; len -= to_read, buf += to_read, start += to_read) {
to_read = min(chunksize, len); to_read = min(chunksize, len);
ret = spi_nbyte_read(flash, start, buf, to_read); ret = spi_nbyte_read(flash, start, buf, to_read);
if (ret) if (ret)
return ret; return ret;
update_progress(flash, FLASHROM_PROGRESS_READ, start - start_address + to_read, end_address);
} }
return 0; return 0;
} }
@ -720,8 +717,6 @@ int spi_write_chunked(struct flashctx *flash, const uint8_t *buf, unsigned int s
* we're OK for now. * we're OK for now.
*/ */
unsigned int page_size = flash->chip->page_size; 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. /* Warning: This loop has a very unusual condition and body.
* The loop needs to go through each page with at least one affected * The loop needs to go through each page with at least one affected
@ -746,7 +741,6 @@ int spi_write_chunked(struct flashctx *flash, const uint8_t *buf, unsigned int s
if (rc) if (rc)
return rc; return rc;
} }
update_progress(flash, FLASHROM_PROGRESS_WRITE, start - start_address + lenhere, end_address);
} }
return 0; return 0;
@ -766,7 +760,6 @@ int spi_chip_write_1(struct flashctx *flash, const uint8_t *buf, unsigned int st
for (i = start; i < start + len; i++) { for (i = start; i < start + len; i++) {
if (spi_nbyte_program(flash, i, buf + i - start, 1)) if (spi_nbyte_program(flash, i, buf + i - start, 1))
return 1; return 1;
update_progress(flash, FLASHROM_PROGRESS_WRITE, i - start, len - start);
} }
return 0; return 0;
} }

View File

@ -92,7 +92,6 @@ int write_28sf040(struct flashctx *flash, const uint8_t *src, unsigned int start
/* wait for Toggle bit ready */ /* wait for Toggle bit ready */
toggle_ready_jedec(flash, bios); toggle_ready_jedec(flash, bios);
update_progress(flash, FLASHROM_PROGRESS_WRITE, i + 1, len);
} }
return 0; return 0;

View File

@ -67,65 +67,6 @@ int __wrap_spi_send_command(const struct flashctx *flash,
return 0; return 0;
} }
static void spi_read_progress_cb(struct flashrom_flashctx *flashctx)
{
struct flashrom_progress *progress_state = flashctx->progress_state;
uint32_t *cnt = (uint32_t *) progress_state->user_data;
assert_int_equal(0x300, progress_state->total);
switch (*cnt) {
case 0:
assert_int_equal(0x100, progress_state->current);
break;
case 1:
assert_int_equal(0x200, progress_state->current);
break;
case 2:
assert_int_equal(0x300, progress_state->current);
break;
case 3:
assert_int_equal(0x300, progress_state->current);
break;
case 4:
assert_int_equal(0x300, progress_state->current);
break;
default:
fail();
}
(*cnt)++;
}
void spi_read_chunked_test_success(void **state)
{
(void) state; /* unused */
uint8_t buf[0x400] = { 0x0 };
uint32_t cnt = 0;
const unsigned int max_data_read = 0x100;
const unsigned int offset = 0x100;
struct registered_master mst = {
.spi.read = default_spi_read,
.spi.max_data_read = max_data_read
};
/* setup initial test state */
struct flashctx flashctx = {
.chip = &mock_chip,
.mst = &mst
};
struct flashrom_progress progress_state = {
.user_data = (void *) &cnt,
};
flashrom_set_progress_callback(&flashctx, spi_read_progress_cb, &progress_state);
for (int i = 0; i < 4; i++) {
expect_memory(__wrap_spi_send_command, flash,
&flashctx, sizeof(flashctx));
will_return(__wrap_spi_send_command, JEDEC_WRDI);
will_return(__wrap_spi_send_command, JEDEC_READ);
will_return(__wrap_spi_send_command, max_data_read);
}
assert_int_equal(0, spi_chip_read(&flashctx, buf, offset, sizeof(buf)));
assert_int_equal(5, cnt);
}
void spi_write_enable_test_success(void **state) void spi_write_enable_test_success(void **state)
{ {
(void) state; /* unused */ (void) state; /* unused */

View File

@ -405,7 +405,6 @@ int main(int argc, char *argv[])
const struct CMUnitTest spi25_tests[] = { const struct CMUnitTest spi25_tests[] = {
cmocka_unit_test(spi_write_enable_test_success), cmocka_unit_test(spi_write_enable_test_success),
cmocka_unit_test(spi_write_disable_test_success), cmocka_unit_test(spi_write_disable_test_success),
cmocka_unit_test(spi_read_chunked_test_success),
cmocka_unit_test(probe_spi_rdid_test_success), cmocka_unit_test(probe_spi_rdid_test_success),
cmocka_unit_test(probe_spi_rdid4_test_success), cmocka_unit_test(probe_spi_rdid4_test_success),
cmocka_unit_test(probe_spi_rems_test_success), cmocka_unit_test(probe_spi_rems_test_success),

View File

@ -31,7 +31,6 @@ void flashbuses_to_text_test_success(void **state);
/* spi25.c */ /* spi25.c */
void spi_write_enable_test_success(void **state); void spi_write_enable_test_success(void **state);
void spi_write_disable_test_success(void **state); void spi_write_disable_test_success(void **state);
void spi_read_chunked_test_success(void **state);
void probe_spi_rdid_test_success(void **state); void probe_spi_rdid_test_success(void **state);
void probe_spi_rdid4_test_success(void **state); void probe_spi_rdid4_test_success(void **state);
void probe_spi_rems_test_success(void **state); void probe_spi_rems_test_success(void **state);