Nikolai Artemiev has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/69130 )
Change subject: tests: ensure chip erase operation is executed ......................................................................
tests: ensure chip erase operation is executed
The `full_chip_erase_with_wp_dummyflasher_test_success` test case checks that erasing a write-protected region of a dummyflasher chip fails.
However erase optimization may cause the erase operation to be skipped if the flash contents are already erased, so the erase operation appears to succeed and the test case fails.
Writing a non-erased value to the chip ensures that an erase operation will be exectued and (hopefully) fail due to write protection.
BUG=b:237620197 BRANCH=none TEST=ninja test
Change-Id: Ia00444dcd2ad96c64832a13201efbd064cd7302d Signed-off-by: Nikolai Artemiev nartemiev@google.com --- M include/flash.h M tests/chip_wp.c 2 files changed, 35 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/30/69130/1
diff --git a/include/flash.h b/include/flash.h index 2ba235d..f0c6026 100644 --- a/include/flash.h +++ b/include/flash.h @@ -156,6 +156,7 @@ #define FEATURE_WRSR3 (1 << 23)
#define ERASED_VALUE(flash) (((flash)->chip->feature_bits & FEATURE_ERASED_ZERO) ? 0x00 : 0xff) +#define UNERASED_VALUE(flash) (((flash)->chip->feature_bits & FEATURE_ERASED_ZERO) ? 0xff : 0x00)
enum test_state { OK = 0, diff --git a/tests/chip_wp.c b/tests/chip_wp.c index 8f6cb5f..739c4f9 100644 --- a/tests/chip_wp.c +++ b/tests/chip_wp.c @@ -63,6 +63,7 @@ static const struct flashchip chip_W25Q128_V = { .vendor = "aklm&dummyflasher", .total_size = 16 * 1024, + .page_size = 1024, .tested = TEST_OK_PREW, .read = SPI_CHIP_READ, .write = SPI_CHIP_WRITE256, @@ -268,6 +269,14 @@ this stage WP is not enabled and erase completes successfully. */ assert_int_equal(0, flashrom_flash_erase(&flash));
+ /* Write non-erased value to entire chip so that erase operations cannot + * be optimized away. */ + unsigned long size = flashrom_flash_getsize(&flash); + uint8_t *const contents = malloc(size); + memset(contents, UNERASED_VALUE(&flash), size); + assert_int_equal(0, flashrom_image_write(&flash, contents, size, NULL)); + free(contents); + assert_int_equal(0, flashrom_wp_read_cfg(wp_cfg, &flash));
/* Hardware-protect first 4 KiB. */