/* 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);
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]);
}
}
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");
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);
}
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;
*
* @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];
};
/*