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/12/06 10:30:10 UTC

(nuttx) branch master updated: xtensa/esp32s3: QSPI disable DMA when sending command to slave

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


The following commit(s) were added to refs/heads/master by this push:
     new d9b543e465 xtensa/esp32s3: QSPI disable DMA when sending command to slave
d9b543e465 is described below

commit d9b543e465b6598964396744345fb036e318347b
Author: Dong Heng <do...@espressif.com>
AuthorDate: Thu Nov 23 10:31:13 2023 +0800

    xtensa/esp32s3: QSPI disable DMA when sending command to slave
---
 arch/xtensa/src/esp32s3/esp32s3_qspi.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/arch/xtensa/src/esp32s3/esp32s3_qspi.c b/arch/xtensa/src/esp32s3/esp32s3_qspi.c
index 903e1b497c..544dfc4607 100644
--- a/arch/xtensa/src/esp32s3/esp32s3_qspi.c
+++ b/arch/xtensa/src/esp32s3/esp32s3_qspi.c
@@ -725,6 +725,17 @@ static int esp32s3_qspi_command(struct qspi_dev_s *dev,
 
   /* Initiliaze QSPI user register */
 
+#ifdef CONFIG_ESP32S3_SPI_DMA
+
+  /* Disable QSPI DMA */
+
+  regval  = getreg32(SPI_DMA_CONF_REG(id));
+  regval &= ~(SPI_DMA_TX_ENA_M | SPI_DMA_RX_ENA_M);
+  putreg32(regval, SPI_DMA_CONF_REG(id));
+
+  putreg32(0, SPI_DMA_INT_ENA_REG(id));
+#endif
+
   user_reg &= ~(SPI_USR_ADDR_M |
                 SPI_USR_MOSI_M |
                 SPI_USR_MISO_M |
@@ -753,7 +764,8 @@ static int esp32s3_qspi_command(struct qspi_dev_s *dev,
 
       user_reg |= SPI_USR_ADDR_M;
 
-      putreg32(cmdinfo->addr, SPI_ADDR_REG(id));
+      regval = cmdinfo->addr << (32 - cmdinfo->addrlen * 8);
+      putreg32(regval, SPI_ADDR_REG(id));
     }
 
   /* Set dummy */
@@ -944,7 +956,8 @@ static int esp32s3_qspi_memory(struct qspi_dev_s *dev,
   user1_reg &= ~SPI_USR_ADDR_BITLEN_M;
   user1_reg |= (meminfo->addrlen * 8 - 1) << SPI_USR_ADDR_BITLEN_S;
 
-  putreg32(meminfo->addr, SPI_ADDR_REG(id));
+  regval = meminfo->addr << (32 - meminfo->addrlen * 8);
+  putreg32(regval, SPI_ADDR_REG(id));
 
   /* Set dummy */