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 bfc551484addf2ad864fa6dfaa98a915d900b92f Author: Gustavo Henrique Nihei <[email protected]> AuthorDate: Wed Mar 17 15:10:15 2021 -0300 xtensa/esp32: Clean up esp32_dma_init code Removed "isrx" parameter whose only purpose is to trigger an assertion on DEBUG builds. Also performed a minor refactor. --- arch/xtensa/src/esp32/esp32_dma.c | 42 ++++++++++++++++----------------- arch/xtensa/src/esp32/esp32_dma.h | 3 +-- arch/xtensa/src/esp32/esp32_spi.c | 4 ++-- arch/xtensa/src/esp32/esp32_spi_slave.c | 6 ++--- 4 files changed, 26 insertions(+), 29 deletions(-) diff --git a/arch/xtensa/src/esp32/esp32_dma.c b/arch/xtensa/src/esp32/esp32_dma.c index c085753..112e48b 100644 --- a/arch/xtensa/src/esp32/esp32_dma.c +++ b/arch/xtensa/src/esp32/esp32_dma.c @@ -36,6 +36,14 @@ #include "esp32_dma.h" /**************************************************************************** + * Preprocessor Definitions + ****************************************************************************/ + +#ifndef MIN +# define MIN(a,b) (a < b ? a : b) +#endif + +/**************************************************************************** * Public Functions ****************************************************************************/ @@ -51,7 +59,6 @@ * num - DMA descriptions number * pbuf - RX/TX buffer pointer * len - RX/TX buffer length - * isrx - true: RX DMA descriptions. false: TX DMA descriptions * * Returned Value: * Binded pbuf data bytes @@ -59,47 +66,38 @@ ****************************************************************************/ uint32_t esp32_dma_init(struct esp32_dmadesc_s *dmadesc, uint32_t num, - uint8_t *pbuf, uint32_t len, int isrx) + uint8_t *pbuf, uint32_t len) { int i; uint32_t bytes = len; uint8_t *pdata = pbuf; - uint32_t n; + uint32_t data_len; - DEBUGASSERT(pbuf && len); - if (isrx) - { - DEBUGASSERT((len & 3) == 0); - } + DEBUGASSERT(dmadesc != NULL); + DEBUGASSERT(pbuf != NULL); + DEBUGASSERT(len > 0); for (i = 0; i < num; i++) { - if (bytes < ESP32_DMA_DATALEN_MAX) - { - n = bytes; - } - else - { - n = ESP32_DMA_DATALEN_MAX; - } + data_len = MIN(bytes, ESP32_DMA_DATALEN_MAX); - dmadesc[i].ctrl = (n << DMA_CTRL_DATALEN_S) | - (n << DMA_CTRL_BUFLEN_S) | + dmadesc[i].ctrl = (data_len << DMA_CTRL_DATALEN_S) | + (data_len << DMA_CTRL_BUFLEN_S) | DMA_CTRL_OWN; dmadesc[i].pbuf = pdata; dmadesc[i].next = &dmadesc[i + 1]; - bytes -= n; - if (!bytes) + bytes -= data_len; + if (bytes == 0) { break; } - pdata += n; + pdata += data_len; } dmadesc[i].ctrl |= DMA_CTRL_EOF; - dmadesc[i].next = NULL; + dmadesc[i].next = NULL; return len - bytes; } diff --git a/arch/xtensa/src/esp32/esp32_dma.h b/arch/xtensa/src/esp32/esp32_dma.h index aec4632..1768da0 100644 --- a/arch/xtensa/src/esp32/esp32_dma.h +++ b/arch/xtensa/src/esp32/esp32_dma.h @@ -80,7 +80,6 @@ struct esp32_dmadesc_s * num - DMA descriptions number * pbuf - RX/TX buffer pointer * len - RX/TX buffer length - * isrx - true: RX DMA descriptions. false: TX DMA descriptions * * Returned Value: * Bind pbuf data bytes @@ -88,7 +87,7 @@ struct esp32_dmadesc_s ****************************************************************************/ uint32_t esp32_dma_init(struct esp32_dmadesc_s *dmadesc, uint32_t num, - uint8_t *pbuf, uint32_t len, int isrx); + uint8_t *pbuf, uint32_t len); #ifdef __cplusplus } diff --git a/arch/xtensa/src/esp32/esp32_spi.c b/arch/xtensa/src/esp32/esp32_spi.c index cc67f23..76e4c09 100644 --- a/arch/xtensa/src/esp32/esp32_spi.c +++ b/arch/xtensa/src/esp32/esp32_spi.c @@ -917,7 +917,7 @@ static void esp32_spi_dma_exchange(FAR struct esp32_spi_priv_s *priv, esp32_spi_reset_regbits(priv, SPI_DMA_CONF_OFFSET, SPI_DMA_RESET_MASK); n = esp32_dma_init(s_dma_txdesc[priv->config->dma_chan - 1], - SPI_DMADESC_NUM, tp, bytes, 0); + SPI_DMADESC_NUM, tp, bytes); regval = (uintptr_t)s_dma_txdesc[priv->config->dma_chan - 1] & SPI_OUTLINK_ADDR_V; @@ -936,7 +936,7 @@ static void esp32_spi_dma_exchange(FAR struct esp32_spi_priv_s *priv, if (rp) { esp32_dma_init(s_dma_rxdesc[priv->config->dma_chan - 1], - SPI_DMADESC_NUM, rp, bytes, 1); + SPI_DMADESC_NUM, rp, bytes); regval = (uintptr_t)s_dma_rxdesc[priv->config->dma_chan - 1] & SPI_INLINK_ADDR_V; diff --git a/arch/xtensa/src/esp32/esp32_spi_slave.c b/arch/xtensa/src/esp32/esp32_spi_slave.c index bfc958f..e4ffdef 100644 --- a/arch/xtensa/src/esp32/esp32_spi_slave.c +++ b/arch/xtensa/src/esp32/esp32_spi_slave.c @@ -649,7 +649,7 @@ static void esp32_spislv_tx(struct esp32_spislv_priv_s *priv) if (priv->dma_chan) { esp32_dma_init(s_tx_desc[priv->dma_chan - 1], SPI_DMADESC_NUM, - priv->txbuffer, priv->txlen, 0); + priv->txbuffer, priv->txlen); regval = (uint32_t)s_tx_desc[priv->dma_chan - 1] & SPI_OUTLINK_ADDR_V; esp32_spi_set_reg(priv, SPI_DMA_OUT_LINK_OFFSET, @@ -725,7 +725,7 @@ static void esp32_spislv_rx(struct esp32_spislv_priv_s *priv) /* Start to receive next block of data */ esp32_dma_init(s_rx_desc[priv->dma_chan - 1], SPI_DMADESC_NUM, - priv->rxbuffer + priv->rxlen, tmp, 1); + priv->rxbuffer + priv->rxlen, tmp); regval = (uint32_t)s_rx_desc[priv->dma_chan - 1] & SPI_INLINK_ADDR_V; @@ -911,7 +911,7 @@ static void esp32_spislv_initialize(FAR struct spi_sctrlr_s *dev) SPI_OUTDSCR_BURST_EN_M); esp32_dma_init(s_rx_desc[priv->dma_chan - 1], SPI_DMADESC_NUM, - priv->rxbuffer, SPI_SLAVE_BUFSIZE, 1); + priv->rxbuffer, SPI_SLAVE_BUFSIZE); regval = (uint32_t)s_rx_desc[priv->dma_chan - 1] & SPI_INLINK_ADDR_V; esp32_spi_set_reg(priv, SPI_DMA_IN_LINK_OFFSET,
