@@ -19,6 +19,8 @@ LOG_MODULE_REGISTER(esp32_spi, CONFIG_SPI_LOG_LEVEL);
1919#ifndef CONFIG_SOC_ESP32C3
2020#include <zephyr/drivers/interrupt_controller/intc_esp32.h>
2121#else
22+ #include <hal/gdma_hal.h>
23+ #include <hal/gdma_ll.h>
2224#include <zephyr/drivers/interrupt_controller/intc_esp32c3.h>
2325#endif
2426#include <zephyr/drivers/clock_control.h>
@@ -150,13 +152,25 @@ static int spi_esp32_init_dma(const struct device *dev)
150152{
151153 const struct spi_esp32_config * cfg = dev -> config ;
152154 struct spi_esp32_data * data = dev -> data ;
155+ uint8_t channel_offset ;
153156
154157 LOG_ERR ("DMA" );
155158 if (clock_control_on (cfg -> clock_dev , (clock_control_subsys_t )cfg -> dma_clk_src )) {
156159 LOG_ERR ("Could not enable DMA clock" );
157160 return - EIO ;
158161 }
159162
163+ #ifdef CONFIG_SOC_ESP32C3
164+ gdma_hal_init (& data -> hal_gdma , 0 );
165+ gdma_ll_enable_clock (data -> hal_gdma .dev , true);
166+ gdma_ll_tx_reset_channel (data -> hal_gdma .dev , cfg -> dma_host );
167+ gdma_ll_rx_reset_channel (data -> hal_gdma .dev , cfg -> dma_host );
168+ gdma_ll_tx_connect_to_periph (data -> hal_gdma .dev , cfg -> dma_host , 0 );
169+ gdma_ll_rx_connect_to_periph (data -> hal_gdma .dev , cfg -> dma_host , 0 );
170+ channel_offset = 0 ;
171+ #else
172+ channel_offset = 1 ;
173+ #endif /* CONFIG_SOC_ESP32C3 */
160174#ifdef CONFIG_SOC_ESP32
161175 /*Connect SPI and DMA*/
162176 DPORT_SET_PERI_REG_BITS (DPORT_SPI_DMA_CHAN_SEL_REG , 3 , cfg -> dma_host + 1 ,
@@ -166,8 +180,8 @@ static int spi_esp32_init_dma(const struct device *dev)
166180 data -> hal_config .dma_in = (spi_dma_dev_t * )cfg -> spi ;
167181 data -> hal_config .dma_out = (spi_dma_dev_t * )cfg -> spi ;
168182 data -> hal_config .dma_enabled = true;
169- data -> hal_config .tx_dma_chan = cfg -> dma_host + 1 ;
170- data -> hal_config .rx_dma_chan = cfg -> dma_host + 1 ;
183+ data -> hal_config .tx_dma_chan = cfg -> dma_host + channel_offset ;
184+ data -> hal_config .rx_dma_chan = cfg -> dma_host + channel_offset ;
171185 data -> hal_config .dmadesc_n = 1 ;
172186 data -> hal_config .dmadesc_rx = & data -> dma_desc_rx ;
173187 data -> hal_config .dmadesc_tx = & data -> dma_desc_tx ;
0 commit comments