7 #include "gtest/gtest.h"
8 #include "sw/device/lib/base/mock_mmio.h"
12 #include "pattgen_regs.h"
14 namespace dif_pattgen_unittest {
16 using ::mock_mmio::LeInt;
17 using ::mock_mmio::MmioTest;
18 using ::mock_mmio::MockDevice;
22 dif_pattgen_t pattgen_ = {.base_addr = dev().region()};
26 .seed_pattern_lower_word = 0xDEADBEEF,
27 .seed_pattern_upper_word = 0xCAFEFEED,
28 .seed_pattern_length = 64,
29 .num_pattern_repetitions = 64,
40 TEST_F(ConfigChannelTest, BadChannel) {
45 TEST_F(ConfigChannelTest, BadPolarity) {
51 TEST_F(ConfigChannelTest, BadSeedPatternLength) {
52 config_.seed_pattern_length = 0;
56 config_.seed_pattern_length = 65;
61 TEST_F(ConfigChannelTest, BadNumPatternRepetitions) {
62 config_.num_pattern_repetitions = 0;
66 config_.num_pattern_repetitions = 1025;
71 TEST_F(ConfigChannelTest, ConfigAttemptWhileEnabled) {
72 EXPECT_READ32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH0_BIT, 1}});
77 EXPECT_READ32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH1_BIT, 1}});
83 TEST_F(ConfigChannelTest, FullSeedSuccess) {
84 EXPECT_READ32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH0_BIT, 0},
85 {PATTGEN_CTRL_ENABLE_CH1_BIT, 1}});
86 EXPECT_WRITE32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_POLARITY_CH0_BIT, 1},
87 {PATTGEN_CTRL_ENABLE_CH1_BIT, 1}});
88 EXPECT_WRITE32(PATTGEN_PREDIV_CH0_REG_OFFSET, config_.clock_divisor);
89 EXPECT_WRITE32(PATTGEN_DATA_CH0_0_REG_OFFSET,
90 config_.seed_pattern_lower_word);
91 EXPECT_WRITE32(PATTGEN_DATA_CH0_1_REG_OFFSET,
92 config_.seed_pattern_upper_word);
93 EXPECT_READ32(PATTGEN_SIZE_REG_OFFSET, {{PATTGEN_SIZE_REPS_CH1_OFFSET, 127},
94 {PATTGEN_SIZE_LEN_CH1_OFFSET, 31}});
95 EXPECT_WRITE32(PATTGEN_SIZE_REG_OFFSET,
96 {{PATTGEN_SIZE_LEN_CH0_OFFSET,
97 static_cast<uint8_t
>(config_.seed_pattern_length - 1)},
98 {PATTGEN_SIZE_REPS_CH0_OFFSET,
99 static_cast<uint16_t
>(config_.num_pattern_repetitions - 1)},
100 {PATTGEN_SIZE_LEN_CH1_OFFSET, 31},
101 {PATTGEN_SIZE_REPS_CH1_OFFSET, 127}});
106 TEST_F(ConfigChannelTest, HalfSeedSuccess) {
107 config_.seed_pattern_length = 16;
108 EXPECT_READ32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH1_BIT, 0}});
109 EXPECT_WRITE32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_POLARITY_CH1_BIT, 1}});
110 EXPECT_WRITE32(PATTGEN_PREDIV_CH1_REG_OFFSET, config_.clock_divisor);
111 EXPECT_WRITE32(PATTGEN_DATA_CH1_0_REG_OFFSET,
112 config_.seed_pattern_lower_word);
113 EXPECT_READ32(PATTGEN_SIZE_REG_OFFSET, 0);
115 PATTGEN_SIZE_REG_OFFSET,
116 {{PATTGEN_SIZE_LEN_CH1_OFFSET,
117 static_cast<uint8_t
>(config_.seed_pattern_length - 1)},
118 {PATTGEN_SIZE_REPS_CH1_OFFSET,
119 static_cast<uint16_t
>(config_.num_pattern_repetitions - 1)}});
131 TEST_F(ChannelSetEnabledTest, BadChannel) {
136 TEST_F(ChannelSetEnabledTest, BadEnableValue) {
138 &pattgen_, kDifPattgenChannel0,
static_cast<dif_toggle_t>(2)));
141 TEST_F(ChannelSetEnabledTest, Success) {
142 EXPECT_READ32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH0_BIT, 0},
143 {PATTGEN_CTRL_ENABLE_CH1_BIT, 1}});
144 EXPECT_WRITE32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH0_BIT, 1},
145 {PATTGEN_CTRL_ENABLE_CH1_BIT, 1}});
149 EXPECT_READ32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH0_BIT, 1},
150 {PATTGEN_CTRL_ENABLE_CH1_BIT, 1}});
151 EXPECT_WRITE32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH0_BIT, 1},
152 {PATTGEN_CTRL_ENABLE_CH1_BIT, 0}});
162 nullptr, kDifPattgenChannel0, &is_enabled));
167 TEST_F(ChannelGetEnabledTest, BadChannel) {
173 TEST_F(ChannelGetEnabledTest, Success) {
176 EXPECT_READ32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH1_BIT, 1}});
181 EXPECT_READ32(PATTGEN_CTRL_REG_OFFSET, {{PATTGEN_CTRL_ENABLE_CH0_BIT, 0}});