|
@@ -910,6 +910,7 @@ atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
|
|
|
enum dma_data_direction direction;
|
|
|
enum dma_transfer_direction slave_dirn;
|
|
|
unsigned int sglen;
|
|
|
+ u32 maxburst;
|
|
|
u32 iflags;
|
|
|
|
|
|
data->error = -EINPROGRESS;
|
|
@@ -943,17 +944,18 @@ atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
|
|
|
if (!chan)
|
|
|
return -ENODEV;
|
|
|
|
|
|
- if (host->caps.has_dma)
|
|
|
- atmci_writel(host, ATMCI_DMA, ATMCI_DMA_CHKSIZE(3) | ATMCI_DMAEN);
|
|
|
-
|
|
|
if (data->flags & MMC_DATA_READ) {
|
|
|
direction = DMA_FROM_DEVICE;
|
|
|
host->dma_conf.direction = slave_dirn = DMA_DEV_TO_MEM;
|
|
|
+ maxburst = atmci_convert_chksize(host->dma_conf.src_maxburst);
|
|
|
} else {
|
|
|
direction = DMA_TO_DEVICE;
|
|
|
host->dma_conf.direction = slave_dirn = DMA_MEM_TO_DEV;
|
|
|
+ maxburst = atmci_convert_chksize(host->dma_conf.dst_maxburst);
|
|
|
}
|
|
|
|
|
|
+ atmci_writel(host, ATMCI_DMA, ATMCI_DMA_CHKSIZE(maxburst) | ATMCI_DMAEN);
|
|
|
+
|
|
|
sglen = dma_map_sg(chan->device->dev, data->sg,
|
|
|
data->sg_len, direction);
|
|
|
|