Software APIs
mock_sec_mmio.h
1 // Copyright lowRISC contributors (OpenTitan project).
2 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3 // SPDX-License-Identifier: Apache-2.0
4 
5 #ifndef OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_BASE_MOCK_SEC_MMIO_H_
6 #define OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_BASE_MOCK_SEC_MMIO_H_
7 
8 #include "sw/device/lib/base/global_mock.h"
9 #include "sw/device/lib/base/mock_mmio_test_utils.h"
11 #include "sw/device/silicon_creator/testing/rom_test.h"
12 
13 namespace rom_test {
14 namespace internal {
15 /**
16  * Mock class for abs_mmio.c.
17  */
18 class MockSecMmio : public global_mock::GlobalMock<MockSecMmio> {
19  public:
20  MOCK_METHOD(void, Init, ());
21  MOCK_METHOD(uint32_t, Read32, (uint32_t addr));
22  MOCK_METHOD(void, Write32, (uint32_t addr, uint32_t value));
23  MOCK_METHOD(void, Write32Shadowed, (uint32_t addr, uint32_t value));
24  MOCK_METHOD(void, CheckValues, (uint32_t rnd_offset));
25  MOCK_METHOD(void, CheckCounters, (uint32_t expected_check_count));
26 };
27 } // namespace internal
28 
29 using MockSecMmio = testing::StrictMock<internal::MockSecMmio>;
30 
31 /**
32  * Expect a sec_mmio read at the given address, returning the given
33  * 32-bit value.
34  *
35  * @param addr Read address.
36  * @param ... The value to return. May be an integer, a pointer to
37  * little-endian data, or a `std::initializer_list<BitField>`.
38  */
39 #define EXPECT_SEC_READ32(addr, ...) \
40  EXPECT_CALL(::rom_test::MockSecMmio::Instance(), Read32(addr)) \
41  .WillOnce(testing::Return(mock_mmio::ToInt<uint32_t>(__VA_ARGS__)))
42 
43 /**
44  * Expect a sec_mmio write to the given address with the given 32-bit value.
45  *
46  * @param addr Write address.
47  * @param ... Expected value to be written. May be an integer, a pointer to
48  * little-endian data, or a `std::initializer_list<BitField>`.
49  */
50 #define EXPECT_SEC_WRITE32(addr, ...) \
51  EXPECT_CALL(::rom_test::MockSecMmio::Instance(), \
52  Write32(addr, mock_mmio::ToInt<uint32_t>(__VA_ARGS__)));
53 
54 /**
55  * Expect a shadowed write to the given offset with the given 32-bit value.
56  *
57  * @param addr Write address.
58  * @param ... Expected value to be written. May be an integer, a pointer to
59  * little-endian data, or a `std::initializer_list<BitField>`.
60  */
61 #define EXPECT_SEC_WRITE32_SHADOWED(addr, ...) \
62  EXPECT_CALL(::rom_test::MockSecMmio::Instance(), \
63  Write32Shadowed(addr, mock_mmio::ToInt<uint32_t>(__VA_ARGS__)));
64 
65 } // namespace rom_test
66 
67 #endif // OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_BASE_MOCK_SEC_MMIO_H_