11 #include "gtest/gtest.h"
12 #include "sw/device/lib/base/mock_abs_mmio.h"
13 #include "sw/device/silicon_creator/lib/error.h"
14 #include "sw/device/silicon_creator/testing/rom_test.h"
16 namespace sec_mmio_unittest {
18 using ::testing::Each;
19 using ::testing::ElementsAreArray;
26 rom_test::MockAbsMmio mmio_;
31 ctx_->check_count = 1;
32 ctx_->expected_write_count = 1;
34 ctx_->write_count = 1;
38 EXPECT_EQ(ctx_->check_count, 0);
39 EXPECT_EQ(ctx_->expected_write_count, 0);
40 EXPECT_EQ(ctx_->last_index, 0);
41 EXPECT_EQ(ctx_->write_count, 0);
42 EXPECT_THAT(ctx_->addrs, Each(Eq(UINT32_MAX)));
43 EXPECT_THAT(ctx_->values, Each(Eq(UINT32_MAX)));
46 TEST_F(SecMmioTest, NextStageInitialize) {
50 "kSecMmioRegFileSize must be greater than 2");
51 std::array<uint32_t, kSecMmioRegFileSize> expected_addrs;
52 std::array<uint32_t, kSecMmioRegFileSize> expected_values;
58 ctx_->addrs[i] = i ^ 0xa;
59 ctx_->values[i] = i ^ 0x5;
60 expected_addrs[i] = ctx_->addrs[i];
61 expected_values[i] = ctx_->values[i];
64 ctx_->check_count = 5;
65 ctx_->expected_write_count = 6;
66 ctx_->write_count = 6;
69 ctx_->last_index = kExpectedWriteCount;
72 expected_addrs[i] = UINT32_MAX;
73 expected_values[i] = UINT32_MAX;
78 EXPECT_EQ(ctx_->write_count, 6);
79 EXPECT_EQ(ctx_->expected_write_count, 6);
80 EXPECT_EQ(ctx_->last_index, kExpectedWriteCount);
81 EXPECT_EQ(ctx_->check_count, 0);
82 EXPECT_THAT(ctx_->addrs, ElementsAreArray(expected_addrs));
83 EXPECT_THAT(ctx_->values, ElementsAreArray(expected_values));
86 TEST_F(SecMmioTest, Read32OrDie) {
87 EXPECT_ABS_READ32(0, 0x12345678);
88 EXPECT_ABS_READ32(0, 0x12345678);
91 EXPECT_ABS_READ32(4, 0x87654321);
92 EXPECT_ABS_READ32(4, 0x87654321);
95 EXPECT_ABS_READ32(0, 0x87654321);
96 EXPECT_ABS_READ32(0, 0x87654321);
101 EXPECT_EQ(ctx_->write_count, 0);
102 EXPECT_EQ(ctx_->last_index, 2);
105 TEST_F(SecMmioTest, Write32) {
106 EXPECT_ABS_WRITE32(0, 0x12345678);
107 EXPECT_ABS_READ32(0, 0x12345678);
109 EXPECT_EQ(ctx_->write_count, 1);
111 EXPECT_ABS_WRITE32(4, 0x87654321);
112 EXPECT_ABS_READ32(4, 0x87654321);
114 EXPECT_EQ(ctx_->write_count, 2);
116 EXPECT_ABS_WRITE32(0, 0x87654321);
117 EXPECT_ABS_READ32(0, 0x87654321);
119 EXPECT_EQ(ctx_->write_count, 3);
123 EXPECT_EQ(ctx_->last_index, 2);
126 TEST_F(SecMmioTest, CheckValues) {
127 EXPECT_ABS_WRITE32(0, 0x12345678);
128 EXPECT_ABS_READ32(0, 0x12345678);
131 EXPECT_ABS_WRITE32(4, 0x87654321);
132 EXPECT_ABS_READ32(4, 0x87654321);
135 EXPECT_ABS_WRITE32(8, 0);
136 EXPECT_ABS_READ32(8, 0);
140 EXPECT_ABS_READ32(8, 0xa5a5a5a5);
141 EXPECT_ABS_READ32(8, 0xa5a5a5a5);
145 EXPECT_ABS_READ32(0, 0x12345678);
146 EXPECT_ABS_READ32(4, 0x87654321);
147 EXPECT_ABS_READ32(8, 0xa5a5a5a5);
149 EXPECT_EQ(ctx_->check_count, 1);
152 EXPECT_ABS_READ32(4, 0x87654321);
153 EXPECT_ABS_READ32(8, 0xa5a5a5a5);
154 EXPECT_ABS_READ32(0, 0x12345678);
156 EXPECT_EQ(ctx_->check_count, 2);
159 EXPECT_ABS_READ32(8, 0xa5a5a5a5);
160 EXPECT_ABS_READ32(0, 0x12345678);
161 EXPECT_ABS_READ32(4, 0x87654321);
163 EXPECT_EQ(ctx_->check_count, 3);
166 TEST_F(SecMmioTest, CheckCount) {
167 EXPECT_ABS_WRITE32(0, 0x12345678);
168 EXPECT_ABS_READ32(0, 0x12345678);
174 EXPECT_EQ(ctx_->check_count, 2);
184 EXPECT_ABS_READ32(0, 0x12345678);
185 EXPECT_ABS_READ32(0, 0);
191 TEST_F(SecMmioDeathTest, Write32SimulatedFault) {
194 EXPECT_ABS_WRITE32(0, 0x12345678);
195 EXPECT_ABS_READ32(0, 0);
201 TEST_F(SecMmioDeathTest, CheckValuesSimulatedFault) {
204 EXPECT_ABS_WRITE32(0, 0x12345678);
205 EXPECT_ABS_READ32(0, 0x12345678);
208 EXPECT_ABS_READ32(0, 0);
214 TEST_F(SecMmioDeathTest, CheckCountWriteMismatch) {
219 EXPECT_ABS_WRITE32(0, 0x12345678);
220 EXPECT_ABS_READ32(0, 0x12345678);