arm64/dma-mapping: __generic_dma_ops always call swiotlb_dma_ops

Arm64 dma-mapping will return dummy_dma_ops if none call arch_setup_dma_ops
at device creation time.

For ion APIS, ion_pages_sync_for_device and ion_pages_sync_for_cpu always
pass "NULL" as device, then dma-mapping return dummy_dma_ops, which cause
ion pages fail to sync.

This patch fixs __generic_dma_ops to return swiotlb_dma_ops instead of
dummy_dma_ops.

Change-Id: Ic00db5d4547bcd5f74e5fd155133fde408a05cdb
Signed-off-by: Jianqun Xu <jay.xu@rock-chips.com>
This commit is contained in:
Jianqun Xu
2016-07-26 17:21:25 +08:00
committed by Gerrit Code Review
parent 9774b15bc3
commit 3e89f7de9a
2 changed files with 9 additions and 1 deletions

View File

@@ -27,12 +27,19 @@
#define DMA_ERROR_CODE (~(dma_addr_t)0)
extern struct dma_map_ops dummy_dma_ops;
extern struct dma_map_ops swiotlb_dma_ops;
static inline struct dma_map_ops *__generic_dma_ops(struct device *dev)
{
if (dev && dev->archdata.dma_ops)
return dev->archdata.dma_ops;
/*
* For ion APIs, they have no devices, we force it to call swiotlb_dma_ops
* to sync device.
* Revert me if ion has fixed this issue.
*/
return &swiotlb_dma_ops;
/*
* We expect no ISA devices, and all other DMA masters are expected to
* have someone call arch_setup_dma_ops at device creation time.

View File

@@ -334,7 +334,7 @@ static int __swiotlb_get_sgtable(struct device *dev, struct sg_table *sgt,
return ret;
}
static struct dma_map_ops swiotlb_dma_ops = {
struct dma_map_ops swiotlb_dma_ops = {
.alloc = __dma_alloc,
.free = __dma_free,
.mmap = __swiotlb_mmap,
@@ -350,6 +350,7 @@ static struct dma_map_ops swiotlb_dma_ops = {
.dma_supported = swiotlb_dma_supported,
.mapping_error = swiotlb_dma_mapping_error,
};
EXPORT_SYMBOL(swiotlb_dma_ops);
static int __init atomic_pool_init(void)
{