dma_unmap_single() takes the dma address, not virtual address.
Change-Id: I90d611e4236b4d9089236019bb319cc4f7685a4f
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
return (unsigned long)vaddr;
}
-static inline void dma_unmap_single(volatile void *vaddr, size_t len,
- unsigned long paddr)
+static inline void dma_unmap_single(dma_addr_t addr, size_t len,
+ enum dma_data_direction dir)
{
+ len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+ if (dir != DMA_TO_DEVICE)
+ invalidate_dcache_range(addr, addr + len);
}
#endif /* __ASM_ARM_DMA_MAPPING_H */
return (unsigned long)vaddr;
}
-static inline void dma_unmap_single(volatile void *vaddr, size_t len,
- unsigned long paddr)
+static inline void dma_unmap_single(dma_addr_t addr, size_t len,
+ enum dma_data_direction dir)
{
+ len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+ if (dir != DMA_TO_DEVICE)
+ invalidate_dcache_range(addr, addr + len);
}
#endif /* __ASM_NDS_DMA_MAPPING_H */
return (unsigned long)vaddr;
}
-static inline void dma_unmap_single(volatile void *vaddr, size_t len,
- unsigned long paddr)
+static inline void dma_unmap_single(dma_addr_t addr, size_t len,
+ enum dma_data_direction dir)
{
+ len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+ if (dir != DMA_TO_DEVICE)
+ invalidate_dcache_range(addr, addr + len);
}
#endif /* __ASM_RISCV_DMA_MAPPING_H */
return (unsigned long)vaddr;
}
-static inline void dma_unmap_single(volatile void *vaddr, size_t len,
- unsigned long paddr)
+static inline void dma_unmap_single(dma_addr_t addr, size_t len,
+ enum dma_data_direction dir)
{
+ len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+ if (dir != DMA_TO_DEVICE)
+ invalidate_dcache_range(addr, addr + len);
}
#endif /* __ASM_X86_DMA_MAPPING_H */
if (poll_flag == TMIO_SD_DMA_INFO1_END_RD)
udelay(1);
- __dma_unmap_single(dma_addr, len, dir);
+ dma_unmap_single(dma_addr, len, dir);
return ret;
}
iowrite32(0, denali->reg + DMA_ENABLE);
- dma_unmap_single(denali->dev, dma_addr, size, dir);
+ dma_unmap_single(dma_addr, size, dir);
if (irq_status & INTR__ERASED_PAGE)
memset(buf, 0xff, size);
udelay(1);
}
- dma_unmap_single(packet, length, paddr);
+ dma_unmap_single(paddr, length, DMA_TO_DEVICE);
if (i <= MACB_TX_TIMEOUT) {
if (ctrl & MACB_BIT(TX_UNDERRUN))
return 0;
err1:
- dma_unmap_single((void *)(uintptr_t)dwc->scratch_addr, dwc->nr_scratch *
- DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
+ dma_unmap_single(scratch_addr, dwc->nr_scratch * DWC3_SCRATCHBUF_SIZE,
+ DMA_BIDIRECTIONAL);
err0:
return ret;
if (!dwc->nr_scratch)
return;
- dma_unmap_single((void *)(uintptr_t)dwc->scratch_addr, dwc->nr_scratch *
+ dma_unmap_single(dwc->scratch_addr, dwc->nr_scratch *
DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
kfree(dwc->scratchbuf);
}
if (req->length == 0)
return;
- dma_unmap_single((void *)(uintptr_t)req->dma, req->length,
+ dma_unmap_single(req->dma, req->length,
is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
}
EXPORT_SYMBOL_GPL(usb_gadget_unmap_request);