You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by je...@apache.org on 2020/08/24 10:37:44 UTC
[incubator-nuttx] branch master updated: arch: cxd56xx: Introduce
CONFIG_CXD56_SPI_DMATHRESHOLD
This is an automated email from the ASF dual-hosted git repository.
jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 52286f6 arch: cxd56xx: Introduce CONFIG_CXD56_SPI_DMATHRESHOLD
52286f6 is described below
commit 52286f6dec35728d8e055e20cc623c7bea13a164
Author: Masayuki Ishikawa <ma...@gmail.com>
AuthorDate: Mon Aug 24 16:52:25 2020 +0900
arch: cxd56xx: Introduce CONFIG_CXD56_SPI_DMATHRESHOLD
Summary:
- This commit improves SPI performance.
- For small data, it does not use DMA.
Impact:
- All use cases which use SPI with DMA
Testing:
- Tested with spresense:wifi and spresense:example_lcd
Signed-off-by: Masayuki Ishikawa <Ma...@jp.sony.com>
---
arch/arm/src/cxd56xx/Kconfig | 9 +++++++++
arch/arm/src/cxd56xx/cxd56_spi.c | 8 +++++++-
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/arch/arm/src/cxd56xx/Kconfig b/arch/arm/src/cxd56xx/Kconfig
index 49839eb..62a0882 100644
--- a/arch/arm/src/cxd56xx/Kconfig
+++ b/arch/arm/src/cxd56xx/Kconfig
@@ -356,6 +356,15 @@ config CXD56_SPI_DRIVER
used to perform SPI bus transfers from applications. The intent of
this driver is to support SPI testing.
+config CXD56_SPI_DMATHRESHOLD
+ int "SPI DMA threshold"
+ default 64
+ depends on CXD56_DMAC
+ ---help---
+ When SPI DMA is enabled, small DMA transfers will still be performed
+ by polling logic. But we need a threshold value to determine what
+ is small.
+
config CXD56_SPI0
bool "SPI0"
diff --git a/arch/arm/src/cxd56xx/cxd56_spi.c b/arch/arm/src/cxd56xx/cxd56_spi.c
index 67c5fd5..b0d8ded 100644
--- a/arch/arm/src/cxd56xx/cxd56_spi.c
+++ b/arch/arm/src/cxd56xx/cxd56_spi.c
@@ -855,7 +855,13 @@ static void spi_exchange(FAR struct spi_dev_s *dev, FAR const void *txbuffer,
#ifdef CONFIG_CXD56_DMAC
FAR struct cxd56_spidev_s *priv = (FAR struct cxd56_spidev_s *)dev;
- if (priv->dmaenable)
+#ifdef CONFIG_CXD56_SPI_DMATHRESHOLD
+ size_t dmath = CONFIG_CXD56_SPI_DMATHRESHOLD;
+#else
+ size_t dmath = 0;
+#endif
+
+ if (priv->dmaenable && dmath < nwords)
{
spi_dmaexchange(dev, txbuffer, rxbuffer, nwords);
}