1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-08-15 19:40:19 +02:00

tests/erase: record the opcode for each erase

This allows tests to verify that the correct opcode is used when
erasing, which is required to unit-test the fix to issue #525 where in
some situations an incorrect erase opcode will be used.

BUG=https://ticket.coreboot.org/issues/525

Change-Id: I3983fe42c2e7f06668a1bd20d2db7fafa93b8043
Signed-off-by: Peter Marheine <pmarheine@chromium.org>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/82251
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
This commit is contained in:
Peter Marheine
2024-05-10 17:06:50 +10:00
parent 9a9ccdb6e6
commit 510ef74653
5 changed files with 157 additions and 58 deletions

View File

@@ -402,8 +402,10 @@ int check_for_unwritable_regions(const struct flashctx *flash, unsigned int star
return 0;
}
/* special unit-test hook */
erasefunc_t *g_test_erase_injector;
#ifdef FLASHROM_TEST
/* special unit-test hooks */
erasefunc_t *g_test_erase_injector[NUM_TEST_ERASE_INJECTORS];
#endif
erasefunc_t *lookup_erase_func_ptr(const struct block_eraser *const eraser)
{
@@ -442,7 +444,14 @@ erasefunc_t *lookup_erase_func_ptr(const struct block_eraser *const eraser)
case ERASE_SECTOR_49LFXXXC: return &erase_sector_49lfxxxc;
case STM50_SECTOR_ERASE: return &erase_sector_stm50; // TODO rename to &stm50_sector_erase;
case EDI_CHIP_BLOCK_ERASE: return &edi_chip_block_erase;
case TEST_ERASE_INJECTOR: return g_test_erase_injector;
#ifdef FLASHROM_TEST
case TEST_ERASE_INJECTOR_1:
case TEST_ERASE_INJECTOR_2:
case TEST_ERASE_INJECTOR_3:
case TEST_ERASE_INJECTOR_4:
case TEST_ERASE_INJECTOR_5:
return g_test_erase_injector[eraser->block_erase - TEST_ERASE_INJECTOR_1];
#endif
/* default: total function, 0 indicates no erase function set.
* We explicitly do not want a default catch-all case in the switch
* to ensure unhandled enum's are compiler warnings.
@@ -540,8 +549,10 @@ int check_erased_range(struct flashctx *flash, unsigned int start, unsigned int
return ret;
}
#ifdef FLASHROM_TEST
/* special unit-test hook */
read_func_t *g_test_read_injector;
#endif
static read_func_t *lookup_read_func_ptr(const struct flashchip *chip)
{
@@ -552,7 +563,9 @@ static read_func_t *lookup_read_func_ptr(const struct flashchip *chip)
case EDI_CHIP_READ: return &edi_chip_read;
case SPI_READ_AT45DB: return spi_read_at45db;
case SPI_READ_AT45DB_E8: return spi_read_at45db_e8;
#ifdef FLASHROM_TEST
case TEST_READ_INJECTOR: return g_test_read_injector;
#endif
/* default: total function, 0 indicates no read function set.
* We explicitly do not want a default catch-all case in the switch
* to ensure unhandled enum's are compiler warnings.
@@ -976,7 +989,9 @@ static int init_default_layout(struct flashctx *flash)
}
/* special unit-test hook */
#ifdef FLASHROM_TEST
write_func_t *g_test_write_injector;
#endif
static write_func_t *lookup_write_func_ptr(const struct flashchip *chip)
{
@@ -992,7 +1007,9 @@ static write_func_t *lookup_write_func_ptr(const struct flashchip *chip)
case WRITE_82802AB: return &write_82802ab;
case WRITE_EN29LV640B: return &write_en29lv640b;
case EDI_CHIP_WRITE: return &edi_chip_write;
#ifdef FLASHROM_TEST
case TEST_WRITE_INJECTOR: return g_test_write_injector;
#endif
/* default: total function, 0 indicates no write function set.
* We explicitly do not want a default catch-all case in the switch
* to ensure unhandled enum's are compiler warnings.