5 #include "sw/device/silicon_creator/lib/drivers/pinmux.h"
7 #include "gtest/gtest.h"
10 #include "sw/device/lib/base/mock_abs_mmio.h"
12 #include "sw/device/silicon_creator/lib/base/mock_csr.h"
13 #include "sw/device/silicon_creator/lib/drivers/mock_otp.h"
14 #include "sw/device/silicon_creator/testing/rom_test.h"
17 #include "otp_ctrl_regs.h"
18 #include "pinmux_regs.h"
20 namespace pinmux_unittest {
22 using ::testing::Return;
27 rom_test::MockAbsMmio mmio_;
28 rom_test::MockOtp otp_;
29 mock_csr::MockCsr csr_;
46 EXPECT_TRUE(index >= 0 && index < kTopEarlgreyPinmuxPeripheralInLast);
47 EXPECT_TRUE(configured_in_.insert(index).second);
48 return base_ + PINMUX_MIO_PERIPH_INSEL_0_REG_OFFSET +
49 static_cast<uint32_t
>(index) *
sizeof(uint32_t);
53 return base_ + PINMUX_MIO_PAD_ATTR_0_REG_OFFSET +
54 static_cast<uint32_t
>(pad) *
sizeof(uint32_t);
69 EXPECT_TRUE(index >= 0 && index < kTopEarlgreyPinmuxMioOutLast);
70 EXPECT_TRUE(configured_out_.insert(index).second);
71 return base_ + PINMUX_MIO_OUTSEL_0_REG_OFFSET +
72 static_cast<uint32_t
>(index) *
sizeof(uint32_t);
76 TEST_F(InitTest, PadAttrPropagationDelay) {
78 const uint64_t kCpuCyclesIn5Micros = 5000 / kCpuClockPeriodNs;
82 TEST_F(InitTest, WithBootstrap) {
85 read32(OTP_CTRL_PARAM_OWNER_SW_CFG_ROM_BOOTSTRAP_DIS_OFFSET))
87 EXPECT_ABS_WRITE32(RegPadAttr(kTopEarlgreyMuxedPadsIoc0),
88 {{PINMUX_MIO_PAD_ATTR_0_PULL_EN_0_BIT, 1}});
89 EXPECT_ABS_WRITE32(RegPadAttr(kTopEarlgreyMuxedPadsIoc1),
90 {{PINMUX_MIO_PAD_ATTR_0_PULL_EN_0_BIT, 1}});
91 EXPECT_ABS_WRITE32(RegPadAttr(kTopEarlgreyMuxedPadsIoc2),
92 {{PINMUX_MIO_PAD_ATTR_0_PULL_EN_0_BIT, 1}});
93 EXPECT_CSR_WRITE(CSR_REG_MCYCLE, 0);
94 for (
size_t i = 0; i < 6; ++i) {
95 EXPECT_CSR_READ(CSR_REG_MCYCLE, i * 100);
105 EXPECT_ABS_WRITE32(RegPadAttr(kTopEarlgreyMuxedPadsIoc3),
106 {{PINMUX_MIO_PAD_ATTR_0_PULL_EN_0_BIT, 1},
107 {PINMUX_MIO_PAD_ATTR_0_PULL_SELECT_0_BIT, 1}});
116 TEST_F(InitTest, WithoutBootstrap) {
119 read32(OTP_CTRL_PARAM_OWNER_SW_CFG_ROM_BOOTSTRAP_DIS_OFFSET))
123 EXPECT_ABS_WRITE32(RegPadAttr(kTopEarlgreyMuxedPadsIoc3),
124 {{PINMUX_MIO_PAD_ATTR_0_PULL_EN_0_BIT, 1},
125 {PINMUX_MIO_PAD_ATTR_0_PULL_SELECT_0_BIT, 1}});
134 TEST_F(InitTest, Uart0TxOnly) {
139 pinmux_init_uart0_tx();