drm/mediatek: use correct device to import PRIME buffers [Linux 4.14.143]

This Linux kernel change "drm/mediatek: use correct device to import PRIME buffers" is included in the Linux 4.14.143 release. This change is authored by Alexandre Courbot <acourbot [at] chromium.org> on Mon Jul 29 14:33:34 2019 +0900. The commit for this change in Linux stable tree is 5655a71 (patch) which is from upstream commit 4c6f319. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream 4c6f319.

drm/mediatek: use correct device to import PRIME buffers

[ Upstream commit 4c6f3196e6ea111c456c6086dc3f57d4706b0b2d ]

PRIME buffers should be imported using the DMA device. To this end, use
a custom import function that mimics drm_gem_prime_import_dev(), but
passes the correct device.

Fixes: 119f5173628aa ("drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.")
Signed-off-by: Alexandre Courbot <acourbot@chromium.org>
Signed-off-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>

There are 14 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/gpu/drm/mediatek/mtk_drm_drv.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index cada1c7..4a89cd2 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -287,6 +287,18 @@ static void mtk_drm_kms_deinit(struct drm_device *drm)
    .compat_ioctl = drm_compat_ioctl,
 };

+/*
+ * We need to override this because the device used to import the memory is
+ * not dev->dev, as drm_gem_prime_import() expects.
+ */
+struct drm_gem_object *mtk_drm_gem_prime_import(struct drm_device *dev,
+                       struct dma_buf *dma_buf)
+{
+   struct mtk_drm_private *private = dev->dev_private;
+
+   return drm_gem_prime_import_dev(dev, dma_buf, private->dma_dev);
+}
+
 static struct drm_driver mtk_drm_driver = {
    .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
               DRIVER_ATOMIC,
@@ -298,7 +310,7 @@ static void mtk_drm_kms_deinit(struct drm_device *drm)
    .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
    .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
    .gem_prime_export = drm_gem_prime_export,
-   .gem_prime_import = drm_gem_prime_import,
+   .gem_prime_import = mtk_drm_gem_prime_import,
    .gem_prime_get_sg_table = mtk_gem_prime_get_sg_table,
    .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
    .gem_prime_mmap = mtk_drm_gem_mmap_buf,

Leave a Reply

Your email address will not be published. Required fields are marked *