11 #include "gtest/gtest.h"
13 #include "sw/device/lib/base/mock_mmio.h"
28 <<
" .scl_time_high_cycles = " << params.scl_time_high_cycles
30 <<
" .scl_time_low_cycles = " << params.scl_time_low_cycles
32 <<
" .rise_cycles = " << params.rise_cycles <<
",\n"
33 <<
" .fall_cycles = " << params.fall_cycles <<
",\n"
34 <<
" .start_signal_setup_cycles = "
35 << params.start_signal_setup_cycles <<
",\n"
36 <<
" .start_signal_hold_cycles = "
37 << params.start_signal_hold_cycles <<
",\n"
38 <<
" .data_signal_setup_cycles = "
39 << params.data_signal_setup_cycles <<
",\n"
40 <<
" .data_signal_hold_cycles = " << params.data_signal_hold_cycles
42 <<
" .stop_signal_setup_cycles = "
43 << params.stop_signal_setup_cycles <<
",\n"
66 <<
" .enable_host = " << params.
enable_host <<
",\n"
73 <<
" .host_idle = " << params.
host_idle <<
",\n"
74 <<
" .target_idle = " << params.
target_idle <<
",\n"
82 namespace dif_i2c_unittest {
84 using ::mock_mmio::LeInt;
85 using ::mock_mmio::MmioTest;
86 using ::mock_mmio::MockDevice;
88 class I2cTest :
public testing::Test,
public MmioTest {
90 dif_i2c_t i2c_ = {.base_addr = dev().region()};
97 .clock_period_nanos = 90,
98 .sda_rise_nanos = 250,
99 .sda_fall_nanos = 220,
105 .clock_period_nanos = 20,
106 .sda_rise_nanos = 120,
107 .sda_fall_nanos = 130,
110 TEST(ComputeTimingTest, StandardSpeed) {
114 config = kBaseConfigSlow;
117 .scl_time_high_cycles = 53,
118 .scl_time_low_cycles = 53,
121 .start_signal_setup_cycles = 53,
122 .start_signal_hold_cycles = 45,
123 .data_signal_setup_cycles = 3,
124 .data_signal_hold_cycles = 1,
125 .stop_signal_setup_cycles = 45,
126 .stop_signal_hold_cycles = 53,
129 EXPECT_EQ(params, expected);
131 config = kBaseConfigFast;
134 .scl_time_high_cycles = 252,
135 .scl_time_low_cycles = 235,
138 .start_signal_setup_cycles = 235,
139 .start_signal_hold_cycles = 200,
140 .data_signal_setup_cycles = 13,
141 .data_signal_hold_cycles = 1,
142 .stop_signal_setup_cycles = 200,
143 .stop_signal_hold_cycles = 235,
146 EXPECT_EQ(params, expected);
148 config = kBaseConfigSlow;
152 .scl_time_high_cycles = 64,
153 .scl_time_low_cycles = 53,
156 .start_signal_setup_cycles = 53,
157 .start_signal_hold_cycles = 45,
158 .data_signal_setup_cycles = 3,
159 .data_signal_hold_cycles = 1,
160 .stop_signal_setup_cycles = 45,
161 .stop_signal_hold_cycles = 53,
164 EXPECT_EQ(params, expected);
173 "I2C DIF unit tests are hardcoded for 4 input delay cycles.");
174 config = kBaseConfigSlow;
178 .scl_time_high_cycles = 4,
179 .scl_time_low_cycles = 4,
182 .start_signal_setup_cycles = 3,
183 .start_signal_hold_cycles = 3,
184 .data_signal_setup_cycles = 1,
185 .data_signal_hold_cycles = 1,
186 .stop_signal_setup_cycles = 3,
187 .stop_signal_hold_cycles = 3,
190 EXPECT_EQ(params, expected);
193 TEST(ComputeTimingTest, FastSpeed) {
197 config = kBaseConfigSlow;
200 .scl_time_high_cycles = 7,
201 .scl_time_low_cycles = 15,
204 .start_signal_setup_cycles = 7,
205 .start_signal_hold_cycles = 7,
206 .data_signal_setup_cycles = 2,
207 .data_signal_hold_cycles = 1,
208 .stop_signal_setup_cycles = 7,
209 .stop_signal_hold_cycles = 15,
212 EXPECT_EQ(params, expected);
214 config = kBaseConfigFast;
217 .scl_time_high_cycles = 47,
218 .scl_time_low_cycles = 65,
221 .start_signal_setup_cycles = 30,
222 .start_signal_hold_cycles = 30,
223 .data_signal_setup_cycles = 5,
224 .data_signal_hold_cycles = 1,
225 .stop_signal_setup_cycles = 30,
226 .stop_signal_hold_cycles = 65,
229 EXPECT_EQ(params, expected);
231 config = kBaseConfigSlow;
235 .scl_time_high_cycles = 68,
236 .scl_time_low_cycles = 15,
239 .start_signal_setup_cycles = 7,
240 .start_signal_hold_cycles = 7,
241 .data_signal_setup_cycles = 2,
242 .data_signal_hold_cycles = 1,
243 .stop_signal_setup_cycles = 7,
244 .stop_signal_hold_cycles = 15,
247 EXPECT_EQ(params, expected);
256 "I2C DIF unit tests are hardcoded for 4 input delay cycles.");
257 config = kBaseConfigSlow;
261 .scl_time_high_cycles = 4,
262 .scl_time_low_cycles = 4,
265 .start_signal_setup_cycles = 2,
266 .start_signal_hold_cycles = 2,
267 .data_signal_setup_cycles = 1,
268 .data_signal_hold_cycles = 1,
269 .stop_signal_setup_cycles = 2,
270 .stop_signal_hold_cycles = 3,
273 EXPECT_EQ(params, expected);
276 TEST(ComputeTimingTest, FastPlusSpeed) {
280 config = kBaseConfigFast;
283 .scl_time_high_cycles = 13,
284 .scl_time_low_cycles = 25,
287 .start_signal_setup_cycles = 13,
288 .start_signal_hold_cycles = 13,
289 .data_signal_setup_cycles = 3,
290 .data_signal_hold_cycles = 1,
291 .stop_signal_setup_cycles = 13,
292 .stop_signal_hold_cycles = 25,
295 EXPECT_EQ(params, expected);
297 config = kBaseConfigFast;
301 .scl_time_high_cycles = 37,
302 .scl_time_low_cycles = 25,
305 .start_signal_setup_cycles = 13,
306 .start_signal_hold_cycles = 13,
307 .data_signal_setup_cycles = 3,
308 .data_signal_hold_cycles = 1,
309 .stop_signal_setup_cycles = 13,
310 .stop_signal_hold_cycles = 25,
313 EXPECT_EQ(params, expected);
322 "I2C DIF unit tests are hardcoded for 4 input delay cycles.");
323 config = kBaseConfigFast;
327 .scl_time_high_cycles = 4,
328 .scl_time_low_cycles = 4,
331 .start_signal_setup_cycles = 2,
332 .start_signal_hold_cycles = 2,
333 .data_signal_setup_cycles = 1,
334 .data_signal_hold_cycles = 1,
335 .stop_signal_setup_cycles = 2,
336 .stop_signal_hold_cycles = 3,
339 EXPECT_EQ(params, expected);
342 TEST(ComputeTimingTest, NullArgs) {
350 .scl_time_high_cycles = 252,
351 .scl_time_low_cycles = 235,
354 .start_signal_setup_cycles = 235,
355 .start_signal_hold_cycles = 200,
356 .data_signal_setup_cycles = 13,
357 .data_signal_hold_cycles = 1,
358 .stop_signal_setup_cycles = 200,
359 .stop_signal_hold_cycles = 235,
362 EXPECT_WRITE32(I2C_TIMING0_REG_OFFSET,
364 {I2C_TIMING0_THIGH_OFFSET, config.scl_time_high_cycles},
365 {I2C_TIMING0_TLOW_OFFSET, config.scl_time_low_cycles},
367 EXPECT_WRITE32(I2C_TIMING1_REG_OFFSET,
369 {I2C_TIMING1_T_R_OFFSET, config.rise_cycles},
370 {I2C_TIMING1_T_F_OFFSET, config.fall_cycles},
373 I2C_TIMING2_REG_OFFSET,
375 {I2C_TIMING2_TSU_STA_OFFSET, config.start_signal_setup_cycles},
376 {I2C_TIMING2_THD_STA_OFFSET, config.start_signal_hold_cycles},
379 I2C_TIMING3_REG_OFFSET,
381 {I2C_TIMING3_TSU_DAT_OFFSET, config.data_signal_setup_cycles},
382 {I2C_TIMING3_THD_DAT_OFFSET, config.data_signal_hold_cycles},
385 I2C_TIMING4_REG_OFFSET,
387 {I2C_TIMING4_TSU_STO_OFFSET, config.stop_signal_setup_cycles},
394 EXPECT_READ32(I2C_CTRL_REG_OFFSET, 0x0000000b);
395 EXPECT_READ32(I2C_STATUS_REG_OFFSET, 0x0000073c);
399 .enable_target =
true,
400 .ack_control_en =
true,
401 .fmt_fifo_empty =
true,
402 .rx_fifo_empty =
true,
405 .tx_fifo_empty =
true,
406 .acq_fifo_empty =
true,
407 .ack_ctrl_stretch =
true,
409 EXPECT_EQ(
status, expectedStatus);
412 TEST_F(ConfigTest, NullArgs) {
422 EXPECT_MASK32(I2C_FIFO_CTRL_REG_OFFSET,
423 {{I2C_FIFO_CTRL_RXRST_BIT, 0x1, 0x1}});
427 TEST_F(FifoCtrlTest, RxNullArgs) {
431 TEST_F(FifoCtrlTest, FmtReset) {
432 EXPECT_MASK32(I2C_FIFO_CTRL_REG_OFFSET,
433 {{I2C_FIFO_CTRL_FMTRST_BIT, 0x1, 0x1}});
437 TEST_F(FifoCtrlTest, FmtNullArgs) {
441 TEST_F(FifoCtrlTest, AcqReset) {
442 EXPECT_MASK32(I2C_FIFO_CTRL_REG_OFFSET,
443 {{I2C_FIFO_CTRL_ACQRST_BIT, 0x1, 0x1}});
447 TEST_F(FifoCtrlTest, AcqNullArgs) {
451 TEST_F(FifoCtrlTest, TxReset) {
452 EXPECT_MASK32(I2C_FIFO_CTRL_REG_OFFSET,
453 {{I2C_FIFO_CTRL_TXRST_BIT, 0x1, 0x1}});
457 TEST_F(FifoCtrlTest, TxNullArgs) {
464 EXPECT_MASK32(I2C_HOST_FIFO_CONFIG_REG_OFFSET,
467 I2C_HOST_FIFO_CONFIG_RX_THRESH_OFFSET,
468 I2C_HOST_FIFO_CONFIG_RX_THRESH_MASK,
472 I2C_HOST_FIFO_CONFIG_FMT_THRESH_OFFSET,
473 I2C_HOST_FIFO_CONFIG_FMT_THRESH_MASK,
480 EXPECT_MASK32(I2C_HOST_FIFO_CONFIG_REG_OFFSET,
483 I2C_HOST_FIFO_CONFIG_RX_THRESH_OFFSET,
484 I2C_HOST_FIFO_CONFIG_RX_THRESH_MASK,
488 I2C_HOST_FIFO_CONFIG_FMT_THRESH_OFFSET,
489 I2C_HOST_FIFO_CONFIG_FMT_THRESH_MASK,
496 EXPECT_MASK32(I2C_HOST_FIFO_CONFIG_REG_OFFSET,
499 I2C_HOST_FIFO_CONFIG_RX_THRESH_OFFSET,
500 I2C_HOST_FIFO_CONFIG_RX_THRESH_MASK,
504 I2C_HOST_FIFO_CONFIG_FMT_THRESH_OFFSET,
505 I2C_HOST_FIFO_CONFIG_FMT_THRESH_MASK,
513 TEST_F(HostFifoConfigTest, SetLevelsNullArgs) {
521 EXPECT_MASK32(I2C_TARGET_FIFO_CONFIG_REG_OFFSET,
524 I2C_TARGET_FIFO_CONFIG_TX_THRESH_OFFSET,
525 I2C_TARGET_FIFO_CONFIG_TX_THRESH_MASK,
529 I2C_TARGET_FIFO_CONFIG_ACQ_THRESH_OFFSET,
530 I2C_TARGET_FIFO_CONFIG_ACQ_THRESH_MASK,
537 EXPECT_MASK32(I2C_TARGET_FIFO_CONFIG_REG_OFFSET,
540 I2C_TARGET_FIFO_CONFIG_TX_THRESH_OFFSET,
541 I2C_TARGET_FIFO_CONFIG_TX_THRESH_MASK,
545 I2C_TARGET_FIFO_CONFIG_ACQ_THRESH_OFFSET,
546 I2C_TARGET_FIFO_CONFIG_ACQ_THRESH_MASK,
553 EXPECT_MASK32(I2C_TARGET_FIFO_CONFIG_REG_OFFSET,
556 I2C_TARGET_FIFO_CONFIG_TX_THRESH_OFFSET,
557 I2C_TARGET_FIFO_CONFIG_TX_THRESH_MASK,
561 I2C_TARGET_FIFO_CONFIG_ACQ_THRESH_OFFSET,
562 I2C_TARGET_FIFO_CONFIG_ACQ_THRESH_MASK,
570 TEST_F(TargetFifoConfigTest, SetLevelsNullArgs) {
578 EXPECT_MASK32(I2C_CTRL_REG_OFFSET, {{I2C_CTRL_ENABLEHOST_BIT, 0x1, 0x1}});
581 EXPECT_MASK32(I2C_CTRL_REG_OFFSET, {{I2C_CTRL_ENABLEHOST_BIT, 0x1, 0x0}});
584 EXPECT_MASK32(I2C_CTRL_REG_OFFSET,
585 {{I2C_CTRL_MULTI_CONTROLLER_MONITOR_EN_BIT, 0x1, 0x1}});
589 EXPECT_MASK32(I2C_CTRL_REG_OFFSET,
590 {{I2C_CTRL_MULTI_CONTROLLER_MONITOR_EN_BIT, 0x1, 0x0}});
595 TEST_F(ControlTest, HostEnableNullArgs) {
606 TEST_F(ControlTest, ControllerHaltEvents) {
608 EXPECT_READ32(I2C_CONTROLLER_EVENTS_REG_OFFSET,
610 {I2C_CONTROLLER_EVENTS_NACK_BIT, 1},
611 {I2C_CONTROLLER_EVENTS_ARBITRATION_LOST_BIT, 1},
619 EXPECT_READ32(I2C_CONTROLLER_EVENTS_REG_OFFSET,
621 {I2C_CONTROLLER_EVENTS_UNHANDLED_NACK_TIMEOUT_BIT, 1},
622 {I2C_CONTROLLER_EVENTS_BUS_TIMEOUT_BIT, 1},
633 EXPECT_WRITE32(I2C_CONTROLLER_EVENTS_REG_OFFSET,
635 {I2C_CONTROLLER_EVENTS_NACK_BIT, 0},
636 {I2C_CONTROLLER_EVENTS_UNHANDLED_NACK_TIMEOUT_BIT, 1},
637 {I2C_CONTROLLER_EVENTS_BUS_TIMEOUT_BIT, 0},
645 EXPECT_WRITE32(I2C_CONTROLLER_EVENTS_REG_OFFSET,
647 {I2C_CONTROLLER_EVENTS_NACK_BIT, 1},
648 {I2C_CONTROLLER_EVENTS_UNHANDLED_NACK_TIMEOUT_BIT, 0},
649 {I2C_CONTROLLER_EVENTS_BUS_TIMEOUT_BIT, 1},
650 {I2C_CONTROLLER_EVENTS_ARBITRATION_LOST_BIT, 0},
655 TEST_F(ControlTest, DeviceEnable) {
656 EXPECT_MASK32(I2C_CTRL_REG_OFFSET, {{I2C_CTRL_ENABLETARGET_BIT, 0x1, 0x1}});
659 EXPECT_MASK32(I2C_CTRL_REG_OFFSET, {{I2C_CTRL_ENABLETARGET_BIT, 0x1, 0x0}});
662 EXPECT_MASK32(I2C_CTRL_REG_OFFSET,
663 {{I2C_CTRL_NACK_ADDR_AFTER_TIMEOUT_BIT, 0x1, 0x1}});
666 EXPECT_MASK32(I2C_CTRL_REG_OFFSET,
667 {{I2C_CTRL_NACK_ADDR_AFTER_TIMEOUT_BIT, 0x1, 0x0}});
670 EXPECT_MASK32(I2C_CTRL_REG_OFFSET,
671 {{I2C_CTRL_TX_STRETCH_CTRL_EN_BIT, 0x1, 0x1}});
675 EXPECT_MASK32(I2C_CTRL_REG_OFFSET,
676 {{I2C_CTRL_TX_STRETCH_CTRL_EN_BIT, 0x1, 0x0}});
681 TEST_F(ControlTest, DeviceEnableNullArgs) {
693 TEST_F(ControlTest, DeviceHaltEvents) {
695 EXPECT_READ32(I2C_TARGET_EVENTS_REG_OFFSET,
697 {I2C_TARGET_EVENTS_TX_PENDING_BIT, 1},
704 EXPECT_READ32(I2C_TARGET_EVENTS_REG_OFFSET,
706 {I2C_TARGET_EVENTS_BUS_TIMEOUT_BIT, 1},
707 {I2C_TARGET_EVENTS_ARBITRATION_LOST_BIT, 1},
717 EXPECT_WRITE32(I2C_TARGET_EVENTS_REG_OFFSET,
719 {I2C_TARGET_EVENTS_TX_PENDING_BIT, 0},
720 {I2C_TARGET_EVENTS_BUS_TIMEOUT_BIT, 1},
721 {I2C_TARGET_EVENTS_ARBITRATION_LOST_BIT, 0},
728 EXPECT_WRITE32(I2C_TARGET_EVENTS_REG_OFFSET,
730 {I2C_TARGET_EVENTS_TX_PENDING_BIT, 1},
731 {I2C_TARGET_EVENTS_BUS_TIMEOUT_BIT, 0},
732 {I2C_TARGET_EVENTS_ARBITRATION_LOST_BIT, 1},
737 TEST_F(ControlTest, LLPBK) {
738 EXPECT_MASK32(I2C_CTRL_REG_OFFSET, {{I2C_CTRL_LLPBK_BIT, 0x1, 0x1}});
741 EXPECT_MASK32(I2C_CTRL_REG_OFFSET, {{I2C_CTRL_LLPBK_BIT, 0x1, 0x0}});
745 TEST_F(ControlTest, LLPBKNullArgs) {
750 TEST_F(ControlTest, AddrNack) {
751 EXPECT_MASK32(I2C_CTRL_REG_OFFSET,
752 {{I2C_CTRL_NACK_ADDR_AFTER_TIMEOUT_BIT, 0x1, 0x1}});
755 EXPECT_MASK32(I2C_CTRL_REG_OFFSET,
756 {{I2C_CTRL_NACK_ADDR_AFTER_TIMEOUT_BIT, 0x1, 0x0}});
760 TEST_F(ControlTest, AddrNackNullArgs) {
764 TEST_F(ControlTest, AckControl) {
765 EXPECT_MASK32(I2C_CTRL_REG_OFFSET, {{I2C_CTRL_ACK_CTRL_EN_BIT, 0x1, 0x1}});
768 EXPECT_MASK32(I2C_CTRL_REG_OFFSET, {{I2C_CTRL_ACK_CTRL_EN_BIT, 0x1, 0x0}});
771 uint16_t auto_ack_count = 0;
772 EXPECT_READ32(I2C_TARGET_ACK_CTRL_REG_OFFSET,
774 {I2C_TARGET_ACK_CTRL_NBYTES_OFFSET, 0xa5},
777 EXPECT_EQ(auto_ack_count, 0xa5);
779 EXPECT_WRITE32(I2C_TARGET_ACK_CTRL_REG_OFFSET,
781 {I2C_TARGET_ACK_CTRL_NBYTES_OFFSET, 256},
785 EXPECT_WRITE32(I2C_TARGET_ACK_CTRL_REG_OFFSET,
787 {I2C_TARGET_ACK_CTRL_NACK_BIT, 1},
791 uint8_t pending_data;
792 EXPECT_READ32(I2C_ACQ_FIFO_NEXT_DATA_REG_OFFSET, 0x76);
794 EXPECT_EQ(pending_data, 0x76);
797 TEST_F(ControlTest, AckControlNullArgs) {
800 uint16_t count_arg = 0;
806 count_arg = I2C_TARGET_ACK_CTRL_NBYTES_MASK + 1;
810 uint8_t data_arg = 0;
818 EXPECT_MASK32(I2C_OVRD_REG_OFFSET, {{I2C_OVRD_TXOVRDEN_BIT, 0x1, 0x1}});
821 EXPECT_MASK32(I2C_OVRD_REG_OFFSET, {{I2C_OVRD_TXOVRDEN_BIT, 0x1, 0x0}});
825 TEST_F(OverrideTest, EnableNullArgs) {
829 TEST_F(OverrideTest, Drive) {
830 EXPECT_MASK32(I2C_OVRD_REG_OFFSET, {
831 {I2C_OVRD_SCLVAL_BIT, 0x1, 0x0},
832 {I2C_OVRD_SDAVAL_BIT, 0x1, 0x0},
836 EXPECT_MASK32(I2C_OVRD_REG_OFFSET, {
837 {I2C_OVRD_SCLVAL_BIT, 0x1, 0x0},
838 {I2C_OVRD_SDAVAL_BIT, 0x1, 0x1},
842 EXPECT_MASK32(I2C_OVRD_REG_OFFSET, {
843 {I2C_OVRD_SCLVAL_BIT, 0x1, 0x1},
844 {I2C_OVRD_SDAVAL_BIT, 0x1, 0x1},
849 TEST_F(OverrideTest, DriveNullArgs) {
853 TEST_F(OverrideTest, Sample) {
855 EXPECT_READ32(I2C_VAL_REG_OFFSET, 0x10293847);
857 EXPECT_EQ(scl, 0x3847);
858 EXPECT_EQ(sda, 0x1029);
861 EXPECT_READ32(I2C_VAL_REG_OFFSET, 0x10293847);
864 EXPECT_EQ(sda, 0x1029);
867 EXPECT_READ32(I2C_VAL_REG_OFFSET, 0x10293847);
869 EXPECT_EQ(scl, 0x3847);
873 TEST_F(OverrideTest, SampleNullArgs) {
882 EXPECT_READ32(I2C_HOST_FIFO_STATUS_REG_OFFSET, 0x00290047);
883 EXPECT_READ32(I2C_TARGET_FIFO_STATUS_REG_OFFSET, 0x00100038);
885 EXPECT_EQ(fmt, 0x47);
888 EXPECT_EQ(acq, 0x10);
890 rx = 0, fmt = 0, tx = 0, acq = 0;
891 EXPECT_READ32(I2C_HOST_FIFO_STATUS_REG_OFFSET, 0x00290047);
892 EXPECT_READ32(I2C_TARGET_FIFO_STATUS_REG_OFFSET, 0x00100038);
894 EXPECT_EQ(fmt, 0x47);
899 rx = 0, fmt = 0, tx = 0, acq = 0;
900 EXPECT_READ32(I2C_HOST_FIFO_STATUS_REG_OFFSET, 0x00290047);
901 EXPECT_READ32(I2C_TARGET_FIFO_STATUS_REG_OFFSET, 0x00100038);
905 EXPECT_EQ(fmt, 0x47);
909 rx = 0, fmt = 0, tx = 0, acq = 0;
910 EXPECT_READ32(I2C_HOST_FIFO_STATUS_REG_OFFSET, 0x00290047);
911 EXPECT_READ32(I2C_TARGET_FIFO_STATUS_REG_OFFSET, 0x00100038);
918 rx = 0, fmt = 0, tx = 0, acq = 0;
919 EXPECT_READ32(I2C_HOST_FIFO_STATUS_REG_OFFSET, 0x00290047);
920 EXPECT_READ32(I2C_TARGET_FIFO_STATUS_REG_OFFSET, 0x00100038);
925 EXPECT_EQ(acq, 0x10);
927 rx = 0, fmt = 0, tx = 0, acq = 0;
928 EXPECT_READ32(I2C_HOST_FIFO_STATUS_REG_OFFSET, 0x00290047);
929 EXPECT_READ32(I2C_TARGET_FIFO_STATUS_REG_OFFSET, 0x00100038);
936 rx = 0, fmt = 0, tx = 0, acq = 0;
937 EXPECT_READ32(I2C_HOST_FIFO_STATUS_REG_OFFSET, 0x00290047);
938 EXPECT_READ32(I2C_TARGET_FIFO_STATUS_REG_OFFSET, 0x00100038);
944 EXPECT_EQ(acq, 0x10);
947 TEST_F(FifoTest, GetLevelsNullArgs) {
953 TEST_F(FifoTest, Read) {
956 EXPECT_READ32(I2C_RDATA_REG_OFFSET, 0xab);
957 EXPECT_READ32(I2C_RDATA_REG_OFFSET, 0xcd);
958 EXPECT_READ32(I2C_RDATA_REG_OFFSET, 0xef);
961 EXPECT_EQ(val, 0xab);
963 EXPECT_EQ(val, 0xcd);
965 EXPECT_EQ(val, 0xcd);
968 TEST_F(FifoTest, ReadNullArgs) {
973 TEST_F(FifoTest, Acquire) {
977 EXPECT_READ32(I2C_ACQDATA_REG_OFFSET, 0x0ab);
978 EXPECT_READ32(I2C_ACQDATA_REG_OFFSET, 0x3cd);
979 EXPECT_READ32(I2C_ACQDATA_REG_OFFSET, 0x2ef);
980 EXPECT_READ32(I2C_ACQDATA_REG_OFFSET, 0x101);
983 EXPECT_EQ(val, 0xab);
986 EXPECT_EQ(val, 0xcd);
989 EXPECT_EQ(val, 0xcd);
992 EXPECT_EQ(val, 0x01);
996 TEST_F(FifoTest, AcqNullArgs) {
1003 TEST_F(FifoTest, WriteRaw) {
1004 EXPECT_WRITE32(I2C_FDATA_REG_OFFSET, {
1005 {I2C_FDATA_FBYTE_OFFSET, 0x44},
1006 {I2C_FDATA_START_BIT, 0x1},
1013 EXPECT_WRITE32(I2C_FDATA_REG_OFFSET, {
1014 {I2C_FDATA_FBYTE_OFFSET, 0x55},
1018 EXPECT_WRITE32(I2C_FDATA_REG_OFFSET, {
1019 {I2C_FDATA_FBYTE_OFFSET, 0x66},
1020 {I2C_FDATA_STOP_BIT, 0x1},
1021 {I2C_FDATA_NAKOK_BIT, 0x1},
1026 .suppress_nak_irq =
true,
1029 EXPECT_WRITE32(I2C_FDATA_REG_OFFSET, {
1030 {I2C_FDATA_FBYTE_OFFSET, 0x00},
1031 {I2C_FDATA_READB_BIT, 0x1},
1032 {I2C_FDATA_RCONT_BIT, 0x1},
1040 EXPECT_WRITE32(I2C_FDATA_REG_OFFSET, {
1041 {I2C_FDATA_FBYTE_OFFSET, 0x77},
1042 {I2C_FDATA_READB_BIT, 0x1},
1050 TEST_F(FifoTest, WriteRawBadArgs) {
1060 .suppress_nak_irq =
true,
1064 TEST_F(FifoTest, TransmitByte) {
1065 EXPECT_WRITE32(I2C_TXDATA_REG_OFFSET, 0x00000044);
1069 TEST_F(FifoTest, TransmitBadArgs) {
1076 EXPECT_WRITE32(I2C_TIMEOUT_CTRL_REG_OFFSET,
1077 {{I2C_TIMEOUT_CTRL_EN_BIT, 1},
1078 {I2C_TIMEOUT_CTRL_MODE_BIT, 0},
1079 {I2C_TIMEOUT_CTRL_VAL_OFFSET, 0x01234567}});
1082 EXPECT_WRITE32(I2C_TIMEOUT_CTRL_REG_OFFSET,
1083 {{I2C_TIMEOUT_CTRL_EN_BIT, 1},
1084 {I2C_TIMEOUT_CTRL_MODE_BIT, 1},
1085 {I2C_TIMEOUT_CTRL_VAL_OFFSET, 0x07654321}});
1088 EXPECT_WRITE32(I2C_HOST_TIMEOUT_CTRL_REG_OFFSET, 0x81234567);
1092 TEST_F(StretchTest, ConfigTimeoutsBadArgs) {
1100 uint32_t config = 0x00000000;
1124 EXPECT_WRITE32(I2C_TARGET_ID_REG_OFFSET, assemble_address(
nullptr,
nullptr));
1128 EXPECT_WRITE32(I2C_TARGET_ID_REG_OFFSET, assemble_address(&id0,
nullptr));
1132 EXPECT_WRITE32(I2C_TARGET_ID_REG_OFFSET, assemble_address(
nullptr, &id1));
1135 EXPECT_WRITE32(I2C_TARGET_ID_REG_OFFSET, assemble_address(&id0, &id1));
1139 TEST_F(AddressTest, SetAddressBadArgs) {