Hi, Arnd: 2018-01-18 18:26 GMT+08:00 Arnd Bergmann <arnd@xxxxxxxx>: > On Mon, Jan 15, 2018 at 6:53 AM, Greentime Hu <green.hu@xxxxxxxxx> wrote: >> From: Greentime Hu <greentime@xxxxxxxxxxxxx> >> >> This patch adds support for the DMA mapping API. It uses dma_map_ops for >> flexibility. >> >> Signed-off-by: Vincent Chen <vincentc@xxxxxxxxxxxxx> >> Signed-off-by: Greentime Hu <greentime@xxxxxxxxxxxxx> > > I'm still unhappy about the way the cache flushes are done here as discussed > before. It's not a show-stopped, but no Ack from me. How about this implementation? static void nds32_dma_sync_single_for_cpu(struct device *dev, dma_addr_t handle, size_t size, enum dma_data_direction dir) { switch (direction) { case DMA_TO_DEVICE: /* writeback only */ break; case DMA_FROM_DEVICE: /* invalidate only */ case DMA_BIDIRECTIONAL: /* writeback and invalidate */ cpu_dma_inval_range(start, end); break; default: BUG(); } } static void nds32_dma_sync_single_for_device(struct device *dev, dma_addr_t handle, size_t size, enum dma_data_direction dir) { switch (direction) { case DMA_FROM_DEVICE: /* invalidate only */ break; case DMA_TO_DEVICE: /* writeback only */ case DMA_BIDIRECTIONAL: /* writeback and invalidate */ cpu_dma_wb_range(start, end); break; default: BUG(); } }