Lines Matching refs:plane
164 static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane) in create_in_format_blob() argument
173 formats_size = sizeof(__u32) * plane->format_count; in create_in_format_blob()
180 sizeof(struct drm_format_modifier) * plane->modifier_count; in create_in_format_blob()
196 blob_data->count_formats = plane->format_count; in create_in_format_blob()
198 blob_data->count_modifiers = plane->modifier_count; in create_in_format_blob()
203 memcpy(formats_ptr(blob_data), plane->format_types, formats_size); in create_in_format_blob()
206 for (i = 0; i < plane->modifier_count; i++) { in create_in_format_blob()
207 for (j = 0; j < plane->format_count; j++) { in create_in_format_blob()
208 if (!plane->funcs->format_mod_supported || in create_in_format_blob()
209 plane->funcs->format_mod_supported(plane, in create_in_format_blob()
210 plane->format_types[j], in create_in_format_blob()
211 plane->modifiers[i])) { in create_in_format_blob()
216 mod->modifier = plane->modifiers[i]; in create_in_format_blob()
222 drm_object_attach_property(&plane->base, config->modifiers_property, in create_in_format_blob()
230 struct drm_plane *plane, in __drm_universal_plane_init() argument
261 ret = drm_mode_object_add(dev, &plane->base, DRM_MODE_OBJECT_PLANE); in __drm_universal_plane_init()
265 drm_modeset_lock_init(&plane->mutex); in __drm_universal_plane_init()
267 plane->base.properties = &plane->properties; in __drm_universal_plane_init()
268 plane->dev = dev; in __drm_universal_plane_init()
269 plane->funcs = funcs; in __drm_universal_plane_init()
270 plane->format_types = kmalloc_array(format_count, sizeof(uint32_t), in __drm_universal_plane_init()
272 if (!plane->format_types) { in __drm_universal_plane_init()
274 drm_mode_object_unregister(dev, &plane->base); in __drm_universal_plane_init()
294 plane->modifier_count = format_modifier_count; in __drm_universal_plane_init()
295 plane->modifiers = kmalloc_array(format_modifier_count, in __drm_universal_plane_init()
299 if (format_modifier_count && !plane->modifiers) { in __drm_universal_plane_init()
301 kfree(plane->format_types); in __drm_universal_plane_init()
302 drm_mode_object_unregister(dev, &plane->base); in __drm_universal_plane_init()
307 plane->name = kvasprintf(GFP_KERNEL, name, ap); in __drm_universal_plane_init()
309 plane->name = kasprintf(GFP_KERNEL, "plane-%d", in __drm_universal_plane_init()
312 if (!plane->name) { in __drm_universal_plane_init()
313 kfree(plane->format_types); in __drm_universal_plane_init()
314 kfree(plane->modifiers); in __drm_universal_plane_init()
315 drm_mode_object_unregister(dev, &plane->base); in __drm_universal_plane_init()
319 memcpy(plane->format_types, formats, format_count * sizeof(uint32_t)); in __drm_universal_plane_init()
320 plane->format_count = format_count; in __drm_universal_plane_init()
321 memcpy(plane->modifiers, format_modifiers, in __drm_universal_plane_init()
323 plane->possible_crtcs = possible_crtcs; in __drm_universal_plane_init()
324 plane->type = type; in __drm_universal_plane_init()
326 list_add_tail(&plane->head, &config->plane_list); in __drm_universal_plane_init()
327 plane->index = config->num_total_plane++; in __drm_universal_plane_init()
329 drm_object_attach_property(&plane->base, in __drm_universal_plane_init()
331 plane->type); in __drm_universal_plane_init()
334 drm_object_attach_property(&plane->base, config->prop_fb_id, 0); in __drm_universal_plane_init()
335 drm_object_attach_property(&plane->base, config->prop_in_fence_fd, -1); in __drm_universal_plane_init()
336 drm_object_attach_property(&plane->base, config->prop_crtc_id, 0); in __drm_universal_plane_init()
337 drm_object_attach_property(&plane->base, config->prop_crtc_x, 0); in __drm_universal_plane_init()
338 drm_object_attach_property(&plane->base, config->prop_crtc_y, 0); in __drm_universal_plane_init()
339 drm_object_attach_property(&plane->base, config->prop_crtc_w, 0); in __drm_universal_plane_init()
340 drm_object_attach_property(&plane->base, config->prop_crtc_h, 0); in __drm_universal_plane_init()
341 drm_object_attach_property(&plane->base, config->prop_src_x, 0); in __drm_universal_plane_init()
342 drm_object_attach_property(&plane->base, config->prop_src_y, 0); in __drm_universal_plane_init()
343 drm_object_attach_property(&plane->base, config->prop_src_w, 0); in __drm_universal_plane_init()
344 drm_object_attach_property(&plane->base, config->prop_src_h, 0); in __drm_universal_plane_init()
348 create_in_format_blob(dev, plane); in __drm_universal_plane_init()
380 int drm_universal_plane_init(struct drm_device *dev, struct drm_plane *plane, in drm_universal_plane_init() argument
394 ret = __drm_universal_plane_init(dev, plane, possible_crtcs, funcs, in drm_universal_plane_init()
404 struct drm_plane *plane = ptr; in drmm_universal_plane_alloc_release() local
406 if (WARN_ON(!plane->dev)) in drmm_universal_plane_alloc_release()
409 drm_plane_cleanup(plane); in drmm_universal_plane_alloc_release()
421 struct drm_plane *plane; in __drmm_universal_plane_alloc() local
432 plane = container + offset; in __drmm_universal_plane_alloc()
435 ret = __drm_universal_plane_init(dev, plane, possible_crtcs, funcs, in __drmm_universal_plane_alloc()
443 plane); in __drmm_universal_plane_alloc()
460 struct drm_plane *plane; in __drm_universal_plane_alloc() local
471 plane = container + offset; in __drm_universal_plane_alloc()
474 ret = __drm_universal_plane_init(dev, plane, possible_crtcs, funcs, in __drm_universal_plane_alloc()
493 struct drm_plane *plane; in drm_plane_register_all() local
496 drm_for_each_plane(plane, dev) { in drm_plane_register_all()
497 if (plane->funcs->late_register) in drm_plane_register_all()
498 ret = plane->funcs->late_register(plane); in drm_plane_register_all()
502 if (plane->zpos_property) in drm_plane_register_all()
515 struct drm_plane *plane; in drm_plane_unregister_all() local
517 drm_for_each_plane(plane, dev) { in drm_plane_unregister_all()
518 if (plane->funcs->early_unregister) in drm_plane_unregister_all()
519 plane->funcs->early_unregister(plane); in drm_plane_unregister_all()
531 void drm_plane_cleanup(struct drm_plane *plane) in drm_plane_cleanup() argument
533 struct drm_device *dev = plane->dev; in drm_plane_cleanup()
535 drm_modeset_lock_fini(&plane->mutex); in drm_plane_cleanup()
537 kfree(plane->format_types); in drm_plane_cleanup()
538 kfree(plane->modifiers); in drm_plane_cleanup()
539 drm_mode_object_unregister(dev, &plane->base); in drm_plane_cleanup()
541 BUG_ON(list_empty(&plane->head)); in drm_plane_cleanup()
548 list_del(&plane->head); in drm_plane_cleanup()
551 WARN_ON(plane->state && !plane->funcs->atomic_destroy_state); in drm_plane_cleanup()
552 if (plane->state && plane->funcs->atomic_destroy_state) in drm_plane_cleanup()
553 plane->funcs->atomic_destroy_state(plane, plane->state); in drm_plane_cleanup()
555 kfree(plane->name); in drm_plane_cleanup()
557 memset(plane, 0, sizeof(*plane)); in drm_plane_cleanup()
572 struct drm_plane *plane; in drm_plane_from_index() local
574 drm_for_each_plane(plane, dev) in drm_plane_from_index()
575 if (idx == plane->index) in drm_plane_from_index()
576 return plane; in drm_plane_from_index()
597 void drm_plane_force_disable(struct drm_plane *plane) in drm_plane_force_disable() argument
601 if (!plane->fb) in drm_plane_force_disable()
604 WARN_ON(drm_drv_uses_atomic_modeset(plane->dev)); in drm_plane_force_disable()
606 plane->old_fb = plane->fb; in drm_plane_force_disable()
607 ret = plane->funcs->disable_plane(plane, NULL); in drm_plane_force_disable()
610 plane->old_fb = NULL; in drm_plane_force_disable()
614 drm_framebuffer_put(plane->old_fb); in drm_plane_force_disable()
615 plane->old_fb = NULL; in drm_plane_force_disable()
616 plane->fb = NULL; in drm_plane_force_disable()
617 plane->crtc = NULL; in drm_plane_force_disable()
634 int drm_mode_plane_set_obj_prop(struct drm_plane *plane, in drm_mode_plane_set_obj_prop() argument
639 struct drm_mode_object *obj = &plane->base; in drm_mode_plane_set_obj_prop()
641 if (plane->funcs->set_property) in drm_mode_plane_set_obj_prop()
642 ret = plane->funcs->set_property(plane, property, value); in drm_mode_plane_set_obj_prop()
654 struct drm_plane *plane; in drm_mode_getplane_res() local
667 drm_for_each_plane(plane, dev) { in drm_mode_getplane_res()
672 if (plane->type != DRM_PLANE_TYPE_OVERLAY && in drm_mode_getplane_res()
676 if (drm_lease_held(file_priv, plane->base.id)) { in drm_mode_getplane_res()
678 put_user(plane->base.id, plane_ptr + count)) in drm_mode_getplane_res()
692 struct drm_plane *plane; in drm_mode_getplane() local
698 plane = drm_plane_find(dev, file_priv, plane_resp->plane_id); in drm_mode_getplane()
699 if (!plane) in drm_mode_getplane()
702 drm_modeset_lock(&plane->mutex, NULL); in drm_mode_getplane()
703 if (plane->state && plane->state->crtc && drm_lease_held(file_priv, plane->state->crtc->base.id)) in drm_mode_getplane()
704 plane_resp->crtc_id = plane->state->crtc->base.id; in drm_mode_getplane()
705 else if (!plane->state && plane->crtc && drm_lease_held(file_priv, plane->crtc->base.id)) in drm_mode_getplane()
706 plane_resp->crtc_id = plane->crtc->base.id; in drm_mode_getplane()
710 if (plane->state && plane->state->fb) in drm_mode_getplane()
711 plane_resp->fb_id = plane->state->fb->base.id; in drm_mode_getplane()
712 else if (!plane->state && plane->fb) in drm_mode_getplane()
713 plane_resp->fb_id = plane->fb->base.id; in drm_mode_getplane()
716 drm_modeset_unlock(&plane->mutex); in drm_mode_getplane()
718 plane_resp->plane_id = plane->base.id; in drm_mode_getplane()
720 plane->possible_crtcs); in drm_mode_getplane()
728 if (plane->format_count && in drm_mode_getplane()
729 (plane_resp->count_format_types >= plane->format_count)) { in drm_mode_getplane()
732 plane->format_types, in drm_mode_getplane()
733 sizeof(uint32_t) * plane->format_count)) { in drm_mode_getplane()
737 plane_resp->count_format_types = plane->format_count; in drm_mode_getplane()
742 int drm_plane_check_pixel_format(struct drm_plane *plane, in drm_plane_check_pixel_format() argument
747 for (i = 0; i < plane->format_count; i++) { in drm_plane_check_pixel_format()
748 if (format == plane->format_types[i]) in drm_plane_check_pixel_format()
751 if (i == plane->format_count) in drm_plane_check_pixel_format()
754 if (plane->funcs->format_mod_supported) { in drm_plane_check_pixel_format()
755 if (!plane->funcs->format_mod_supported(plane, format, modifier)) in drm_plane_check_pixel_format()
758 if (!plane->modifier_count) in drm_plane_check_pixel_format()
761 for (i = 0; i < plane->modifier_count; i++) { in drm_plane_check_pixel_format()
762 if (modifier == plane->modifiers[i]) in drm_plane_check_pixel_format()
765 if (i == plane->modifier_count) in drm_plane_check_pixel_format()
772 static int __setplane_check(struct drm_plane *plane, in __setplane_check() argument
783 if (!(plane->possible_crtcs & drm_crtc_mask(crtc))) { in __setplane_check()
789 ret = drm_plane_check_pixel_format(plane, fb->format->format, in __setplane_check()
826 struct drm_plane *plane; in drm_any_plane_has_format() local
828 drm_for_each_plane(plane, dev) { in drm_any_plane_has_format()
829 if (drm_plane_check_pixel_format(plane, format, modifier) == 0) in drm_any_plane_has_format()
845 static int __setplane_internal(struct drm_plane *plane, in __setplane_internal() argument
857 WARN_ON(drm_drv_uses_atomic_modeset(plane->dev)); in __setplane_internal()
861 plane->old_fb = plane->fb; in __setplane_internal()
862 ret = plane->funcs->disable_plane(plane, ctx); in __setplane_internal()
864 plane->crtc = NULL; in __setplane_internal()
865 plane->fb = NULL; in __setplane_internal()
867 plane->old_fb = NULL; in __setplane_internal()
872 ret = __setplane_check(plane, crtc, fb, in __setplane_internal()
878 plane->old_fb = plane->fb; in __setplane_internal()
879 ret = plane->funcs->update_plane(plane, crtc, fb, in __setplane_internal()
883 plane->crtc = crtc; in __setplane_internal()
884 plane->fb = fb; in __setplane_internal()
885 drm_framebuffer_get(plane->fb); in __setplane_internal()
887 plane->old_fb = NULL; in __setplane_internal()
891 if (plane->old_fb) in __setplane_internal()
892 drm_framebuffer_put(plane->old_fb); in __setplane_internal()
893 plane->old_fb = NULL; in __setplane_internal()
898 static int __setplane_atomic(struct drm_plane *plane, in __setplane_atomic() argument
909 WARN_ON(!drm_drv_uses_atomic_modeset(plane->dev)); in __setplane_atomic()
913 return plane->funcs->disable_plane(plane, ctx); in __setplane_atomic()
922 ret = __setplane_check(plane, crtc, fb, in __setplane_atomic()
928 return plane->funcs->update_plane(plane, crtc, fb, in __setplane_atomic()
933 static int setplane_internal(struct drm_plane *plane, in setplane_internal() argument
945 DRM_MODESET_LOCK_ALL_BEGIN(plane->dev, ctx, in setplane_internal()
948 if (drm_drv_uses_atomic_modeset(plane->dev)) in setplane_internal()
949 ret = __setplane_atomic(plane, crtc, fb, in setplane_internal()
953 ret = __setplane_internal(plane, crtc, fb, in setplane_internal()
957 DRM_MODESET_LOCK_ALL_END(plane->dev, ctx, ret); in setplane_internal()
966 struct drm_plane *plane; in drm_mode_setplane() local
978 plane = drm_plane_find(dev, file_priv, plane_req->plane_id); in drm_mode_setplane()
979 if (!plane) { in drm_mode_setplane()
1002 ret = setplane_internal(plane, crtc, fb, in drm_mode_setplane()
1020 struct drm_plane *plane = crtc->cursor; in drm_mode_cursor_universal() local
1034 BUG_ON(!plane); in drm_mode_cursor_universal()
1035 WARN_ON(plane->crtc != crtc && plane->crtc != NULL); in drm_mode_cursor_universal()
1056 if (plane->state) in drm_mode_cursor_universal()
1057 fb = plane->state->fb; in drm_mode_cursor_universal()
1059 fb = plane->fb; in drm_mode_cursor_universal()
1081 ret = __setplane_atomic(plane, crtc, fb, in drm_mode_cursor_universal()
1085 ret = __setplane_internal(plane, crtc, fb, in drm_mode_cursor_universal()
1211 struct drm_plane *plane; in drm_mode_page_flip_ioctl() local
1240 plane = crtc->primary; in drm_mode_page_flip_ioctl()
1242 if (!drm_lease_held(file_priv, plane->base.id)) in drm_mode_page_flip_ioctl()
1289 ret = drm_modeset_lock(&plane->mutex, &ctx); in drm_mode_page_flip_ioctl()
1293 if (plane->state) in drm_mode_page_flip_ioctl()
1294 old_fb = plane->state->fb; in drm_mode_page_flip_ioctl()
1296 old_fb = plane->fb; in drm_mode_page_flip_ioctl()
1313 if (plane->state) { in drm_mode_page_flip_ioctl()
1314 const struct drm_plane_state *state = plane->state; in drm_mode_page_flip_ioctl()
1361 plane->old_fb = plane->fb; in drm_mode_page_flip_ioctl()
1374 plane->old_fb = NULL; in drm_mode_page_flip_ioctl()
1376 if (!plane->state) { in drm_mode_page_flip_ioctl()
1377 plane->fb = fb; in drm_mode_page_flip_ioctl()
1385 if (plane->old_fb) in drm_mode_page_flip_ioctl()
1386 drm_framebuffer_put(plane->old_fb); in drm_mode_page_flip_ioctl()
1387 plane->old_fb = NULL; in drm_mode_page_flip_ioctl()
1448 void drm_plane_enable_fb_damage_clips(struct drm_plane *plane) in drm_plane_enable_fb_damage_clips() argument
1450 struct drm_device *dev = plane->dev; in drm_plane_enable_fb_damage_clips()
1453 drm_object_attach_property(&plane->base, config->prop_fb_damage_clips, in drm_plane_enable_fb_damage_clips()
1496 struct drm_device *dev = state->plane->dev; in drm_plane_get_damage_clips()
1500 if (!drm_mode_obj_find_prop_id(&state->plane->base, in drm_plane_get_damage_clips()
1564 int drm_plane_create_scaling_filter_property(struct drm_plane *plane, in drm_plane_create_scaling_filter_property() argument
1568 drm_create_scaling_filter_prop(plane->dev, supported_filters); in drm_plane_create_scaling_filter_property()
1573 drm_object_attach_property(&plane->base, prop, in drm_plane_create_scaling_filter_property()
1575 plane->scaling_filter_property = prop; in drm_plane_create_scaling_filter_property()