15933f6d2SKuninori Morimoto // SPDX-License-Identifier: GPL-2.0
246bcde94SChristoph Hellwig /*
346bcde94SChristoph Hellwig * Copyright (C) 2004 - 2007 Paul Mundt
446bcde94SChristoph Hellwig */
546bcde94SChristoph Hellwig #include <linux/mm.h>
6*9f4df96bSChristoph Hellwig #include <linux/dma-map-ops.h>
746bcde94SChristoph Hellwig #include <asm/cacheflush.h>
846bcde94SChristoph Hellwig #include <asm/addrspace.h>
946bcde94SChristoph Hellwig
arch_dma_prep_coherent(struct page * page,size_t size)106dfdf673SChristoph Hellwig void arch_dma_prep_coherent(struct page *page, size_t size)
1146bcde94SChristoph Hellwig {
126dfdf673SChristoph Hellwig __flush_purge_region(page_address(page), size);
1346bcde94SChristoph Hellwig }
1446bcde94SChristoph Hellwig
arch_sync_dma_for_device(phys_addr_t paddr,size_t size,enum dma_data_direction dir)1556e35f9cSChristoph Hellwig void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
1656e35f9cSChristoph Hellwig enum dma_data_direction dir)
1746bcde94SChristoph Hellwig {
186fa1d28eSChristoph Hellwig void *addr = sh_cacheop_vaddr(phys_to_virt(paddr));
1946bcde94SChristoph Hellwig
206fa1d28eSChristoph Hellwig switch (dir) {
2146bcde94SChristoph Hellwig case DMA_FROM_DEVICE: /* invalidate only */
2246bcde94SChristoph Hellwig __flush_invalidate_region(addr, size);
2346bcde94SChristoph Hellwig break;
2446bcde94SChristoph Hellwig case DMA_TO_DEVICE: /* writeback only */
2546bcde94SChristoph Hellwig __flush_wback_region(addr, size);
2646bcde94SChristoph Hellwig break;
2746bcde94SChristoph Hellwig case DMA_BIDIRECTIONAL: /* writeback and invalidate */
2846bcde94SChristoph Hellwig __flush_purge_region(addr, size);
2946bcde94SChristoph Hellwig break;
3046bcde94SChristoph Hellwig default:
3146bcde94SChristoph Hellwig BUG();
3246bcde94SChristoph Hellwig }
3346bcde94SChristoph Hellwig }
34