[sw/rom] Fix sec_mmio_read32 expectations bug
sec_mmio write functions store masked values in the expectations table.
The reads, on the other hand, were storing unmasked values. This
consistency issue was making the sec_mmio_check_values function fail.
The fix is to stored masked values for the sec_mmio_read32() function.
Signed-off-by: Miguel Osorio <miguelosorio@google.com>
diff --git a/sw/device/silicon_creator/lib/base/sec_mmio.c b/sw/device/silicon_creator/lib/base/sec_mmio.c
index c9192b6..514029f 100644
--- a/sw/device/silicon_creator/lib/base/sec_mmio.c
+++ b/sw/device/silicon_creator/lib/base/sec_mmio.c
@@ -70,7 +70,7 @@
uint32_t value = abs_mmio_read32(addr);
uint32_t masked_value = value ^ kSecMmioMaskVal;
- upsert_register(addr, value);
+ upsert_register(addr, masked_value);
if ((abs_mmio_read32(addr) ^ kSecMmioMaskVal) != masked_value) {
sec_mmio_shutdown_cb(kErrorSecMmioReadFault);
diff --git a/sw/device/silicon_creator/lib/base/sec_mmio_unittest.cc b/sw/device/silicon_creator/lib/base/sec_mmio_unittest.cc
index 8cdfb71..031709d 100644
--- a/sw/device/silicon_creator/lib/base/sec_mmio_unittest.cc
+++ b/sw/device/silicon_creator/lib/base/sec_mmio_unittest.cc
@@ -109,15 +109,20 @@
EXPECT_ABS_READ32(8, 0);
sec_mmio_write32(8, 0);
+ // Test an expected value modification which gets updated by a read.
+ EXPECT_ABS_READ32(8, 0xa5a5a5a5);
+ EXPECT_ABS_READ32(8, 0xa5a5a5a5);
+ EXPECT_EQ(sec_mmio_read32(8), 0xa5a5a5a5);
+
// The expected permutation order for rnd_offset=0 is {1, 2, 0}.
EXPECT_ABS_READ32(4, 0x87654321);
- EXPECT_ABS_READ32(8, 0);
+ EXPECT_ABS_READ32(8, 0xa5a5a5a5);
EXPECT_ABS_READ32(0, 0x12345678);
sec_mmio_check_values(/*rnd_offset=*/0);
EXPECT_EQ(ctx_->check_count, 1);
// The expected permutation order for rnd_offset=1 is {2, 0, 1}.
- EXPECT_ABS_READ32(8, 0);
+ EXPECT_ABS_READ32(8, 0xa5a5a5a5);
EXPECT_ABS_READ32(0, 0x12345678);
EXPECT_ABS_READ32(4, 0x87654321);
sec_mmio_check_values(/*rnd_offset=*/1);
@@ -126,7 +131,7 @@
// The expected permutation order for rnd_offset=32 is {0, 1, 2}.
EXPECT_ABS_READ32(0, 0x12345678);
EXPECT_ABS_READ32(4, 0x87654321);
- EXPECT_ABS_READ32(8, 0);
+ EXPECT_ABS_READ32(8, 0xa5a5a5a5);
sec_mmio_check_values(/*rnd_offset=*/32);
EXPECT_EQ(ctx_->check_count, 3);
}