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>
#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.
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,
.dma_supported = swiotlb_dma_supported,
.mapping_error = swiotlb_dma_mapping_error,
};
+EXPORT_SYMBOL(swiotlb_dma_ops);
static int __init atomic_pool_init(void)
{