Lines Matching +full:pk +full:- +full:pk
35 * exynos_drm_ipp_register - Register a new picture processor hardware module
59 spin_lock_init(&ipp->lock); in exynos_drm_ipp_register()
60 INIT_LIST_HEAD(&ipp->todo_list); in exynos_drm_ipp_register()
61 init_waitqueue_head(&ipp->done_wq); in exynos_drm_ipp_register()
62 ipp->dev = dev; in exynos_drm_ipp_register()
63 ipp->funcs = funcs; in exynos_drm_ipp_register()
64 ipp->capabilities = caps; in exynos_drm_ipp_register()
65 ipp->name = name; in exynos_drm_ipp_register()
66 ipp->formats = formats; in exynos_drm_ipp_register()
67 ipp->num_formats = num_formats; in exynos_drm_ipp_register()
70 list_add_tail(&ipp->head, &ipp_list); in exynos_drm_ipp_register()
71 ipp->id = num_ipp++; in exynos_drm_ipp_register()
73 DRM_DEV_DEBUG_DRIVER(dev, "Registered ipp %d\n", ipp->id); in exynos_drm_ipp_register()
79 * exynos_drm_ipp_unregister - Unregister the picture processor module
86 WARN_ON(ipp->task); in exynos_drm_ipp_unregister()
87 WARN_ON(!list_empty(&ipp->todo_list)); in exynos_drm_ipp_unregister()
88 list_del(&ipp->head); in exynos_drm_ipp_unregister()
92 * exynos_drm_ipp_get_res_ioctl - enumerate all ipp modules
110 (unsigned long)resp->ipp_id_ptr; in exynos_drm_ipp_get_res_ioctl()
117 if (count && resp->count_ipps >= count) { in exynos_drm_ipp_get_res_ioctl()
119 if (put_user(ipp->id, ipp_ptr + copied)) in exynos_drm_ipp_get_res_ioctl()
120 return -EFAULT; in exynos_drm_ipp_get_res_ioctl()
124 resp->count_ipps = count; in exynos_drm_ipp_get_res_ioctl()
134 if (ipp->id == id) in __ipp_get()
140 * exynos_drm_ipp_get_caps_ioctl - get ipp module capabilities and formats
156 void __user *ptr = (void __user *)(unsigned long)resp->formats_ptr; in exynos_drm_ipp_get_caps_ioctl()
160 ipp = __ipp_get(resp->ipp_id); in exynos_drm_ipp_get_caps_ioctl()
162 return -ENOENT; in exynos_drm_ipp_get_caps_ioctl()
164 resp->ipp_id = ipp->id; in exynos_drm_ipp_get_caps_ioctl()
165 resp->capabilities = ipp->capabilities; in exynos_drm_ipp_get_caps_ioctl()
171 if (resp->formats_count >= ipp->num_formats) { in exynos_drm_ipp_get_caps_ioctl()
172 for (i = 0; i < ipp->num_formats; i++) { in exynos_drm_ipp_get_caps_ioctl()
174 .fourcc = ipp->formats[i].fourcc, in exynos_drm_ipp_get_caps_ioctl()
175 .type = ipp->formats[i].type, in exynos_drm_ipp_get_caps_ioctl()
176 .modifier = ipp->formats[i].modifier, in exynos_drm_ipp_get_caps_ioctl()
180 return -EFAULT; in exynos_drm_ipp_get_caps_ioctl()
184 resp->formats_count = ipp->num_formats; in exynos_drm_ipp_get_caps_ioctl()
195 for (i = 0; i < ipp->num_formats; i++) { in __ipp_format_get()
196 if ((ipp->formats[i].type & type) && in __ipp_format_get()
197 ipp->formats[i].fourcc == fourcc && in __ipp_format_get()
198 ipp->formats[i].modifier == mod) in __ipp_format_get()
199 return &ipp->formats[i]; in __ipp_format_get()
205 * exynos_drm_ipp_get_limits_ioctl - get ipp module limits
222 void __user *ptr = (void __user *)(unsigned long)resp->limits_ptr; in exynos_drm_ipp_get_limits_ioctl()
226 if (resp->type != DRM_EXYNOS_IPP_FORMAT_SOURCE && in exynos_drm_ipp_get_limits_ioctl()
227 resp->type != DRM_EXYNOS_IPP_FORMAT_DESTINATION) in exynos_drm_ipp_get_limits_ioctl()
228 return -EINVAL; in exynos_drm_ipp_get_limits_ioctl()
230 ipp = __ipp_get(resp->ipp_id); in exynos_drm_ipp_get_limits_ioctl()
232 return -ENOENT; in exynos_drm_ipp_get_limits_ioctl()
234 format = __ipp_format_get(ipp, resp->fourcc, resp->modifier, in exynos_drm_ipp_get_limits_ioctl()
235 resp->type); in exynos_drm_ipp_get_limits_ioctl()
237 return -EINVAL; in exynos_drm_ipp_get_limits_ioctl()
243 if (format->num_limits && resp->limits_count >= format->num_limits) in exynos_drm_ipp_get_limits_ioctl()
244 if (copy_to_user((void __user *)ptr, format->limits, in exynos_drm_ipp_get_limits_ioctl()
245 sizeof(*format->limits) * format->num_limits)) in exynos_drm_ipp_get_limits_ioctl()
246 return -EFAULT; in exynos_drm_ipp_get_limits_ioctl()
247 resp->limits_count = format->num_limits; in exynos_drm_ipp_get_limits_ioctl()
266 task->dev = ipp->dev; in exynos_drm_ipp_task_alloc()
267 task->ipp = ipp; in exynos_drm_ipp_task_alloc()
270 task->src.rect.w = task->dst.rect.w = UINT_MAX; in exynos_drm_ipp_task_alloc()
271 task->src.rect.h = task->dst.rect.h = UINT_MAX; in exynos_drm_ipp_task_alloc()
272 task->transform.rotation = DRM_MODE_ROTATE_0; in exynos_drm_ipp_task_alloc()
274 DRM_DEV_DEBUG_DRIVER(task->dev, "Allocated task %pK\n", task); in exynos_drm_ipp_task_alloc()
317 void __user *params = (void __user *)(unsigned long)arg->params_ptr; in exynos_drm_ipp_task_set()
318 unsigned int size = arg->params_size; in exynos_drm_ipp_task_set()
324 return -EFAULT; in exynos_drm_ipp_task_set()
331 return -EINVAL; in exynos_drm_ipp_task_set()
335 return -EFAULT; in exynos_drm_ipp_task_set()
338 size -= map[i].size; in exynos_drm_ipp_task_set()
341 DRM_DEV_DEBUG_DRIVER(task->dev, in exynos_drm_ipp_task_set()
342 "Got task %pK configuration from userspace\n", in exynos_drm_ipp_task_set()
354 for (i = 0; i < buf->format->num_planes; i++) { in exynos_drm_ipp_task_setup_buffer()
355 unsigned int height = (i == 0) ? buf->buf.height : in exynos_drm_ipp_task_setup_buffer()
356 DIV_ROUND_UP(buf->buf.height, buf->format->vsub); in exynos_drm_ipp_task_setup_buffer()
357 unsigned long size = height * buf->buf.pitch[i]; in exynos_drm_ipp_task_setup_buffer()
359 buf->buf.gem_id[i]); in exynos_drm_ipp_task_setup_buffer()
361 ret = -ENOENT; in exynos_drm_ipp_task_setup_buffer()
364 buf->exynos_gem[i] = gem; in exynos_drm_ipp_task_setup_buffer()
366 if (size + buf->buf.offset[i] > buf->exynos_gem[i]->size) { in exynos_drm_ipp_task_setup_buffer()
368 ret = -EINVAL; in exynos_drm_ipp_task_setup_buffer()
371 buf->dma_addr[i] = buf->exynos_gem[i]->dma_addr + in exynos_drm_ipp_task_setup_buffer()
372 buf->buf.offset[i]; in exynos_drm_ipp_task_setup_buffer()
377 while (i--) { in exynos_drm_ipp_task_setup_buffer()
378 exynos_drm_gem_put(buf->exynos_gem[i]); in exynos_drm_ipp_task_setup_buffer()
379 buf->exynos_gem[i] = NULL; in exynos_drm_ipp_task_setup_buffer()
388 if (!buf->exynos_gem[0]) in exynos_drm_ipp_task_release_buf()
390 for (i = 0; i < buf->format->num_planes; i++) in exynos_drm_ipp_task_release_buf()
391 exynos_drm_gem_put(buf->exynos_gem[i]); in exynos_drm_ipp_task_release_buf()
397 DRM_DEV_DEBUG_DRIVER(task->dev, "Freeing task %pK\n", task); in exynos_drm_ipp_task_free()
399 exynos_drm_ipp_task_release_buf(&task->src); in exynos_drm_ipp_task_free()
400 exynos_drm_ipp_task_release_buf(&task->dst); in exynos_drm_ipp_task_free()
401 if (task->event) in exynos_drm_ipp_task_free()
402 drm_event_cancel_free(ipp->drm_dev, &task->event->base); in exynos_drm_ipp_task_free()
439 for (l = limits; l - limits < num_limits; l++) { in __get_size_limit()
440 if (((l->type & DRM_EXYNOS_IPP_LIMIT_TYPE_MASK) != in __get_size_limit()
442 ((l->type & DRM_EXYNOS_IPP_LIMIT_SIZE_MASK) != in __get_size_limit()
445 __limit_set_val(&res->h.min, l->h.min); in __get_size_limit()
446 __limit_set_val(&res->h.max, l->h.max); in __get_size_limit()
447 __limit_set_val(&res->h.align, l->h.align); in __get_size_limit()
448 __limit_set_val(&res->v.min, l->v.min); in __get_size_limit()
449 __limit_set_val(&res->v.max, l->v.max); in __get_size_limit()
450 __limit_set_val(&res->v.align, l->v.align); in __get_size_limit()
456 if (align && (val & (align - 1))) { in __align_check()
467 if ((l->min && val < l->min) || (l->max && val > l->max)) { in __size_limit_check()
469 val, l->min, l->max); in __size_limit_check()
472 return __align_check(val, l->align); in __size_limit_check()
482 int real_width = buf->buf.pitch[0] / buf->format->cpp[0]; in exynos_drm_ipp_check_size_limits()
489 !__size_limit_check(buf->buf.height, &l.v)) in exynos_drm_ipp_check_size_limits()
490 return -EINVAL; in exynos_drm_ipp_check_size_limits()
497 if (!__size_limit_check(buf->rect.w, lh) || in exynos_drm_ipp_check_size_limits()
498 !__align_check(buf->rect.x, lh->align) || in exynos_drm_ipp_check_size_limits()
499 !__size_limit_check(buf->rect.h, lv) || in exynos_drm_ipp_check_size_limits()
500 !__align_check(buf->rect.y, lv->align)) in exynos_drm_ipp_check_size_limits()
501 return -EINVAL; in exynos_drm_ipp_check_size_limits()
529 for (; num_limits; limits++, num_limits--) in exynos_drm_ipp_check_scale_limits()
530 if ((limits->type & DRM_EXYNOS_IPP_LIMIT_TYPE_MASK) == in exynos_drm_ipp_check_scale_limits()
536 lh = (!swap) ? &limits->h : &limits->v; in exynos_drm_ipp_check_scale_limits()
537 lv = (!swap) ? &limits->v : &limits->h; in exynos_drm_ipp_check_scale_limits()
538 dw = (!swap) ? dst->w : dst->h; in exynos_drm_ipp_check_scale_limits()
539 dh = (!swap) ? dst->h : dst->w; in exynos_drm_ipp_check_scale_limits()
541 if (!__scale_limit_check(src->w, dw, lh->min, lh->max) || in exynos_drm_ipp_check_scale_limits()
542 !__scale_limit_check(src->h, dh, lv->min, lv->max)) in exynos_drm_ipp_check_scale_limits()
543 return -EINVAL; in exynos_drm_ipp_check_scale_limits()
557 fmt = __ipp_format_get(task->ipp, buf->buf.fourcc, buf->buf.modifier, in exynos_drm_ipp_check_format()
561 DRM_DEV_DEBUG_DRIVER(task->dev, in exynos_drm_ipp_check_format()
562 "Task %pK: %s format not supported\n", in exynos_drm_ipp_check_format()
564 return -EINVAL; in exynos_drm_ipp_check_format()
568 if (buf->buf.width == 0 || buf->buf.height == 0) in exynos_drm_ipp_check_format()
569 return -EINVAL; in exynos_drm_ipp_check_format()
571 buf->format = drm_format_info(buf->buf.fourcc); in exynos_drm_ipp_check_format()
572 for (i = 0; i < buf->format->num_planes; i++) { in exynos_drm_ipp_check_format()
573 unsigned int width = (i == 0) ? buf->buf.width : in exynos_drm_ipp_check_format()
574 DIV_ROUND_UP(buf->buf.width, buf->format->hsub); in exynos_drm_ipp_check_format()
576 if (buf->buf.pitch[i] == 0) in exynos_drm_ipp_check_format()
577 buf->buf.pitch[i] = width * buf->format->cpp[i]; in exynos_drm_ipp_check_format()
578 if (buf->buf.pitch[i] < width * buf->format->cpp[i]) in exynos_drm_ipp_check_format()
579 return -EINVAL; in exynos_drm_ipp_check_format()
580 if (!buf->buf.gem_id[i]) in exynos_drm_ipp_check_format()
581 return -ENOENT; in exynos_drm_ipp_check_format()
585 if (buf->format->num_planes > 2 && in exynos_drm_ipp_check_format()
586 buf->buf.pitch[1] != buf->buf.pitch[2]) in exynos_drm_ipp_check_format()
587 return -EINVAL; in exynos_drm_ipp_check_format()
590 ret = exynos_drm_ipp_check_size_limits(buf, fmt->limits, in exynos_drm_ipp_check_format()
591 fmt->num_limits, in exynos_drm_ipp_check_format()
596 ret = exynos_drm_ipp_check_scale_limits(&src->rect, &dst->rect, in exynos_drm_ipp_check_format()
597 fmt->limits, in exynos_drm_ipp_check_format()
598 fmt->num_limits, swap); in exynos_drm_ipp_check_format()
604 struct exynos_drm_ipp *ipp = task->ipp; in exynos_drm_ipp_task_check()
605 struct exynos_drm_ipp_buffer *src = &task->src, *dst = &task->dst; in exynos_drm_ipp_task_check()
606 unsigned int rotation = task->transform.rotation; in exynos_drm_ipp_task_check()
612 DRM_DEV_DEBUG_DRIVER(task->dev, "Checking task %pK\n", task); in exynos_drm_ipp_task_check()
614 if (src->rect.w == UINT_MAX) in exynos_drm_ipp_task_check()
615 src->rect.w = src->buf.width; in exynos_drm_ipp_task_check()
616 if (src->rect.h == UINT_MAX) in exynos_drm_ipp_task_check()
617 src->rect.h = src->buf.height; in exynos_drm_ipp_task_check()
618 if (dst->rect.w == UINT_MAX) in exynos_drm_ipp_task_check()
619 dst->rect.w = dst->buf.width; in exynos_drm_ipp_task_check()
620 if (dst->rect.h == UINT_MAX) in exynos_drm_ipp_task_check()
621 dst->rect.h = dst->buf.height; in exynos_drm_ipp_task_check()
623 if (src->rect.x + src->rect.w > (src->buf.width) || in exynos_drm_ipp_task_check()
624 src->rect.y + src->rect.h > (src->buf.height) || in exynos_drm_ipp_task_check()
625 dst->rect.x + dst->rect.w > (dst->buf.width) || in exynos_drm_ipp_task_check()
626 dst->rect.y + dst->rect.h > (dst->buf.height)) { in exynos_drm_ipp_task_check()
627 DRM_DEV_DEBUG_DRIVER(task->dev, in exynos_drm_ipp_task_check()
628 "Task %pK: defined area is outside provided buffers\n", in exynos_drm_ipp_task_check()
630 return -EINVAL; in exynos_drm_ipp_task_check()
633 if ((!swap && (src->rect.w != dst->rect.w || in exynos_drm_ipp_task_check()
634 src->rect.h != dst->rect.h)) || in exynos_drm_ipp_task_check()
635 (swap && (src->rect.w != dst->rect.h || in exynos_drm_ipp_task_check()
636 src->rect.h != dst->rect.w))) in exynos_drm_ipp_task_check()
639 if ((!(ipp->capabilities & DRM_EXYNOS_IPP_CAP_CROP) && in exynos_drm_ipp_task_check()
640 (src->rect.x || src->rect.y || dst->rect.x || dst->rect.y)) || in exynos_drm_ipp_task_check()
641 (!(ipp->capabilities & DRM_EXYNOS_IPP_CAP_ROTATE) && rotate) || in exynos_drm_ipp_task_check()
642 (!(ipp->capabilities & DRM_EXYNOS_IPP_CAP_SCALE) && scale) || in exynos_drm_ipp_task_check()
643 (!(ipp->capabilities & DRM_EXYNOS_IPP_CAP_CONVERT) && in exynos_drm_ipp_task_check()
644 src->buf.fourcc != dst->buf.fourcc)) { in exynos_drm_ipp_task_check()
645 DRM_DEV_DEBUG_DRIVER(task->dev, "Task %pK: hw capabilities exceeded\n", in exynos_drm_ipp_task_check()
647 return -EINVAL; in exynos_drm_ipp_task_check()
658 DRM_DEV_DEBUG_DRIVER(ipp->dev, "Task %pK: all checks done.\n", in exynos_drm_ipp_task_check()
667 struct exynos_drm_ipp_buffer *src = &task->src, *dst = &task->dst; in exynos_drm_ipp_task_setup_buffers()
670 DRM_DEV_DEBUG_DRIVER(task->dev, "Setting buffer for task %pK\n", in exynos_drm_ipp_task_setup_buffers()
675 DRM_DEV_DEBUG_DRIVER(task->dev, in exynos_drm_ipp_task_setup_buffers()
676 "Task %pK: src buffer setup failed\n", in exynos_drm_ipp_task_setup_buffers()
682 DRM_DEV_DEBUG_DRIVER(task->dev, in exynos_drm_ipp_task_setup_buffers()
683 "Task %pK: dst buffer setup failed\n", in exynos_drm_ipp_task_setup_buffers()
688 DRM_DEV_DEBUG_DRIVER(task->dev, "Task %pK: buffers prepared.\n", in exynos_drm_ipp_task_setup_buffers()
703 return -ENOMEM; in exynos_drm_ipp_event_create()
705 e->event.base.type = DRM_EXYNOS_IPP_EVENT; in exynos_drm_ipp_event_create()
706 e->event.base.length = sizeof(e->event); in exynos_drm_ipp_event_create()
707 e->event.user_data = user_data; in exynos_drm_ipp_event_create()
709 ret = drm_event_reserve_init(task->ipp->drm_dev, file_priv, &e->base, in exynos_drm_ipp_event_create()
710 &e->event.base); in exynos_drm_ipp_event_create()
714 task->event = e; in exynos_drm_ipp_event_create()
726 task->event->event.tv_sec = now.tv_sec; in exynos_drm_ipp_event_send()
727 task->event->event.tv_usec = now.tv_nsec / NSEC_PER_USEC; in exynos_drm_ipp_event_send()
728 task->event->event.sequence = atomic_inc_return(&task->ipp->sequence); in exynos_drm_ipp_event_send()
730 drm_send_event(task->ipp->drm_dev, &task->event->base); in exynos_drm_ipp_event_send()
735 int ret = task->ret; in exynos_drm_ipp_task_cleanup()
737 if (ret == 0 && task->event) { in exynos_drm_ipp_task_cleanup()
740 task->event = NULL; in exynos_drm_ipp_task_cleanup()
743 exynos_drm_ipp_task_free(task->ipp, task); in exynos_drm_ipp_task_cleanup()
758 * exynos_drm_ipp_task_done - finish given task and set return code
764 struct exynos_drm_ipp *ipp = task->ipp; in exynos_drm_ipp_task_done()
767 DRM_DEV_DEBUG_DRIVER(task->dev, "ipp: %d, task %pK done: %d\n", in exynos_drm_ipp_task_done()
768 ipp->id, task, ret); in exynos_drm_ipp_task_done()
770 spin_lock_irqsave(&ipp->lock, flags); in exynos_drm_ipp_task_done()
771 if (ipp->task == task) in exynos_drm_ipp_task_done()
772 ipp->task = NULL; in exynos_drm_ipp_task_done()
773 task->flags |= DRM_EXYNOS_IPP_TASK_DONE; in exynos_drm_ipp_task_done()
774 task->ret = ret; in exynos_drm_ipp_task_done()
775 spin_unlock_irqrestore(&ipp->lock, flags); in exynos_drm_ipp_task_done()
778 wake_up(&ipp->done_wq); in exynos_drm_ipp_task_done()
780 if (task->flags & DRM_EXYNOS_IPP_TASK_ASYNC) { in exynos_drm_ipp_task_done()
781 INIT_WORK(&task->cleanup_work, exynos_drm_ipp_cleanup_work); in exynos_drm_ipp_task_done()
782 schedule_work(&task->cleanup_work); in exynos_drm_ipp_task_done()
792 DRM_DEV_DEBUG_DRIVER(ipp->dev, "ipp: %d, try to run new task\n", in exynos_drm_ipp_next_task()
793 ipp->id); in exynos_drm_ipp_next_task()
795 spin_lock_irqsave(&ipp->lock, flags); in exynos_drm_ipp_next_task()
797 if (ipp->task || list_empty(&ipp->todo_list)) { in exynos_drm_ipp_next_task()
798 spin_unlock_irqrestore(&ipp->lock, flags); in exynos_drm_ipp_next_task()
802 task = list_first_entry(&ipp->todo_list, struct exynos_drm_ipp_task, in exynos_drm_ipp_next_task()
804 list_del_init(&task->head); in exynos_drm_ipp_next_task()
805 ipp->task = task; in exynos_drm_ipp_next_task()
807 spin_unlock_irqrestore(&ipp->lock, flags); in exynos_drm_ipp_next_task()
809 DRM_DEV_DEBUG_DRIVER(ipp->dev, in exynos_drm_ipp_next_task()
810 "ipp: %d, selected task %pK to run\n", ipp->id, in exynos_drm_ipp_next_task()
813 ret = ipp->funcs->commit(ipp, task); in exynos_drm_ipp_next_task()
823 spin_lock_irqsave(&ipp->lock, flags); in exynos_drm_ipp_schedule_task()
824 list_add(&task->head, &ipp->todo_list); in exynos_drm_ipp_schedule_task()
825 spin_unlock_irqrestore(&ipp->lock, flags); in exynos_drm_ipp_schedule_task()
835 spin_lock_irqsave(&ipp->lock, flags); in exynos_drm_ipp_task_abort()
836 if (task->flags & DRM_EXYNOS_IPP_TASK_DONE) { in exynos_drm_ipp_task_abort()
839 } else if (ipp->task != task) { in exynos_drm_ipp_task_abort()
841 list_del_init(&task->head); in exynos_drm_ipp_task_abort()
848 task->flags |= DRM_EXYNOS_IPP_TASK_ASYNC; in exynos_drm_ipp_task_abort()
849 spin_unlock_irqrestore(&ipp->lock, flags); in exynos_drm_ipp_task_abort()
850 if (ipp->funcs->abort) in exynos_drm_ipp_task_abort()
851 ipp->funcs->abort(ipp, task); in exynos_drm_ipp_task_abort()
854 spin_unlock_irqrestore(&ipp->lock, flags); in exynos_drm_ipp_task_abort()
858 * exynos_drm_ipp_commit_ioctl - perform image processing operation
879 if ((arg->flags & ~DRM_EXYNOS_IPP_FLAGS) || arg->reserved) in exynos_drm_ipp_commit_ioctl()
880 return -EINVAL; in exynos_drm_ipp_commit_ioctl()
883 if ((arg->flags & DRM_EXYNOS_IPP_FLAG_TEST_ONLY) && in exynos_drm_ipp_commit_ioctl()
884 (arg->flags & DRM_EXYNOS_IPP_FLAG_EVENT)) in exynos_drm_ipp_commit_ioctl()
885 return -EINVAL; in exynos_drm_ipp_commit_ioctl()
887 ipp = __ipp_get(arg->ipp_id); in exynos_drm_ipp_commit_ioctl()
889 return -ENOENT; in exynos_drm_ipp_commit_ioctl()
893 return -ENOMEM; in exynos_drm_ipp_commit_ioctl()
904 if (ret || arg->flags & DRM_EXYNOS_IPP_FLAG_TEST_ONLY) in exynos_drm_ipp_commit_ioctl()
907 if (arg->flags & DRM_EXYNOS_IPP_FLAG_EVENT) { in exynos_drm_ipp_commit_ioctl()
909 arg->user_data); in exynos_drm_ipp_commit_ioctl()
918 if (arg->flags & DRM_EXYNOS_IPP_FLAG_NONBLOCK) { in exynos_drm_ipp_commit_ioctl()
919 DRM_DEV_DEBUG_DRIVER(ipp->dev, in exynos_drm_ipp_commit_ioctl()
920 "ipp: %d, nonblocking processing task %pK\n", in exynos_drm_ipp_commit_ioctl()
921 ipp->id, task); in exynos_drm_ipp_commit_ioctl()
923 task->flags |= DRM_EXYNOS_IPP_TASK_ASYNC; in exynos_drm_ipp_commit_ioctl()
924 exynos_drm_ipp_schedule_task(task->ipp, task); in exynos_drm_ipp_commit_ioctl()
927 DRM_DEV_DEBUG_DRIVER(ipp->dev, "ipp: %d, processing task %pK\n", in exynos_drm_ipp_commit_ioctl()
928 ipp->id, task); in exynos_drm_ipp_commit_ioctl()
930 ret = wait_event_interruptible(ipp->done_wq, in exynos_drm_ipp_commit_ioctl()
931 task->flags & DRM_EXYNOS_IPP_TASK_DONE); in exynos_drm_ipp_commit_ioctl()