ion: ion_sync_for_device use swiotlb_dma_ops not dummy_dma_ops [1/1]
authorbaocheng sun <baocheng.sun@amlogic.com>
Thu, 26 Sep 2019 07:41:42 +0000 (03:41 -0400)
committerJianxin Pan <jianxin.pan@amlogic.com>
Fri, 27 Sep 2019 11:56:53 +0000 (04:56 -0700)
PD#OTT-5276

Problem:
CTS EncodeDecodeTest failed. Ion sync ioctrl was
forwarded to a dummy implementation. So cached dma buffer
syncing between device and driver was inconsistent occasionally.

Solution:
Changed the dummy_dma_ops to swiotbl_dma_ops when ion_sync_for_device

Verify:
franklin, hertz

Change-Id: I16863bba6c3fe16b9c3b2b410ade6e45c9e74826
Signed-off-by: baocheng sun <baocheng.sun@amlogic.com>
drivers/staging/android/ion/ion.c

index e19f66e..5fcb74e 100644 (file)
@@ -1138,6 +1138,9 @@ int ion_sync_for_device(struct ion_client *client, int fd)
 {
        struct dma_buf *dmabuf;
        struct ion_buffer *buffer;
+#ifdef CONFIG_AMLOGIC_MODIFY
+       struct miscdevice *mdev;
+#endif
 
        dmabuf = dma_buf_get(fd);
        if (IS_ERR(dmabuf))
@@ -1152,8 +1155,14 @@ int ion_sync_for_device(struct ion_client *client, int fd)
        }
        buffer = dmabuf->priv;
 
+#ifdef CONFIG_AMLOGIC_MODIFY
+       mdev = &client->dev->dev;
+       dma_sync_sg_for_device(mdev->this_device, buffer->sg_table->sgl,
+                              buffer->sg_table->nents, DMA_BIDIRECTIONAL);
+#else
        dma_sync_sg_for_device(NULL, buffer->sg_table->sgl,
                               buffer->sg_table->nents, DMA_BIDIRECTIONAL);
+#endif
        dma_buf_put(dmabuf);
        return 0;
 }