dma-coherent.c 782 B

123456789101112131415161718192021222324252627282930313233
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2004 - 2007 Paul Mundt
  4. */
  5. #include <linux/mm.h>
  6. #include <linux/dma-map-ops.h>
  7. #include <asm/cacheflush.h>
  8. #include <asm/addrspace.h>
  9. void arch_dma_prep_coherent(struct page *page, size_t size)
  10. {
  11. __flush_purge_region(page_address(page), size);
  12. }
  13. void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
  14. enum dma_data_direction dir)
  15. {
  16. void *addr = sh_cacheop_vaddr(phys_to_virt(paddr));
  17. switch (dir) {
  18. case DMA_FROM_DEVICE: /* invalidate only */
  19. __flush_invalidate_region(addr, size);
  20. break;
  21. case DMA_TO_DEVICE: /* writeback only */
  22. __flush_wback_region(addr, size);
  23. break;
  24. case DMA_BIDIRECTIONAL: /* writeback and invalidate */
  25. __flush_purge_region(addr, size);
  26. break;
  27. default:
  28. BUG();
  29. }
  30. }