diff options
author | Lucas Stach <dev@lynxeye.de> | 2015-03-05 22:50:04 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-03-06 07:52:02 +0100 |
commit | 451967e8b936879c77a9e41ea2fc6ac18b91ff68 (patch) | |
tree | c4b4cc30794a3d41c5b1f93d9ff38956025818f1 /drivers | |
parent | 3110eed114ca6064feae027f73b36eb34d0cc0d4 (diff) | |
download | barebox-451967e8b936879c77a9e41ea2fc6ac18b91ff68.tar.gz barebox-451967e8b936879c77a9e41ea2fc6ac18b91ff68.tar.xz |
MCI: dw-mmc: convert to streaming DMA ops
Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.
Signed-off-by: Lucas Stach <dev@lynxeye.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mci/Kconfig | 2 | ||||
-rw-r--r-- | drivers/mci/dw_mmc.c | 24 |
2 files changed, 13 insertions, 13 deletions
diff --git a/drivers/mci/Kconfig b/drivers/mci/Kconfig index dbcc38d097..a5cf2fec04 100644 --- a/drivers/mci/Kconfig +++ b/drivers/mci/Kconfig @@ -36,7 +36,7 @@ comment "--- MCI host drivers ---" config MCI_DW bool "Synopsys DesignWare Memory Card Interface" - depends on ARM + depends on HAS_DMA help This selects support for the Synopsys DesignWare Mobile Storage IP block, this provides host support for SD and MMC interfaces, in both diff --git a/drivers/mci/dw_mmc.c b/drivers/mci/dw_mmc.c index 0ec37b6638..ac940e888a 100644 --- a/drivers/mci/dw_mmc.c +++ b/drivers/mci/dw_mmc.c @@ -29,7 +29,6 @@ #include <linux/clk.h> #include <linux/err.h> #include <asm-generic/errno.h> -#include <asm/mmu.h> #define DWMCI_CTRL 0x000 #define DWMCI_PWREN 0x004 @@ -282,7 +281,6 @@ dwmci_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data) uint64_t start; int ret; unsigned int num_bytes = 0; - const void *writebuf = NULL; start = get_time_ns(); while (1) { @@ -300,12 +298,12 @@ dwmci_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data) if (data) { num_bytes = data->blocks * data->blocksize; - if (data->flags & MMC_DATA_WRITE) { - dma_flush_range((unsigned long)data->src, - (unsigned long)(data->src + data->blocks * 512)); - - writebuf = data->src; - } + if (data->flags & MMC_DATA_WRITE) + dma_sync_single_for_device((unsigned long)data->src, + num_bytes, DMA_TO_DEVICE); + else + dma_sync_single_for_device((unsigned long)data->dest, + num_bytes, DMA_FROM_DEVICE); ret = dwmci_prepare_data(host, data); if (ret) @@ -389,10 +387,12 @@ dwmci_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data) ctrl &= ~(DWMCI_DMA_EN); dwmci_writel(host, DWMCI_CTRL, ctrl); - if (data->flags & MMC_DATA_READ) { - dma_inv_range((unsigned long)data->dest, - (unsigned long)(data->dest + data->blocks * 512)); - } + if (data->flags & MMC_DATA_WRITE) + dma_sync_single_for_cpu((unsigned long)data->src, + num_bytes, DMA_TO_DEVICE); + else + dma_sync_single_for_cpu((unsigned long)data->dest, + num_bytes, DMA_FROM_DEVICE); } udelay(100); |