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>
This commit is contained in:
parent
3110eed114
commit
451967e8b9
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue