5 #include "sw/device/lib/testing/dma_testutils.h"
7 #include "hw/top_darjeeling/sw/autogen/top_darjeeling.h"
8 #include "spi_host_regs.h"
10 static const top_darjeeling_direct_pads_t spi_host0_direct_pads[6] = {
11 kTopDarjeelingDirectPadsSpiHost0Sck,
12 kTopDarjeelingDirectPadsSpiHost0Csb,
13 kTopDarjeelingDirectPadsSpiHost0Sd3,
14 kTopDarjeelingDirectPadsSpiHost0Sd2,
15 kTopDarjeelingDirectPadsSpiHost0Sd1,
16 kTopDarjeelingDirectPadsSpiHost0Sd0};
22 void 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};
41 void setup_pads_spi_host0(dif_pinmux_t *pinmux) {
47 .flags = kDifPinmuxPadAttrPullResistorEnable |
48 kDifPinmuxPadAttrPullResistorUp};
49 for (uint32_t i = 0; i <
ARRAYSIZE(spi_host0_direct_pads); ++i) {
56 void setup_spi_dma_transaction(dif_spi_host_t *spi_host, dif_dma_t *dma,
57 uint8_t *rx_buffer, uint32_t chunk_size,
58 uint32_t total_size) {
63 .length = total_size}},
68 spi_host, 0, host_operations,
ARRAYSIZE(host_operations)));
72 .source = {.address = TOP_DARJEELING_SPI_HOST0_BASE_ADDR +
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};
84 TOP_DARJEELING_RAM_MAIN_SIZE_BYTES));