@@ -95,9 +95,10 @@ static inline int siwx91x_dma_addr_adjustment(uint32_t adjustment)
95
95
}
96
96
97
97
static int dma_channel_config (const struct device * dev , RSI_UDMA_HANDLE_T udma_handle ,
98
- uint32_t channel , struct dma_config * config ,
98
+ uint32_t channel , const struct dma_config * config ,
99
99
UDMA_Channel_Info * channel_info )
100
100
{
101
+ uint32_t dma_transfer_num = config -> head_block -> block_size / config -> source_data_size ;
101
102
const struct dma_siwx91x_config * cfg = dev -> config ;
102
103
UDMA_RESOURCES udma_resources = {
103
104
.reg = cfg -> reg ,
@@ -128,12 +129,11 @@ static int dma_channel_config(const struct device *dev, RSI_UDMA_HANDLE_T udma_h
128
129
}
129
130
130
131
/* Obtain the number of transfers */
131
- config -> head_block -> block_size /= config -> source_data_size ;
132
- if (config -> head_block -> block_size >= DMA_MAX_TRANSFER_COUNT ) {
132
+ if (dma_transfer_num >= DMA_MAX_TRANSFER_COUNT ) {
133
133
/* Maximum number of transfers is 1024 */
134
134
channel_control .totalNumOfDMATrans = DMA_MAX_TRANSFER_COUNT - 1 ;
135
135
} else {
136
- channel_control .totalNumOfDMATrans = config -> head_block -> block_size ;
136
+ channel_control .totalNumOfDMATrans = dma_transfer_num ;
137
137
}
138
138
139
139
if (siwx91x_dma_data_width (config -> source_data_size ) < 0 ||
@@ -167,8 +167,9 @@ static int dma_channel_config(const struct device *dev, RSI_UDMA_HANDLE_T udma_h
167
167
status = UDMAx_ChannelConfigure (& udma_resources , (uint8_t )channel ,
168
168
config -> head_block -> source_address ,
169
169
config -> head_block -> dest_address ,
170
- config -> head_block -> block_size , channel_control ,
171
- & channel_config , NULL , channel_info , udma_handle );
170
+ dma_transfer_num , channel_control ,
171
+ & channel_config , NULL , channel_info ,
172
+ udma_handle );
172
173
if (status ) {
173
174
return - EIO ;
174
175
}
0 commit comments