5#include "sw/device/lib/testing/dma_testutils.h"
8#include "spi_host_regs.h"
11 kTopDarjeelingDirectPadsSpiHost0Sck,
12 kTopDarjeelingDirectPadsSpiHost0Csb,
13 kTopDarjeelingDirectPadsSpiHost0Sd3,
14 kTopDarjeelingDirectPadsSpiHost0Sd2,
15 kTopDarjeelingDirectPadsSpiHost0Sd1,
16 kTopDarjeelingDirectPadsSpiHost0Sd0};
22void init_spi_host(
dif_spi_host_t *spi_host, uint32_t peripheral_clock_freq_hz,
23 uint32_t rx_watermark) {
25 .spi_clock = peripheral_clock_freq_hz / 2,
26 .peripheral_clock_freq_hz = peripheral_clock_freq_hz,
27 .chip_select = {.idle = 2, .trail = 2, .lead = 2},
31 .rx_watermark = rx_watermark};
32 CHECK_DIF_OK(dif_spi_host_configure(spi_host, config));
33 CHECK_DIF_OK(dif_spi_host_output_set_enabled(spi_host,
true));
47 .flags = kDifPinmuxPadAttrPullResistorEnable |
48 kDifPinmuxPadAttrPullResistorUp};
49 for (uint32_t i = 0; i <
ARRAYSIZE(spi_host0_direct_pads); ++i) {
50 CHECK_DIF_OK(dif_pinmux_pad_write_attrs(pinmux, spi_host0_direct_pads[i],
57 uint8_t *rx_buffer, uint32_t chunk_size,
58 uint32_t total_size) {
63 .length = total_size}},
67 CHECK_DIF_OK(dif_spi_host_start_transaction(
68 spi_host, 0, host_operations,
ARRAYSIZE(host_operations)));
73 SPI_HOST_RXDATA_REG_OFFSET,
74 .asid = kDifDmaOpentitanInternalBus},
75 .destination = {.address = (uint32_t)&rx_buffer[0],
76 .asid = kDifDmaOpentitanInternalBus},
77 .src_config = {.wrap =
true, .increment =
false},
78 .dst_config = {.wrap =
false, .increment =
true},
79 .total_size = total_size,
80 .chunk_size = chunk_size,
81 .width = kDifDmaTransWidth4Bytes};
86 CHECK_DIF_OK(dif_dma_handshake_irq_enable(dma, 0x2));
87 CHECK_DIF_OK(dif_dma_configure(dma, transaction));
88 CHECK_DIF_OK(dif_dma_handshake_enable(dma));