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/incubator-nuttx.git
commit 27e2da33b4253aca4eb28bf1e293354e598779f7 Author: Gustavo Henrique Nihei <[email protected]> AuthorDate: Fri Mar 19 16:10:56 2021 -0300 xtensa/esp32: Fix buffer size word-alignment for DMA transfers --- arch/xtensa/src/esp32/esp32_dma.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/xtensa/src/esp32/esp32_dma.c b/arch/xtensa/src/esp32/esp32_dma.c index 112e48b..b4b2d21 100644 --- a/arch/xtensa/src/esp32/esp32_dma.c +++ b/arch/xtensa/src/esp32/esp32_dma.c @@ -72,6 +72,7 @@ uint32_t esp32_dma_init(struct esp32_dmadesc_s *dmadesc, uint32_t num, uint32_t bytes = len; uint8_t *pdata = pbuf; uint32_t data_len; + uint32_t buf_len; DEBUGASSERT(dmadesc != NULL); DEBUGASSERT(pbuf != NULL); @@ -81,8 +82,14 @@ uint32_t esp32_dma_init(struct esp32_dmadesc_s *dmadesc, uint32_t num, { data_len = MIN(bytes, ESP32_DMA_DATALEN_MAX); + /* Round the number of bytes to the nearest word, since the buffer + * length must be word-aligned. + */ + + buf_len = (data_len + sizeof(uintptr_t) - 1) / sizeof(uintptr_t); + dmadesc[i].ctrl = (data_len << DMA_CTRL_DATALEN_S) | - (data_len << DMA_CTRL_BUFLEN_S) | + (buf_len << DMA_CTRL_BUFLEN_S) | DMA_CTRL_OWN; dmadesc[i].pbuf = pdata; dmadesc[i].next = &dmadesc[i + 1];
