diff options
-rw-r--r-- | include/flash.h | 1 | ||||
-rw-r--r-- | tests/chip_wp.c | 9 |
2 files changed, 10 insertions, 0 deletions
diff --git a/include/flash.h b/include/flash.h index 238d0101..ea8e25b8 100644 --- a/include/flash.h +++ b/include/flash.h @@ -156,6 +156,7 @@ enum write_granularity { #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 c308959b..40303ff1 100644 --- a/tests/chip_wp.c +++ b/tests/chip_wp.c @@ -63,6 +63,7 @@ static void teardown(struct flashrom_layout **layout) 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 @@ void full_chip_erase_with_wp_dummyflasher_test_success(void **state) 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. */ |