Lines Matching refs:ippdrv
129 int exynos_drm_ippdrv_register(struct exynos_drm_ippdrv *ippdrv) in exynos_drm_ippdrv_register() argument
132 list_add_tail(&ippdrv->drv_list, &exynos_drm_ippdrv_list); in exynos_drm_ippdrv_register()
138 int exynos_drm_ippdrv_unregister(struct exynos_drm_ippdrv *ippdrv) in exynos_drm_ippdrv_unregister() argument
141 list_del(&ippdrv->drv_list); in exynos_drm_ippdrv_unregister()
176 static int ipp_check_driver(struct exynos_drm_ippdrv *ippdrv, in ipp_check_driver() argument
179 if (ippdrv->dedicated || (!ipp_is_m2m_cmd(property->cmd) && in ipp_check_driver()
180 !pm_runtime_suspended(ippdrv->dev))) in ipp_check_driver()
183 if (ippdrv->check_property && in ipp_check_driver()
184 ippdrv->check_property(ippdrv->dev, property)) in ipp_check_driver()
193 struct exynos_drm_ippdrv *ippdrv; in ipp_find_driver() local
198 ippdrv = ipp_find_obj(&ctx->ipp_idr, &ctx->ipp_lock, ipp_id); in ipp_find_driver()
199 if (!ippdrv) { in ipp_find_driver()
204 ret = ipp_check_driver(ippdrv, property); in ipp_find_driver()
210 return ippdrv; in ipp_find_driver()
212 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) { in ipp_find_driver()
213 ret = ipp_check_driver(ippdrv, property); in ipp_find_driver()
215 return ippdrv; in ipp_find_driver()
226 struct exynos_drm_ippdrv *ippdrv; in ipp_find_drv_by_handle() local
237 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) { in ipp_find_drv_by_handle()
238 DRM_DEBUG_KMS("count[%d]ippdrv[0x%x]\n", count++, (int)ippdrv); in ipp_find_drv_by_handle()
240 mutex_lock(&ippdrv->cmd_lock); in ipp_find_drv_by_handle()
241 list_for_each_entry(c_node, &ippdrv->cmd_list, list) { in ipp_find_drv_by_handle()
243 mutex_unlock(&ippdrv->cmd_lock); in ipp_find_drv_by_handle()
244 return ippdrv; in ipp_find_drv_by_handle()
247 mutex_unlock(&ippdrv->cmd_lock); in ipp_find_drv_by_handle()
260 struct exynos_drm_ippdrv *ippdrv; in exynos_drm_ipp_get_property() local
276 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) in exynos_drm_ipp_get_property()
292 ippdrv = ipp_find_obj(&ctx->ipp_idr, &ctx->ipp_lock, in exynos_drm_ipp_get_property()
294 if (!ippdrv) { in exynos_drm_ipp_get_property()
300 *prop_list = ippdrv->prop_list; in exynos_drm_ipp_get_property()
354 struct exynos_drm_ippdrv *ippdrv; in exynos_drm_ipp_set_property() local
400 ippdrv = ipp_find_driver(ctx, property); in exynos_drm_ipp_set_property()
401 if (IS_ERR(ippdrv)) { in exynos_drm_ipp_set_property()
419 property->prop_id, property->cmd, (int)ippdrv); in exynos_drm_ipp_set_property()
458 mutex_lock(&ippdrv->cmd_lock); in exynos_drm_ipp_set_property()
459 list_add_tail(&c_node->list, &ippdrv->cmd_list); in exynos_drm_ipp_set_property()
460 mutex_unlock(&ippdrv->cmd_lock); in exynos_drm_ipp_set_property()
464 ippdrv->dedicated = true; in exynos_drm_ipp_set_property()
771 static int ipp_set_mem_node(struct exynos_drm_ippdrv *ippdrv, in ipp_set_mem_node() argument
788 ops = ippdrv->ops[m_node->ops_id]; in ipp_set_mem_node()
796 ret = ops->set_addr(ippdrv->dev, &m_node->buf_info, in ipp_set_mem_node()
808 struct exynos_drm_ippdrv *ippdrv, in ipp_handle_cmd_work() argument
814 cmd_work->ippdrv = ippdrv; in ipp_handle_cmd_work()
824 struct exynos_drm_ippdrv *ippdrv; in ipp_queue_buf_with_run() local
829 ippdrv = ipp_find_drv_by_handle(qbuf->prop_id); in ipp_queue_buf_with_run()
830 if (IS_ERR(ippdrv)) { in ipp_queue_buf_with_run()
835 ops = ippdrv->ops[qbuf->ops_id]; in ipp_queue_buf_with_run()
863 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in ipp_queue_buf_with_run()
865 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_queue_buf_with_run()
1029 struct exynos_drm_ippdrv *ippdrv = NULL; in exynos_drm_ipp_cmd_ctrl() local
1049 ippdrv = ipp_find_drv_by_handle(cmd_ctrl->prop_id); in exynos_drm_ipp_cmd_ctrl()
1050 if (IS_ERR(ippdrv)) { in exynos_drm_ipp_cmd_ctrl()
1052 return PTR_ERR(ippdrv); in exynos_drm_ipp_cmd_ctrl()
1062 if (!exynos_drm_ipp_check_valid(ippdrv->dev, cmd_ctrl->ctrl, in exynos_drm_ipp_cmd_ctrl()
1070 if (pm_runtime_suspended(ippdrv->dev)) in exynos_drm_ipp_cmd_ctrl()
1071 pm_runtime_get_sync(ippdrv->dev); in exynos_drm_ipp_cmd_ctrl()
1077 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1082 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1091 ippdrv->dedicated = false; in exynos_drm_ipp_cmd_ctrl()
1092 mutex_lock(&ippdrv->cmd_lock); in exynos_drm_ipp_cmd_ctrl()
1095 if (list_empty(&ippdrv->cmd_list)) in exynos_drm_ipp_cmd_ctrl()
1096 pm_runtime_put_sync(ippdrv->dev); in exynos_drm_ipp_cmd_ctrl()
1097 mutex_unlock(&ippdrv->cmd_lock); in exynos_drm_ipp_cmd_ctrl()
1102 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1116 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1147 static int ipp_set_property(struct exynos_drm_ippdrv *ippdrv, in ipp_set_property() argument
1162 if (ippdrv->reset && in ipp_set_property()
1163 ippdrv->reset(ippdrv->dev)) { in ipp_set_property()
1172 ops = ippdrv->ops[i]; in ipp_set_property()
1180 ret = ops->set_fmt(ippdrv->dev, config->fmt); in ipp_set_property()
1187 ret = ops->set_transf(ippdrv->dev, config->degree, in ipp_set_property()
1195 ret = ops->set_size(ippdrv->dev, swap, &config->pos, in ipp_set_property()
1205 static int ipp_start_property(struct exynos_drm_ippdrv *ippdrv, in ipp_start_property() argument
1216 ippdrv->c_node = c_node; in ipp_start_property()
1226 ret = ipp_set_property(ippdrv, property); in ipp_start_property()
1229 ippdrv->c_node = NULL; in ipp_start_property()
1245 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_start_property()
1257 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_start_property()
1269 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_start_property()
1286 if (ippdrv->start) { in ipp_start_property()
1287 ret = ippdrv->start(ippdrv->dev, property->cmd); in ipp_start_property()
1290 ippdrv->c_node = NULL; in ipp_start_property()
1299 ippdrv->c_node = NULL; in ipp_start_property()
1304 struct exynos_drm_ippdrv *ippdrv, in ipp_stop_property() argument
1313 if (ippdrv->stop) in ipp_stop_property()
1314 ippdrv->stop(ippdrv->dev, property->cmd); in ipp_stop_property()
1340 struct exynos_drm_ippdrv *ippdrv; in ipp_sched_cmd() local
1345 ippdrv = cmd_work->ippdrv; in ipp_sched_cmd()
1346 if (!ippdrv) { in ipp_sched_cmd()
1364 ret = ipp_start_property(ippdrv, c_node); in ipp_sched_cmd()
1388 ret = ipp_stop_property(ippdrv->drm_dev, ippdrv, in ipp_sched_cmd()
1408 static int ipp_send_event(struct exynos_drm_ippdrv *ippdrv, in ipp_send_event() argument
1411 struct drm_device *drm_dev = ippdrv->drm_dev; in ipp_send_event()
1553 struct exynos_drm_ippdrv *ippdrv; in ipp_sched_event() local
1564 ippdrv = event_work->ippdrv; in ipp_sched_event()
1565 if (!ippdrv) { in ipp_sched_event()
1570 c_node = ippdrv->c_node; in ipp_sched_event()
1588 ret = ipp_send_event(ippdrv, c_node, event_work->buf_id); in ipp_sched_event()
1602 struct exynos_drm_ippdrv *ippdrv; in ipp_subdrv_probe() local
1606 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) { in ipp_subdrv_probe()
1607 ippdrv->drm_dev = drm_dev; in ipp_subdrv_probe()
1609 ret = ipp_create_id(&ctx->ipp_idr, &ctx->ipp_lock, ippdrv); in ipp_subdrv_probe()
1614 ippdrv->prop_list.ipp_id = ret; in ipp_subdrv_probe()
1617 count++, (int)ippdrv, ret); in ipp_subdrv_probe()
1620 ippdrv->parent_dev = dev; in ipp_subdrv_probe()
1623 ippdrv->event_workq = ctx->event_workq; in ipp_subdrv_probe()
1624 ippdrv->sched_event = ipp_sched_event; in ipp_subdrv_probe()
1625 INIT_LIST_HEAD(&ippdrv->cmd_list); in ipp_subdrv_probe()
1626 mutex_init(&ippdrv->cmd_lock); in ipp_subdrv_probe()
1629 ret = drm_iommu_attach_device(drm_dev, ippdrv->dev); in ipp_subdrv_probe()
1641 list_for_each_entry_continue_reverse(ippdrv, &exynos_drm_ippdrv_list, in ipp_subdrv_probe()
1644 drm_iommu_detach_device(drm_dev, ippdrv->dev); in ipp_subdrv_probe()
1647 ippdrv->prop_list.ipp_id); in ipp_subdrv_probe()
1655 struct exynos_drm_ippdrv *ippdrv, *t; in ipp_subdrv_remove() local
1659 list_for_each_entry_safe(ippdrv, t, &exynos_drm_ippdrv_list, drv_list) { in ipp_subdrv_remove()
1661 drm_iommu_detach_device(drm_dev, ippdrv->dev); in ipp_subdrv_remove()
1664 ippdrv->prop_list.ipp_id); in ipp_subdrv_remove()
1666 ippdrv->drm_dev = NULL; in ipp_subdrv_remove()
1667 exynos_drm_ippdrv_unregister(ippdrv); in ipp_subdrv_remove()
1686 struct exynos_drm_ippdrv *ippdrv = NULL; in ipp_subdrv_close() local
1691 list_for_each_entry(ippdrv, &exynos_drm_ippdrv_list, drv_list) { in ipp_subdrv_close()
1692 mutex_lock(&ippdrv->cmd_lock); in ipp_subdrv_close()
1694 &ippdrv->cmd_list, list) { in ipp_subdrv_close()
1696 count++, (int)ippdrv); in ipp_subdrv_close()
1706 ipp_stop_property(drm_dev, ippdrv, in ipp_subdrv_close()
1711 ippdrv->dedicated = false; in ipp_subdrv_close()
1713 if (list_empty(&ippdrv->cmd_list)) in ipp_subdrv_close()
1714 pm_runtime_put_sync(ippdrv->dev); in ipp_subdrv_close()
1717 mutex_unlock(&ippdrv->cmd_lock); in ipp_subdrv_close()