7 #include "gtest/gtest.h"
9 #include "sw/device/lib/base/mock_mmio.h"
13 #include "otbn_regs.h"
15 namespace dif_otbn_unittest {
25 void ExpectDeviceReset() {
26 EXPECT_WRITE32(OTBN_INTR_ENABLE_REG_OFFSET, 0);
27 EXPECT_WRITE32(OTBN_INTR_STATE_REG_OFFSET,
28 std::numeric_limits<uint32_t>::max());
31 dif_otbn_t dif_otbn_ = {.base_addr = dev().region()};
38 TEST_F(ResetTest, Default) {
50 TEST_F(WriteCmdTest, Success) {
52 EXPECT_WRITE32(OTBN_CMD_REG_OFFSET, kDifOtbnCmdExecute);
66 EXPECT_EQ(
status, kDifOtbnStatusBusySecWipeDmem);
69 TEST_F(GetStatusTest, Success) {
70 EXPECT_READ32(OTBN_STATUS_REG_OFFSET, kDifOtbnStatusBusyExecute);
74 EXPECT_EQ(
status, kDifOtbnStatusBusyExecute);
89 TEST_F(GetErrBitsTest, Success) {
90 EXPECT_READ32(OTBN_ERR_BITS_REG_OFFSET,
106 uint32_t insn_cnt = 55;
108 EXPECT_EQ(insn_cnt, 55);
111 TEST_F(GetInsnCntTest, Success) {
112 EXPECT_READ32(OTBN_INSN_CNT_REG_OFFSET, 55);
116 EXPECT_EQ(insn_cnt, 55);
122 uint32_t test_data[] = {0};
131 TEST_F(ImemWriteTest, BadLenBytes) {
132 uint32_t test_data[] = {0};
140 TEST_F(ImemWriteTest, BadOffset) {
141 uint32_t test_data[] = {0};
149 TEST_F(ImemWriteTest, BadAddressBeyondMemorySize) {
150 uint32_t test_data[] = {0};
156 TEST_F(ImemWriteTest, BadAddressIntegerOverflow) {
157 uint32_t test_data[4] = {0};
162 TEST_F(ImemWriteTest, SuccessWithoutOffset) {
164 ASSERT_GE(OTBN_IMEM_SIZE_BYTES, 8);
166 uint32_t test_data[2] = {0x12345678, 0xabcdef01};
168 EXPECT_WRITE32(OTBN_IMEM_REG_OFFSET, test_data[0]);
169 EXPECT_WRITE32(OTBN_IMEM_REG_OFFSET + 4, test_data[1]);
174 TEST_F(ImemWriteTest, SuccessWithOffset) {
176 ASSERT_GE(OTBN_IMEM_SIZE_BYTES, 12);
178 uint32_t test_data[2] = {0x12345678, 0xabcdef01};
180 EXPECT_WRITE32(OTBN_IMEM_REG_OFFSET + 4, test_data[0]);
181 EXPECT_WRITE32(OTBN_IMEM_REG_OFFSET + 8, test_data[1]);
189 uint32_t test_data[2] = {0x12345678, 0xabcdef01};
200 EXPECT_EQ(test_data[0], 0x12345678);
201 EXPECT_EQ(test_data[1], 0xabcdef01);
204 TEST_F(ImemReadTest, BadLenBytes) {
205 uint32_t test_data[2] = {0};
213 TEST_F(ImemReadTest, BadOffset) {
214 uint32_t test_data[2] = {0};
224 TEST_F(ImemReadTest, SuccessWithoutOffset) {
226 ASSERT_GE(OTBN_IMEM_SIZE_BYTES, 8);
228 uint32_t test_data[2] = {0};
230 EXPECT_READ32(OTBN_IMEM_REG_OFFSET, 0x12345678);
231 EXPECT_READ32(OTBN_IMEM_REG_OFFSET + 4, 0xabcdef01);
234 EXPECT_EQ(test_data[0], 0x12345678);
235 EXPECT_EQ(test_data[1], 0xabcdef01);
238 TEST_F(ImemReadTest, SuccessWithOffset) {
240 ASSERT_GE(OTBN_IMEM_SIZE_BYTES, 12);
242 uint32_t test_data[2] = {0};
244 EXPECT_READ32(OTBN_IMEM_REG_OFFSET + 4, 0x12345678);
245 EXPECT_READ32(OTBN_IMEM_REG_OFFSET + 8, 0xabcdef01);
248 EXPECT_EQ(test_data[0], 0x12345678);
249 EXPECT_EQ(test_data[1], 0xabcdef01);
255 uint32_t test_data[1] = {0};
264 TEST_F(DmemWriteTest, BadLenBytes) {
265 uint32_t test_data[1] = {0};
273 TEST_F(DmemWriteTest, BadOffset) {
274 uint32_t test_data[1] = {0};
282 TEST_F(DmemWriteTest, SuccessWithoutOffset) {
284 ASSERT_GE(OTBN_DMEM_SIZE_BYTES, 8);
286 uint32_t test_data[2] = {0x12345678, 0xabcdef01};
288 EXPECT_WRITE32(OTBN_DMEM_REG_OFFSET, test_data[0]);
289 EXPECT_WRITE32(OTBN_DMEM_REG_OFFSET + 4, test_data[1]);
294 TEST_F(DmemWriteTest, SuccessWithOffset) {
296 ASSERT_GE(OTBN_DMEM_SIZE_BYTES, 12);
298 uint32_t test_data[2] = {0x12345678, 0xabcdef01};
300 EXPECT_WRITE32(OTBN_DMEM_REG_OFFSET + 4, test_data[0]);
301 EXPECT_WRITE32(OTBN_DMEM_REG_OFFSET + 8, test_data[1]);
309 uint32_t test_data[2] = {0x12345678, 0xabcdef01};
320 EXPECT_EQ(test_data[0], 0x12345678);
321 EXPECT_EQ(test_data[1], 0xabcdef01);
324 TEST_F(DmemReadTest, BadLenBytes) {
325 uint32_t test_data[2] = {0};
333 TEST_F(DmemReadTest, BadOffset) {
334 uint32_t test_data[2] = {0};
344 TEST_F(DmemReadTest, SuccessWithoutOffset) {
346 ASSERT_GE(OTBN_DMEM_SIZE_BYTES, 8);
348 uint32_t test_data[2] = {0};
350 EXPECT_READ32(OTBN_DMEM_REG_OFFSET, 0x12345678);
351 EXPECT_READ32(OTBN_DMEM_REG_OFFSET + 4, 0xabcdef01);
354 EXPECT_EQ(test_data[0], 0x12345678);
355 EXPECT_EQ(test_data[1], 0xabcdef01);
358 TEST_F(DmemReadTest, SuccessWithOffset) {
360 ASSERT_GE(OTBN_DMEM_SIZE_BYTES, 12);
362 uint32_t test_data[2] = {0};
364 EXPECT_READ32(OTBN_DMEM_REG_OFFSET + 4, 0x12345678);
365 EXPECT_READ32(OTBN_DMEM_REG_OFFSET + 8, 0xabcdef01);
368 EXPECT_EQ(test_data[0], 0x12345678);
369 EXPECT_EQ(test_data[1], 0xabcdef01);
378 TEST_F(ControlSoftwareErrorsFatalTest, Success) {
379 EXPECT_WRITE32(OTBN_CTRL_REG_OFFSET, 0x1);
380 EXPECT_READ32(OTBN_CTRL_REG_OFFSET, 0x1);
385 TEST_F(ControlSoftwareErrorsFatalTest, Failure) {
386 EXPECT_WRITE32(OTBN_CTRL_REG_OFFSET, 0x0);
387 EXPECT_READ32(OTBN_CTRL_REG_OFFSET, 0x1);