@@ -19,6 +19,8 @@ LOG_MODULE_REGISTER(esp32_spi, CONFIG_SPI_LOG_LEVEL);
19
19
#ifndef CONFIG_SOC_ESP32C3
20
20
#include <zephyr/drivers/interrupt_controller/intc_esp32.h>
21
21
#else
22
+ #include <hal/gdma_hal.h>
23
+ #include <hal/gdma_ll.h>
22
24
#include <zephyr/drivers/interrupt_controller/intc_esp32c3.h>
23
25
#endif
24
26
#include <zephyr/drivers/clock_control.h>
@@ -150,13 +152,25 @@ static int spi_esp32_init_dma(const struct device *dev)
150
152
{
151
153
const struct spi_esp32_config * cfg = dev -> config ;
152
154
struct spi_esp32_data * data = dev -> data ;
155
+ uint8_t channel_offset ;
153
156
154
157
LOG_ERR ("DMA" );
155
158
if (clock_control_on (cfg -> clock_dev , (clock_control_subsys_t )cfg -> dma_clk_src )) {
156
159
LOG_ERR ("Could not enable DMA clock" );
157
160
return - EIO ;
158
161
}
159
162
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 */
160
174
#ifdef CONFIG_SOC_ESP32
161
175
/*Connect SPI and DMA*/
162
176
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)
166
180
data -> hal_config .dma_in = (spi_dma_dev_t * )cfg -> spi ;
167
181
data -> hal_config .dma_out = (spi_dma_dev_t * )cfg -> spi ;
168
182
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 ;
171
185
data -> hal_config .dmadesc_n = 1 ;
172
186
data -> hal_config .dmadesc_rx = & data -> dma_desc_rx ;
173
187
data -> hal_config .dmadesc_tx = & data -> dma_desc_tx ;
0 commit comments