Lines Matching full:plane

25  * DOC: atomic plane helpers
27 * The functions here are used by the atomic plane helper functions to
28 * implement legacy plane updates (i.e., drm_plane->update_plane() and
29 * drm_plane->disable_plane()). This allows plane updates to use the
30 * atomic state infrastructure and perform plane updates as separate
46 struct intel_plane *plane) in intel_plane_state_reset() argument
50 __drm_atomic_helper_plane_state_reset(&plane_state->uapi, &plane->base); in intel_plane_state_reset()
58 struct intel_plane *plane; in intel_plane_alloc() local
60 plane = kzalloc(sizeof(*plane), GFP_KERNEL); in intel_plane_alloc()
61 if (!plane) in intel_plane_alloc()
66 kfree(plane); in intel_plane_alloc()
70 intel_plane_state_reset(plane_state, plane); in intel_plane_alloc()
72 plane->base.state = &plane_state->uapi; in intel_plane_alloc()
74 return plane; in intel_plane_alloc()
77 void intel_plane_free(struct intel_plane *plane) in intel_plane_free() argument
79 intel_plane_destroy_state(&plane->base, plane->base.state); in intel_plane_free()
80 kfree(plane); in intel_plane_free()
84 * intel_plane_duplicate_state - duplicate plane state
85 * @plane: drm plane
87 * Allocates and returns a copy of the plane state (both common and
88 * Intel-specific) for the specified plane.
90 * Returns: The newly allocated plane state, or NULL on failure.
93 intel_plane_duplicate_state(struct drm_plane *plane) in intel_plane_duplicate_state() argument
97 intel_state = to_intel_plane_state(plane->state); in intel_plane_duplicate_state()
103 __drm_atomic_helper_plane_duplicate_state(plane, &intel_state->uapi); in intel_plane_duplicate_state()
117 * intel_plane_destroy_state - destroy plane state
118 * @plane: drm plane
121 * Destroys the plane state (both common and Intel-specific) for the
122 * specified plane.
125 intel_plane_destroy_state(struct drm_plane *plane, in intel_plane_destroy_state() argument
130 drm_WARN_ON(plane->dev, plane_state->ggtt_vma); in intel_plane_destroy_state()
131 drm_WARN_ON(plane->dev, plane_state->dpt_vma); in intel_plane_destroy_state()
162 * Note we don't check for plane visibility here as in intel_plane_pixel_rate()
205 struct intel_plane *plane, in intel_plane_calc_min_cdclk() argument
208 struct drm_i915_private *dev_priv = to_i915(plane->base.dev); in intel_plane_calc_min_cdclk()
210 intel_atomic_get_new_plane_state(state, plane); in intel_plane_calc_min_cdclk()
216 if (!plane_state->uapi.visible || !plane->min_cdclk) in intel_plane_calc_min_cdclk()
222 new_crtc_state->min_cdclk[plane->id] = in intel_plane_calc_min_cdclk()
223 plane->min_cdclk(new_crtc_state, plane_state); in intel_plane_calc_min_cdclk()
227 * the min cdclk for the plane doesn't increase. in intel_plane_calc_min_cdclk()
229 * Ie. we only ever increase the cdclk due to plane in intel_plane_calc_min_cdclk()
233 if (new_crtc_state->min_cdclk[plane->id] <= in intel_plane_calc_min_cdclk()
234 old_crtc_state->min_cdclk[plane->id]) in intel_plane_calc_min_cdclk()
245 * Ie. we only ever increase the cdclk due to plane in intel_plane_calc_min_cdclk()
249 if (new_crtc_state->min_cdclk[plane->id] <= in intel_plane_calc_min_cdclk()
254 "[PLANE:%d:%s] min cdclk (%d kHz) > [CRTC:%d:%s] min cdclk (%d kHz)\n", in intel_plane_calc_min_cdclk()
255 plane->base.base.id, plane->base.name, in intel_plane_calc_min_cdclk()
256 new_crtc_state->min_cdclk[plane->id], in intel_plane_calc_min_cdclk()
282 * the plane is logically enabled on the uapi level. in intel_plane_copy_uapi_to_hw_state()
317 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); in intel_plane_set_invisible() local
319 crtc_state->active_planes &= ~BIT(plane->id); in intel_plane_set_invisible()
320 crtc_state->nv12_planes &= ~BIT(plane->id); in intel_plane_set_invisible()
321 crtc_state->c8_planes &= ~BIT(plane->id); in intel_plane_set_invisible()
322 crtc_state->data_rate[plane->id] = 0; in intel_plane_set_invisible()
323 crtc_state->min_cdclk[plane->id] = 0; in intel_plane_set_invisible()
333 struct intel_plane *plane = to_intel_plane(new_plane_state->uapi.plane); in intel_plane_atomic_check_with_state() local
338 new_crtc_state->enabled_planes &= ~BIT(plane->id); in intel_plane_atomic_check_with_state()
343 ret = plane->check_plane(new_crtc_state, new_plane_state); in intel_plane_atomic_check_with_state()
348 new_crtc_state->enabled_planes |= BIT(plane->id); in intel_plane_atomic_check_with_state()
352 new_crtc_state->active_planes |= BIT(plane->id); in intel_plane_atomic_check_with_state()
356 new_crtc_state->nv12_planes |= BIT(plane->id); in intel_plane_atomic_check_with_state()
360 new_crtc_state->c8_planes |= BIT(plane->id); in intel_plane_atomic_check_with_state()
363 new_crtc_state->update_planes |= BIT(plane->id); in intel_plane_atomic_check_with_state()
365 new_crtc_state->data_rate[plane->id] = in intel_plane_atomic_check_with_state()
376 struct intel_plane *plane; in intel_crtc_get_plane() local
378 for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) { in intel_crtc_get_plane()
379 if (plane->id == plane_id) in intel_crtc_get_plane()
380 return plane; in intel_crtc_get_plane()
387 struct intel_plane *plane) in intel_plane_atomic_check() argument
391 intel_atomic_get_new_plane_state(state, plane); in intel_plane_atomic_check()
393 intel_atomic_get_old_plane_state(state, plane); in intel_plane_atomic_check()
395 struct intel_crtc *crtc = intel_get_crtc_for_pipe(i915, plane->pipe); in intel_plane_atomic_check()
404 plane->id); in intel_plane_atomic_check()
436 struct intel_plane *plane; in skl_next_plane_to_commit() local
442 for_each_new_intel_plane_in_state(state, plane, plane_state, i) { in skl_next_plane_to_commit()
443 enum plane_id plane_id = plane->id; in skl_next_plane_to_commit()
445 if (crtc->pipe != plane->pipe || in skl_next_plane_to_commit()
461 return plane; in skl_next_plane_to_commit()
470 void intel_update_plane(struct intel_plane *plane, in intel_update_plane() argument
476 trace_intel_update_plane(&plane->base, crtc); in intel_update_plane()
478 if (crtc_state->uapi.async_flip && plane->async_flip) in intel_update_plane()
479 plane->async_flip(plane, crtc_state, plane_state, true); in intel_update_plane()
481 plane->update_plane(plane, crtc_state, plane_state); in intel_update_plane()
484 void intel_disable_plane(struct intel_plane *plane, in intel_disable_plane() argument
489 trace_intel_disable_plane(&plane->base, crtc); in intel_disable_plane()
490 plane->disable_plane(plane, crtc_state); in intel_disable_plane()
503 struct intel_plane *plane; in skl_update_planes_on_crtc() local
510 while ((plane = skl_next_plane_to_commit(state, crtc, in skl_update_planes_on_crtc()
514 intel_atomic_get_new_plane_state(state, plane); in skl_update_planes_on_crtc()
518 intel_update_plane(plane, new_crtc_state, new_plane_state); in skl_update_planes_on_crtc()
520 intel_disable_plane(plane, new_crtc_state); in skl_update_planes_on_crtc()
532 struct intel_plane *plane; in i9xx_update_planes_on_crtc() local
535 for_each_new_intel_plane_in_state(state, plane, new_plane_state, i) { in i9xx_update_planes_on_crtc()
536 if (crtc->pipe != plane->pipe || in i9xx_update_planes_on_crtc()
537 !(update_mask & BIT(plane->id))) in i9xx_update_planes_on_crtc()
541 intel_update_plane(plane, new_crtc_state, new_plane_state); in i9xx_update_planes_on_crtc()
543 intel_disable_plane(plane, new_crtc_state); in i9xx_update_planes_on_crtc()
570 DRM_DEBUG_KMS("Invalid scaling of plane\n"); in intel_atomic_plane_check_clipping()
595 DRM_DEBUG_KMS("Plane must cover entire CRTC\n"); in intel_atomic_plane_check_clipping()
609 void intel_plane_helper_add(struct intel_plane *plane) in intel_plane_helper_add() argument
611 drm_plane_helper_add(&plane->base, &intel_plane_helper_funcs); in intel_plane_helper_add()