summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2020-02-14 16:40:27 +0900
committerPeng Fan <peng.fan@nxp.com>2020-02-20 15:09:57 +0800
commit4155ad9aac9474610038b525da9eec8ad9afbc12 (patch)
tree8f1c1a245a342946660d717db55560f68a31e207
parent58d8ace12be763351df37cdcf6fdfceb646fb4dd (diff)
downloadu-boot-4155ad9aac9474610038b525da9eec8ad9afbc12.tar.gz
mmc: sdhci: fix missing cache invalidation after reading by DMA
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@socionext.com>
-rw-r--r--drivers/mmc/sdhci.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 77a88bc043..9b7c5f8f68 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;
}