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 2021/12/23 02:44:16 UTC
[incubator-nuttx] branch master updated: stm32f7:sdmmc invalidate before DMA to avoid eviction overwrite
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
The following commit(s) were added to refs/heads/master by this push:
new 74e692b stm32f7:sdmmc invalidate before DMA to avoid eviction overwrite
74e692b is described below
commit 74e692b3c12836a8297e09b9f22c91b7469fe0ac
Author: David Sidrane <Da...@NscDg.com>
AuthorDate: Wed Dec 15 11:25:15 2021 -0800
stm32f7:sdmmc invalidate before DMA to avoid eviction overwrite
For FAT the same buffer is used for read and writes, there
is a possibility a cache line is dirty. But the fs is
not dirty and will not write the sector to disk. This can
be seen https://github.com/PX4/NuttX/pull/175
When the system is busy that cache line can be evicted after the
RX DMA has completed and overwrite the data in memory. The solution
is to invalidate before the DMA to prevent an evection causing an
overwite, and after the DMA it to insure coherency.
---
arch/arm/src/stm32f7/stm32_sdmmc.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/arm/src/stm32f7/stm32_sdmmc.c b/arch/arm/src/stm32f7/stm32_sdmmc.c
index 0d7968c..0350c17 100644
--- a/arch/arm/src/stm32f7/stm32_sdmmc.c
+++ b/arch/arm/src/stm32f7/stm32_sdmmc.c
@@ -3115,6 +3115,8 @@ static int stm32_dmarecvsetup(FAR struct sdio_dev_s *dev,
{
priv->rxbuffer = buffer;
priv->rxend = buffer + buflen;
+ up_invalidate_dcache((uintptr_t)priv->rxbuffer,
+ (uintptr_t)priv->rxend);
}
/* Start the DMA */