5#ifndef OPENTITAN_SW_DEVICE_LIB_TESTING_I2C_TESTUTILS_H_
6#define OPENTITAN_SW_DEVICE_LIB_TESTING_I2C_TESTUTILS_H_
10#include "sw/device/lib/base/status.h"
25status_t i2c_testutils_write(
const dif_i2c_t *i2c, uint8_t addr,
26 size_t byte_count,
const uint8_t *data,
39status_t i2c_testutils_issue_read(
const dif_i2c_t *i2c, uint8_t addr,
51status_t i2c_testutils_target_check_start(
const dif_i2c_t *i2c, uint8_t *addr);
65status_t i2c_testutils_target_check_end(
const dif_i2c_t *i2c,
77status_t i2c_testutils_target_read(
const dif_i2c_t *i2c, uint16_t byte_count,
92status_t i2c_testutils_target_check_read(
const dif_i2c_t *i2c, uint8_t *addr,
103status_t i2c_testutils_target_write(
const dif_i2c_t *i2c, uint16_t byte_count);
119status_t i2c_testutils_target_check_write(
const dif_i2c_t *i2c,
120 uint16_t byte_count, uint8_t *addr,
121 uint8_t *bytes, uint8_t *cont_byte);
126typedef enum i2c_pinmux_platform_id {
127 I2cPinmuxPlatformIdHyper310 = 0,
128 I2cPinmuxPlatformIdDvsim,
129 I2cPinmuxPlatformIdCw310Pmod,
130 I2cPinmuxPlatformIdCw340,
131 I2cPinmuxPlatformIdSilicon,
132 I2cPinmuxPlatformIdCount,
133} i2c_pinmux_platform_id_t;
145status_t i2c_testutils_select_pinmux(
const dif_pinmux_t *pinmux,
147 i2c_pinmux_platform_id_t platform);
157status_t i2c_testutils_detach_pinmux(
const dif_pinmux_t *pinmux,
167static inline status_t i2c_testutils_fifo_empty(
const dif_i2c_t *i2c) {
169 TRY(dif_i2c_get_status(i2c, &
status));
170 return OK_STATUS(
status.rx_fifo_empty);
180static inline status_t i2c_testutils_tx_fifo_full(
const dif_i2c_t *i2c) {
182 TRY(dif_i2c_get_status(i2c, &
status));
183 return OK_STATUS(
status.tx_fifo_full);
193static inline status_t i2c_testutils_tx_fifo_empty(
const dif_i2c_t *i2c) {
195 TRY(dif_i2c_get_status(i2c, &
status));
196 return OK_STATUS(
status.tx_fifo_empty);
206static inline status_t i2c_testutils_fmt_fifo_empty(
const dif_i2c_t *i2c) {
208 TRY(dif_i2c_get_status(i2c, &
status));
209 return OK_STATUS(
status.fmt_fifo_empty);
226status_t i2c_testutils_read(
const dif_i2c_t *i2c, uint8_t addr,
227 size_t byte_count, uint8_t *data,
size_t timeout);
244 uint32_t sda_rise_nanos,
245 uint32_t sda_fall_nanos);
254status_t i2c_testutils_wait_host_idle(
const dif_i2c_t *i2c);
265status_t i2c_testutils_wait_transaction_finish(
const dif_i2c_t *i2c);