Lines Matching refs:ippdrv
102 int exynos_drm_ippdrv_register(struct exynos_drm_ippdrv *ippdrv) in exynos_drm_ippdrv_register() argument
105 list_add_tail(&ippdrv->drv_list, &exynos_drm_ippdrv_list); in exynos_drm_ippdrv_register()
111 int exynos_drm_ippdrv_unregister(struct exynos_drm_ippdrv *ippdrv) in exynos_drm_ippdrv_unregister() argument
114 list_del(&ippdrv->drv_list); in exynos_drm_ippdrv_unregister()
149 static int ipp_check_driver(struct exynos_drm_ippdrv *ippdrv, in ipp_check_driver() argument
152 if (ippdrv->dedicated || (!ipp_is_m2m_cmd(property->cmd) && in ipp_check_driver()
153 !pm_runtime_suspended(ippdrv->dev))) in ipp_check_driver()
156 if (ippdrv->check_property && in ipp_check_driver()
157 ippdrv->check_property(ippdrv->dev, property)) in ipp_check_driver()
166 struct exynos_drm_ippdrv *ippdrv; in ipp_find_driver() local
171 ippdrv = ipp_find_obj(&ctx->ipp_idr, &ctx->ipp_lock, ipp_id); in ipp_find_driver()
172 if (!ippdrv) { in ipp_find_driver()
177 ret = ipp_check_driver(ippdrv, property); in ipp_find_driver()
183 return ippdrv; in ipp_find_driver()
185 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) { in ipp_find_driver()
186 ret = ipp_check_driver(ippdrv, property); in ipp_find_driver()
188 return ippdrv; in ipp_find_driver()
199 struct exynos_drm_ippdrv *ippdrv; in ipp_find_drv_by_handle() local
210 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) { in ipp_find_drv_by_handle()
211 DRM_DEBUG_KMS("count[%d]ippdrv[0x%x]\n", count++, (int)ippdrv); in ipp_find_drv_by_handle()
213 mutex_lock(&ippdrv->cmd_lock); in ipp_find_drv_by_handle()
214 list_for_each_entry(c_node, &ippdrv->cmd_list, list) { in ipp_find_drv_by_handle()
216 mutex_unlock(&ippdrv->cmd_lock); in ipp_find_drv_by_handle()
217 return ippdrv; in ipp_find_drv_by_handle()
220 mutex_unlock(&ippdrv->cmd_lock); in ipp_find_drv_by_handle()
233 struct exynos_drm_ippdrv *ippdrv; in exynos_drm_ipp_get_property() local
249 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) in exynos_drm_ipp_get_property()
265 ippdrv = ipp_find_obj(&ctx->ipp_idr, &ctx->ipp_lock, in exynos_drm_ipp_get_property()
267 if (!ippdrv) { in exynos_drm_ipp_get_property()
273 *prop_list = ippdrv->prop_list; in exynos_drm_ipp_get_property()
327 struct exynos_drm_ippdrv *ippdrv; in exynos_drm_ipp_set_property() local
373 ippdrv = ipp_find_driver(ctx, property); in exynos_drm_ipp_set_property()
374 if (IS_ERR(ippdrv)) { in exynos_drm_ipp_set_property()
392 property->prop_id, property->cmd, (int)ippdrv); in exynos_drm_ipp_set_property()
431 mutex_lock(&ippdrv->cmd_lock); in exynos_drm_ipp_set_property()
432 list_add_tail(&c_node->list, &ippdrv->cmd_list); in exynos_drm_ipp_set_property()
433 mutex_unlock(&ippdrv->cmd_lock); in exynos_drm_ipp_set_property()
437 ippdrv->dedicated = true; in exynos_drm_ipp_set_property()
768 static int ipp_set_mem_node(struct exynos_drm_ippdrv *ippdrv, in ipp_set_mem_node() argument
785 ops = ippdrv->ops[m_node->ops_id]; in ipp_set_mem_node()
793 ret = ops->set_addr(ippdrv->dev, &m_node->buf_info, in ipp_set_mem_node()
805 struct exynos_drm_ippdrv *ippdrv, in ipp_handle_cmd_work() argument
811 cmd_work->ippdrv = ippdrv; in ipp_handle_cmd_work()
821 struct exynos_drm_ippdrv *ippdrv; in ipp_queue_buf_with_run() local
826 ippdrv = ipp_find_drv_by_handle(qbuf->prop_id); in ipp_queue_buf_with_run()
827 if (IS_ERR(ippdrv)) { in ipp_queue_buf_with_run()
832 ops = ippdrv->ops[qbuf->ops_id]; in ipp_queue_buf_with_run()
860 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in ipp_queue_buf_with_run()
862 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_queue_buf_with_run()
1026 struct exynos_drm_ippdrv *ippdrv = NULL; in exynos_drm_ipp_cmd_ctrl() local
1046 ippdrv = ipp_find_drv_by_handle(cmd_ctrl->prop_id); in exynos_drm_ipp_cmd_ctrl()
1047 if (IS_ERR(ippdrv)) { in exynos_drm_ipp_cmd_ctrl()
1049 return PTR_ERR(ippdrv); in exynos_drm_ipp_cmd_ctrl()
1059 if (!exynos_drm_ipp_check_valid(ippdrv->dev, cmd_ctrl->ctrl, in exynos_drm_ipp_cmd_ctrl()
1067 if (pm_runtime_suspended(ippdrv->dev)) in exynos_drm_ipp_cmd_ctrl()
1068 pm_runtime_get_sync(ippdrv->dev); in exynos_drm_ipp_cmd_ctrl()
1074 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1079 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1088 ippdrv->dedicated = false; in exynos_drm_ipp_cmd_ctrl()
1089 mutex_lock(&ippdrv->cmd_lock); in exynos_drm_ipp_cmd_ctrl()
1092 if (list_empty(&ippdrv->cmd_list)) in exynos_drm_ipp_cmd_ctrl()
1093 pm_runtime_put_sync(ippdrv->dev); in exynos_drm_ipp_cmd_ctrl()
1094 mutex_unlock(&ippdrv->cmd_lock); in exynos_drm_ipp_cmd_ctrl()
1099 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1113 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1144 static int ipp_set_property(struct exynos_drm_ippdrv *ippdrv, in ipp_set_property() argument
1159 if (ippdrv->reset && in ipp_set_property()
1160 ippdrv->reset(ippdrv->dev)) { in ipp_set_property()
1169 ops = ippdrv->ops[i]; in ipp_set_property()
1177 ret = ops->set_fmt(ippdrv->dev, config->fmt); in ipp_set_property()
1184 ret = ops->set_transf(ippdrv->dev, config->degree, in ipp_set_property()
1192 ret = ops->set_size(ippdrv->dev, swap, &config->pos, in ipp_set_property()
1202 static int ipp_start_property(struct exynos_drm_ippdrv *ippdrv, in ipp_start_property() argument
1213 ippdrv->c_node = c_node; in ipp_start_property()
1223 ret = ipp_set_property(ippdrv, property); in ipp_start_property()
1226 ippdrv->c_node = NULL; in ipp_start_property()
1242 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_start_property()
1254 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_start_property()
1266 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_start_property()
1283 if (ippdrv->start) { in ipp_start_property()
1284 ret = ippdrv->start(ippdrv->dev, property->cmd); in ipp_start_property()
1287 ippdrv->c_node = NULL; in ipp_start_property()
1296 ippdrv->c_node = NULL; in ipp_start_property()
1301 struct exynos_drm_ippdrv *ippdrv, in ipp_stop_property() argument
1310 if (ippdrv->stop) in ipp_stop_property()
1311 ippdrv->stop(ippdrv->dev, property->cmd); in ipp_stop_property()
1337 struct exynos_drm_ippdrv *ippdrv; in ipp_sched_cmd() local
1342 ippdrv = cmd_work->ippdrv; in ipp_sched_cmd()
1343 if (!ippdrv) { in ipp_sched_cmd()
1361 ret = ipp_start_property(ippdrv, c_node); in ipp_sched_cmd()
1385 ret = ipp_stop_property(ippdrv->drm_dev, ippdrv, in ipp_sched_cmd()
1405 static int ipp_send_event(struct exynos_drm_ippdrv *ippdrv, in ipp_send_event() argument
1408 struct drm_device *drm_dev = ippdrv->drm_dev; in ipp_send_event()
1550 struct exynos_drm_ippdrv *ippdrv; in ipp_sched_event() local
1561 ippdrv = event_work->ippdrv; in ipp_sched_event()
1562 if (!ippdrv) { in ipp_sched_event()
1567 c_node = ippdrv->c_node; in ipp_sched_event()
1585 ret = ipp_send_event(ippdrv, c_node, event_work->buf_id); in ipp_sched_event()
1599 struct exynos_drm_ippdrv *ippdrv; in ipp_subdrv_probe() local
1603 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) { in ipp_subdrv_probe()
1604 ippdrv->drm_dev = drm_dev; in ipp_subdrv_probe()
1606 ret = ipp_create_id(&ctx->ipp_idr, &ctx->ipp_lock, ippdrv); in ipp_subdrv_probe()
1611 ippdrv->prop_list.ipp_id = ret; in ipp_subdrv_probe()
1614 count++, (int)ippdrv, ret); in ipp_subdrv_probe()
1617 ippdrv->parent_dev = dev; in ipp_subdrv_probe()
1620 ippdrv->event_workq = ctx->event_workq; in ipp_subdrv_probe()
1621 ippdrv->sched_event = ipp_sched_event; in ipp_subdrv_probe()
1622 INIT_LIST_HEAD(&ippdrv->cmd_list); in ipp_subdrv_probe()
1623 mutex_init(&ippdrv->cmd_lock); in ipp_subdrv_probe()
1625 ret = drm_iommu_attach_device(drm_dev, ippdrv->dev); in ipp_subdrv_probe()
1636 list_for_each_entry_continue_reverse(ippdrv, &exynos_drm_ippdrv_list, in ipp_subdrv_probe()
1638 drm_iommu_detach_device(drm_dev, ippdrv->dev); in ipp_subdrv_probe()
1641 ippdrv->prop_list.ipp_id); in ipp_subdrv_probe()
1649 struct exynos_drm_ippdrv *ippdrv, *t; in ipp_subdrv_remove() local
1653 list_for_each_entry_safe(ippdrv, t, &exynos_drm_ippdrv_list, drv_list) { in ipp_subdrv_remove()
1654 drm_iommu_detach_device(drm_dev, ippdrv->dev); in ipp_subdrv_remove()
1657 ippdrv->prop_list.ipp_id); in ipp_subdrv_remove()
1659 ippdrv->drm_dev = NULL; in ipp_subdrv_remove()
1660 exynos_drm_ippdrv_unregister(ippdrv); in ipp_subdrv_remove()
1679 struct exynos_drm_ippdrv *ippdrv = NULL; in ipp_subdrv_close() local
1684 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) { in ipp_subdrv_close()
1685 mutex_lock(&ippdrv->cmd_lock); in ipp_subdrv_close()
1687 &ippdrv->cmd_list, list) { in ipp_subdrv_close()
1689 count++, (int)ippdrv); in ipp_subdrv_close()
1699 ipp_stop_property(drm_dev, ippdrv, in ipp_subdrv_close()
1704 ippdrv->dedicated = false; in ipp_subdrv_close()
1706 if (list_empty(&ippdrv->cmd_list)) in ipp_subdrv_close()
1707 pm_runtime_put_sync(ippdrv->dev); in ipp_subdrv_close()
1710 mutex_unlock(&ippdrv->cmd_lock); in ipp_subdrv_close()