dmaengine: stm32-dma: fix burst in case of unaligned memory address
Theorically, address pointers used by STM32 DMA must be chosen so as to ensure that all transfers within a burst block are aligned on the address boundary equal to the size of the transfer. If this is always the case for peripheral addresses on STM32, it is not for memory addresses if the user doesn't respect this alignment constraint. To avoid a weird behavior of the DMA controller in this case (no error triggered but data are not transferred as expected), force no burst. Signed-off-by: Amelie Delaunay <amelie.delaunay@foss.st.com> Link: https://lore.kernel.org/r/20211011094259.315023-4-amelie.delaunay@foss.st.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
Родитель
b20fd5fa31
Коммит
af229d2c25
|
@ -753,8 +753,14 @@ static int stm32_dma_set_xfer_param(struct stm32_dma_chan *chan,
|
|||
if (src_bus_width < 0)
|
||||
return src_bus_width;
|
||||
|
||||
/* Set memory burst size */
|
||||
src_maxburst = STM32_DMA_MAX_BURST;
|
||||
/*
|
||||
* Set memory burst size - burst not possible if address is not aligned on
|
||||
* the address boundary equal to the size of the transfer
|
||||
*/
|
||||
if (buf_addr % buf_len)
|
||||
src_maxburst = 1;
|
||||
else
|
||||
src_maxburst = STM32_DMA_MAX_BURST;
|
||||
src_best_burst = stm32_dma_get_best_burst(buf_len,
|
||||
src_maxburst,
|
||||
fifoth,
|
||||
|
@ -803,8 +809,14 @@ static int stm32_dma_set_xfer_param(struct stm32_dma_chan *chan,
|
|||
if (dst_bus_width < 0)
|
||||
return dst_bus_width;
|
||||
|
||||
/* Set memory burst size */
|
||||
dst_maxburst = STM32_DMA_MAX_BURST;
|
||||
/*
|
||||
* Set memory burst size - burst not possible if address is not aligned on
|
||||
* the address boundary equal to the size of the transfer
|
||||
*/
|
||||
if (buf_addr % buf_len)
|
||||
dst_maxburst = 1;
|
||||
else
|
||||
dst_maxburst = STM32_DMA_MAX_BURST;
|
||||
dst_best_burst = stm32_dma_get_best_burst(buf_len,
|
||||
dst_maxburst,
|
||||
fifoth,
|
||||
|
|
Загрузка…
Ссылка в новой задаче