Software APIs
ibex_unittest.cc
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 #include "sw/device/silicon_creator/lib/drivers/ibex.h"
6 
7 #include <array>
8 
9 #include "gtest/gtest.h"
10 #include "sw/device/lib/base/mock_abs_mmio.h"
11 #include "sw/device/silicon_creator/lib/base/mock_sec_mmio.h"
12 #include "sw/device/silicon_creator/testing/rom_test.h"
13 
15 #include "rv_core_ibex_regs.h"
16 
17 namespace ibex_unittest {
18 namespace {
19 
21  protected:
23  rom_test::MockSecMmio sec_;
24 };
25 
26 TEST_F(AddressTranslationTest, Slot0Sucess) {
27  uint32_t matching_addr = 0x9000000;
28  uint32_t remap_addr = 0x2000000;
29  uint32_t size = 0x8000;
30  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_IBUS_ADDR_MATCHING_0_REG_OFFSET,
31  0x9003fff);
32  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_DBUS_ADDR_MATCHING_0_REG_OFFSET,
33  0x9003fff);
34 
35  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_IBUS_REMAP_ADDR_0_REG_OFFSET,
36  remap_addr);
37  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_DBUS_REMAP_ADDR_0_REG_OFFSET,
38  remap_addr);
39 
40  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_IBUS_ADDR_EN_0_REG_OFFSET, 1);
41  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_DBUS_ADDR_EN_0_REG_OFFSET, 1);
42 
43  ibex_addr_remap_0_set(matching_addr, remap_addr, size);
44 }
45 
46 TEST_F(AddressTranslationTest, Slot1Sucess) {
47  // Note: 0xB040_0000 is not power-of-two aligned with respect to the size.
48  // The remap function will force-align the matching_addr to the size.
49  uint32_t matching_addr = 0xB040000;
50  uint32_t remap_addr = 0x6000000;
51  uint32_t size = 0x80000;
52  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_IBUS_ADDR_MATCHING_1_REG_OFFSET,
53  0xb03ffff);
54  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_DBUS_ADDR_MATCHING_1_REG_OFFSET,
55  0xb03ffff);
56 
57  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_IBUS_REMAP_ADDR_1_REG_OFFSET,
58  remap_addr);
59  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_DBUS_REMAP_ADDR_1_REG_OFFSET,
60  remap_addr);
61 
62  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_IBUS_ADDR_EN_1_REG_OFFSET, 1);
63  EXPECT_SEC_WRITE32(base_ + RV_CORE_IBEX_DBUS_ADDR_EN_1_REG_OFFSET, 1);
64 
65  ibex_addr_remap_1_set(matching_addr, remap_addr, size);
66 }
67 } // namespace
68 } // namespace ibex_unittest