drm/tgm: tdm_pp: add size field on tdm_pp_buf_info.
authorJin-young Jeon <jy0.jeon@samsung.com>
Thu, 6 Jul 2017 04:35:27 +0000 (13:35 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Wed, 27 Feb 2019 02:13:05 +0000 (11:13 +0900)
This patch is from product kernel.

Change-Id: I4d2901793835fe708781ad72c0a3fd28d4608d41
Signed-off-by: Jin-young Jeon <jy0.jeon@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/tgm/tdm_pp.c
drivers/gpu/drm/tgm/tdm_pp.h

index 710af83..ace45eb 100644 (file)
@@ -531,6 +531,7 @@ static struct tdm_pp_mem_node
                /* get dma address by handle */
                if (qbuf->handle[i]) {
                        dma_addr_t *addr;
+                       unsigned long size;
 
                        addr = tbm_gem_get_dma_addr(drm_dev, ppdrv->dev,
                                        qbuf->handle[i], c_node->filp);
@@ -540,11 +541,20 @@ static struct tdm_pp_mem_node
                                return ERR_PTR(-EFAULT);
                        }
 
+                       size = tbm_gem_get_size(drm_dev,
+                                               qbuf->handle[i], c_node->filp);
+                       if (!size) {
+                               DRM_ERROR("failed to get size.\n");
+                               pp_put_mem_node(drm_dev, c_node, m_node);
+                               return ERR_PTR(-EINVAL);
+                       }
+
                        buf_info->handles[i] = qbuf->handle[i];
                        buf_info->base[i] = *addr;
-                       DRM_DEBUG_KMS("i[%d]base[0x%x]hdl[%ld]\n", i,
+                       buf_info->size[i] = size;
+                       DRM_DEBUG_KMS("i[%d]base[0x%x]hdl[%ld]sz[%ld]\n", i,
                                      (int)buf_info->base[i],
-                                     buf_info->handles[i]);
+                                     buf_info->handles[i], buf_info->size[i]);
                }
        }
 
@@ -1029,9 +1039,6 @@ int tdm_pp_cmd_ctrl(struct drm_device *drm_dev, void *data,
                return -EINVAL;
        }
 
-       DRM_INFO("%s:ctrl[%d]prop_id[%d]\n", __func__,
-               cmd_ctrl->ctrl, cmd_ctrl->prop_id);
-
        ppdrv = pp_find_drv_by_handle(cmd_ctrl->prop_id);
        if (IS_ERR(ppdrv)) {
                DRM_ERROR("failed to get pp driver.\n");
@@ -1055,6 +1062,9 @@ int tdm_pp_cmd_ctrl(struct drm_device *drm_dev, void *data,
 
        switch (cmd_ctrl->ctrl) {
        case PP_CTRL_PLAY:
+               DRM_INFO("%s:PLAY:prop_id[%d]\n", __func__,
+                       cmd_ctrl->prop_id);
+
                if (pm_runtime_suspended(ppdrv->dev))
                        pm_runtime_get_sync(ppdrv->dev);
 
@@ -1078,6 +1088,8 @@ int tdm_pp_cmd_ctrl(struct drm_device *drm_dev, void *data,
                }
                break;
        case PP_CTRL_STOP:
+               DRM_INFO("%s:STOP:prop_id[%d]\n", __func__,
+                       cmd_ctrl->prop_id);
                if (property->type & PP_EVENT_DRIVEN) {
                        cmd_work = c_node->stop_work;
                        cmd_work->ctrl = cmd_ctrl->ctrl;
index 2be88ae..5b1777f 100644 (file)
@@ -82,10 +82,12 @@ struct tdm_pp_cmd_node {
  *
  * @handles: Y, Cb, Cr each gem object handle.
  * @base: Y, Cb, Cr each planar address.
+ * @size: Y, Cb, Cr each planar size.
  */
 struct tdm_pp_buf_info {
        unsigned long   handles[TDM_PLANAR_MAX];
        dma_addr_t      base[TDM_PLANAR_MAX];
+       unsigned long   size[TDM_PLANAR_MAX];
 };
 
 /*