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 I2cPinmuxPlatformIdCount,
131} i2c_pinmux_platform_id_t;
143status_t i2c_testutils_select_pinmux(
const dif_pinmux_t *pinmux,
145 i2c_pinmux_platform_id_t platform);
155status_t i2c_testutils_detach_pinmux(
const dif_pinmux_t *pinmux,
165static inline status_t i2c_testutils_fifo_empty(
const dif_i2c_t *i2c) {
167 TRY(dif_i2c_get_status(i2c, &
status));
168 return OK_STATUS(
status.rx_fifo_empty);
178static inline status_t i2c_testutils_tx_fifo_full(
const dif_i2c_t *i2c) {
180 TRY(dif_i2c_get_status(i2c, &
status));
181 return OK_STATUS(
status.tx_fifo_full);
191static inline status_t i2c_testutils_tx_fifo_empty(
const dif_i2c_t *i2c) {
193 TRY(dif_i2c_get_status(i2c, &
status));
194 return OK_STATUS(
status.tx_fifo_empty);
204static inline status_t i2c_testutils_fmt_fifo_empty(
const dif_i2c_t *i2c) {
206 TRY(dif_i2c_get_status(i2c, &
status));
207 return OK_STATUS(
status.fmt_fifo_empty);
224status_t i2c_testutils_read(
const dif_i2c_t *i2c, uint8_t addr,
225 size_t byte_count, uint8_t *data,
size_t timeout);
244status_t i2c_testutils_wait_host_idle(
const dif_i2c_t *i2c);
255status_t i2c_testutils_wait_transaction_finish(
const dif_i2c_t *i2c);