diff mbox series

[v3,11/11] mmc: sdhci: fix missing cache invalidation after reading by DMA

Message ID 20200214074027.19824-12-yamada.masahiro@socionext.com
State Accepted
Commit 4155ad9aac9474610038b525da9eec8ad9afbc12
Headers show
Series mmc: sdhci: code clean-up and fix cache coherency problem | expand

Commit Message

Masahiro Yamada Feb. 14, 2020, 7:40 a.m. UTC
This driver currently performs cache operation before the DMA start,
but does nothing after the DMA completion.

When reading data by DMA, the cache invalidation is needed also after
finishing the DMA transfer. Otherwise, the CPU might read data from
the cache instead of from the main memory when speculative memory read
or memory prefetch occurs.

Instead of calling the cache operation directly, this commit adds
dma_unmap_single(), which performs cache invalidation internally,
but drivers do not need which operation is being run.

Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com>
---

Changes in v3: None
Changes in v2: None

 drivers/mmc/sdhci.c | 4 ++++
 1 file changed, 4 insertions(+)
diff mbox series

Patch

diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 77a88bc043e4..9b7c5f8f684f 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -215,6 +215,10 @@  static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data)
 			return -ETIMEDOUT;
 		}
 	} while (!(stat & SDHCI_INT_DATA_END));
+
+	dma_unmap_single(host->start_addr, data->blocks * data->blocksize,
+			 mmc_get_dma_dir(data));
+
 	return 0;
 }