summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolai Artemiev <nartemiev@google.com>2022-11-02 12:11:02 +1100
committerEdward O'Callaghan <quasisec@chromium.org>2022-11-13 07:51:14 +0000
commit7be01fd4519b4a0a764052832e8831d8ed406e43 (patch)
tree9643ad0b68d63516d2d701b8ce9c8d694b057527
parentc0813e7eddc553c5f8348ed1e1e4c8b00db93857 (diff)
downloadflashrom-7be01fd4519b4a0a764052832e8831d8ed406e43.tar.gz
flashrom-7be01fd4519b4a0a764052832e8831d8ed406e43.tar.bz2
flashrom-7be01fd4519b4a0a764052832e8831d8ed406e43.zip
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 executed and write protection will be properly tested. BUG=b:237620197 BRANCH=none TEST=ninja test Change-Id: Ia00444dcd2ad96c64832a13201efbd064cd7302d Signed-off-by: Nikolai Artemiev <nartemiev@google.com> Reviewed-on: https://review.coreboot.org/c/flashrom/+/69130 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org> Reviewed-by: Edward O'Callaghan <quasisec@chromium.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
-rw-r--r--include/flash.h1
-rw-r--r--tests/chip_wp.c9
2 files changed, 10 insertions, 0 deletions
diff --git a/include/flash.h b/include/flash.h
index 238d0101e..ea8e25b8e 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 c308959bf..40303ff19 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. */