|
@@ -804,11 +804,14 @@ dma_async_memcpy_buf_to_buf(struct dma_chan *chan, void *dest,
|
|
dma_addr_t dma_dest, dma_src;
|
|
dma_addr_t dma_dest, dma_src;
|
|
dma_cookie_t cookie;
|
|
dma_cookie_t cookie;
|
|
int cpu;
|
|
int cpu;
|
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
dma_src = dma_map_single(dev->dev, src, len, DMA_TO_DEVICE);
|
|
dma_src = dma_map_single(dev->dev, src, len, DMA_TO_DEVICE);
|
|
dma_dest = dma_map_single(dev->dev, dest, len, DMA_FROM_DEVICE);
|
|
dma_dest = dma_map_single(dev->dev, dest, len, DMA_FROM_DEVICE);
|
|
- tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len,
|
|
|
|
- DMA_CTRL_ACK);
|
|
|
|
|
|
+ flags = DMA_CTRL_ACK |
|
|
|
|
+ DMA_COMPL_SRC_UNMAP_SINGLE |
|
|
|
|
+ DMA_COMPL_DEST_UNMAP_SINGLE;
|
|
|
|
+ tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len, flags);
|
|
|
|
|
|
if (!tx) {
|
|
if (!tx) {
|
|
dma_unmap_single(dev->dev, dma_src, len, DMA_TO_DEVICE);
|
|
dma_unmap_single(dev->dev, dma_src, len, DMA_TO_DEVICE);
|
|
@@ -850,11 +853,12 @@ dma_async_memcpy_buf_to_pg(struct dma_chan *chan, struct page *page,
|
|
dma_addr_t dma_dest, dma_src;
|
|
dma_addr_t dma_dest, dma_src;
|
|
dma_cookie_t cookie;
|
|
dma_cookie_t cookie;
|
|
int cpu;
|
|
int cpu;
|
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
dma_src = dma_map_single(dev->dev, kdata, len, DMA_TO_DEVICE);
|
|
dma_src = dma_map_single(dev->dev, kdata, len, DMA_TO_DEVICE);
|
|
dma_dest = dma_map_page(dev->dev, page, offset, len, DMA_FROM_DEVICE);
|
|
dma_dest = dma_map_page(dev->dev, page, offset, len, DMA_FROM_DEVICE);
|
|
- tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len,
|
|
|
|
- DMA_CTRL_ACK);
|
|
|
|
|
|
+ flags = DMA_CTRL_ACK | DMA_COMPL_SRC_UNMAP_SINGLE;
|
|
|
|
+ tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len, flags);
|
|
|
|
|
|
if (!tx) {
|
|
if (!tx) {
|
|
dma_unmap_single(dev->dev, dma_src, len, DMA_TO_DEVICE);
|
|
dma_unmap_single(dev->dev, dma_src, len, DMA_TO_DEVICE);
|
|
@@ -898,12 +902,13 @@ dma_async_memcpy_pg_to_pg(struct dma_chan *chan, struct page *dest_pg,
|
|
dma_addr_t dma_dest, dma_src;
|
|
dma_addr_t dma_dest, dma_src;
|
|
dma_cookie_t cookie;
|
|
dma_cookie_t cookie;
|
|
int cpu;
|
|
int cpu;
|
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
dma_src = dma_map_page(dev->dev, src_pg, src_off, len, DMA_TO_DEVICE);
|
|
dma_src = dma_map_page(dev->dev, src_pg, src_off, len, DMA_TO_DEVICE);
|
|
dma_dest = dma_map_page(dev->dev, dest_pg, dest_off, len,
|
|
dma_dest = dma_map_page(dev->dev, dest_pg, dest_off, len,
|
|
DMA_FROM_DEVICE);
|
|
DMA_FROM_DEVICE);
|
|
- tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len,
|
|
|
|
- DMA_CTRL_ACK);
|
|
|
|
|
|
+ flags = DMA_CTRL_ACK;
|
|
|
|
+ tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len, flags);
|
|
|
|
|
|
if (!tx) {
|
|
if (!tx) {
|
|
dma_unmap_page(dev->dev, dma_src, len, DMA_TO_DEVICE);
|
|
dma_unmap_page(dev->dev, dma_src, len, DMA_TO_DEVICE);
|