You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2023/09/05 05:33:16 UTC
[nuttx] 03/11: esp32s3/dma: Fix loading the DMA descriptor address
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit d26212bd39ec5893e28732da343f7a1dfe290a1f
Author: Tiago Medicci Serrano <ti...@espressif.com>
AuthorDate: Wed Aug 23 16:44:54 2023 -0300
esp32s3/dma: Fix loading the DMA descriptor address
The macro `SET_BITS` only sets the bits according to the bit mask
and, once it's being used to set the address field of the GDMA
inlink/outlink register, it's necessary to clean all the bits
corresponding to that field that were eventually setup previously
to avoid messing with the bits that correspond to the current
address being setup.
---
arch/xtensa/src/esp32s3/esp32s3_dma.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/xtensa/src/esp32s3/esp32s3_dma.c b/arch/xtensa/src/esp32s3/esp32s3_dma.c
index 1db65f1cb7..6381459c5f 100644
--- a/arch/xtensa/src/esp32s3/esp32s3_dma.c
+++ b/arch/xtensa/src/esp32s3/esp32s3_dma.c
@@ -242,6 +242,7 @@ uint32_t esp32s3_dma_setup(int chan, bool tx,
/* Set the descriptor link base address for TX channel */
regval = (uint32_t)dmadesc & DMA_OUTLINK_ADDR_CH0;
+ CLR_BITS(DMA_OUT_LINK_CH0_REG, chan, DMA_OUTLINK_ADDR_CH0);
SET_BITS(DMA_OUT_LINK_CH0_REG, chan, regval);
}
else
@@ -254,6 +255,7 @@ uint32_t esp32s3_dma_setup(int chan, bool tx,
/* Set the descriptor link base address for RX channel */
regval = (uint32_t)dmadesc & DMA_INLINK_ADDR_CH0;
+ CLR_BITS(DMA_IN_LINK_CH0_REG, chan, DMA_INLINK_ADDR_CH0);
SET_BITS(DMA_IN_LINK_CH0_REG, chan, regval);
}