linux/arch/microblaze/kernel/dma.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (C) 2009-2010 PetaLogix
   4 * Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corporation
   5 *
   6 * Provide default implementations of the DMA mapping callbacks for
   7 * directly mapped busses.
   8 */
   9
  10#include <linux/device.h>
  11#include <linux/dma-map-ops.h>
  12#include <linux/gfp.h>
  13#include <linux/export.h>
  14#include <linux/bug.h>
  15#include <asm/cacheflush.h>
  16
  17static void __dma_sync(phys_addr_t paddr, size_t size,
  18                enum dma_data_direction direction)
  19{
  20        switch (direction) {
  21        case DMA_TO_DEVICE:
  22        case DMA_BIDIRECTIONAL:
  23                flush_dcache_range(paddr, paddr + size);
  24                break;
  25        case DMA_FROM_DEVICE:
  26                invalidate_dcache_range(paddr, paddr + size);
  27                break;
  28        default:
  29                BUG();
  30        }
  31}
  32
  33void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
  34                enum dma_data_direction dir)
  35{
  36        __dma_sync(paddr, size, dir);
  37}
  38
  39void arch_sync_dma_for_cpu(phys_addr_t paddr, size_t size,
  40                enum dma_data_direction dir)
  41{
  42        __dma_sync(paddr, size, dir);
  43}
  44