19#include "sw/device/lib/dif/autogen/dif_spi_device_autogen.h"
21#include "hw/top/spi_device_regs.h"
28 if (spi_device == NULL) {
42 if (spi_device == NULL) {
47 spi_device->
base_addr = mmio_region_from_addr(dt_spi_device_primary_reg_block(dt));
65 if (spi_device == NULL) {
72 alert_idx = SPI_DEVICE_ALERT_TEST_FATAL_FAULT_BIT;
78 uint32_t alert_test_reg = bitfield_bit32_write(0, alert_idx,
true);
81 (ptrdiff_t)SPI_DEVICE_ALERT_TEST_REG_OFFSET,
92 static bool spi_device_get_irq_bit_index(
93 dif_spi_device_irq_t irq,
98 *index_out = SPI_DEVICE_INTR_COMMON_UPLOAD_CMDFIFO_NOT_EMPTY_BIT;
101 *index_out = SPI_DEVICE_INTR_COMMON_UPLOAD_PAYLOAD_NOT_EMPTY_BIT;
104 *index_out = SPI_DEVICE_INTR_COMMON_UPLOAD_PAYLOAD_OVERFLOW_BIT;
107 *index_out = SPI_DEVICE_INTR_COMMON_READBUF_WATERMARK_BIT;
110 *index_out = SPI_DEVICE_INTR_COMMON_READBUF_FLIP_BIT;
113 *index_out = SPI_DEVICE_INTR_COMMON_TPM_HEADER_NOT_EMPTY_BIT;
116 *index_out = SPI_DEVICE_INTR_COMMON_TPM_RDFIFO_CMD_END_BIT;
119 *index_out = SPI_DEVICE_INTR_COMMON_TPM_RDFIFO_DROP_BIT;
142 dif_spi_device_irq_t irq,
146 if (spi_device == NULL ||
153 *type = irq_types[irq];
163 if (spi_device == NULL || snapshot == NULL) {
167 *snapshot = mmio_region_read32(
169 (ptrdiff_t)SPI_DEVICE_INTR_STATE_REG_OFFSET);
179 if (spi_device == NULL) {
185 (ptrdiff_t)SPI_DEVICE_INTR_STATE_REG_OFFSET,
195 dif_spi_device_irq_t irq,
198 if (spi_device == NULL || is_pending == NULL) {
203 if (!spi_device_get_irq_bit_index(irq, &index)) {
207 uint32_t intr_state_reg = mmio_region_read32(
209 (ptrdiff_t)SPI_DEVICE_INTR_STATE_REG_OFFSET);
212 *is_pending = bitfield_bit32_read(intr_state_reg, index);
222 if (spi_device == NULL) {
229 (ptrdiff_t)SPI_DEVICE_INTR_STATE_REG_OFFSET,
239 dif_spi_device_irq_t irq) {
241 if (spi_device == NULL) {
246 if (!spi_device_get_irq_bit_index(irq, &index)) {
251 uint32_t intr_state_reg = bitfield_bit32_write(0, index,
true);
254 (ptrdiff_t)SPI_DEVICE_INTR_STATE_REG_OFFSET,
264 dif_spi_device_irq_t irq,
267 if (spi_device == NULL) {
272 if (!spi_device_get_irq_bit_index(irq, &index)) {
276 uint32_t intr_test_reg = bitfield_bit32_write(0, index, val);
279 (ptrdiff_t)SPI_DEVICE_INTR_TEST_REG_OFFSET,
289 dif_spi_device_irq_t irq,
292 if (spi_device == NULL || state == NULL) {
297 if (!spi_device_get_irq_bit_index(irq, &index)) {
301 uint32_t intr_enable_reg = mmio_region_read32(
303 (ptrdiff_t)SPI_DEVICE_INTR_ENABLE_REG_OFFSET);
306 bool is_enabled = bitfield_bit32_read(intr_enable_reg, index);
307 *state = is_enabled ?
316 dif_spi_device_irq_t irq,
319 if (spi_device == NULL) {
324 if (!spi_device_get_irq_bit_index(irq, &index)) {
328 uint32_t intr_enable_reg = mmio_region_read32(
330 (ptrdiff_t)SPI_DEVICE_INTR_ENABLE_REG_OFFSET);
334 intr_enable_reg = bitfield_bit32_write(intr_enable_reg, index, enable_bit);
337 (ptrdiff_t)SPI_DEVICE_INTR_ENABLE_REG_OFFSET,
349 if (spi_device == NULL) {
354 if (snapshot != NULL) {
355 *snapshot = mmio_region_read32(
357 (ptrdiff_t)SPI_DEVICE_INTR_ENABLE_REG_OFFSET);
364 (ptrdiff_t)SPI_DEVICE_INTR_ENABLE_REG_OFFSET,
376 if (spi_device == NULL || snapshot == NULL) {
382 (ptrdiff_t)SPI_DEVICE_INTR_ENABLE_REG_OFFSET,