Lines Matching full:plane
23 static int mdp5_plane_mode_set(struct drm_plane *plane,
27 static struct mdp5_kms *get_kms(struct drm_plane *plane) in get_kms() argument
29 struct msm_drm_private *priv = plane->dev->dev_private; in get_kms()
38 static void mdp5_plane_destroy(struct drm_plane *plane) in mdp5_plane_destroy() argument
40 struct mdp5_plane *mdp5_plane = to_mdp5_plane(plane); in mdp5_plane_destroy()
42 drm_plane_cleanup(plane); in mdp5_plane_destroy()
48 static void mdp5_plane_install_properties(struct drm_plane *plane, in mdp5_plane_install_properties() argument
51 drm_plane_create_rotation_property(plane, in mdp5_plane_install_properties()
57 drm_plane_create_alpha_property(plane); in mdp5_plane_install_properties()
58 drm_plane_create_blend_mode_property(plane, in mdp5_plane_install_properties()
62 drm_plane_create_zpos_property(plane, 1, 1, 255); in mdp5_plane_install_properties()
70 struct mdp5_kms *mdp5_kms = get_kms(state->plane); in mdp5_plane_atomic_print_state()
85 static void mdp5_plane_reset(struct drm_plane *plane) in mdp5_plane_reset() argument
89 if (plane->state) in mdp5_plane_reset()
90 __drm_atomic_helper_plane_destroy_state(plane->state); in mdp5_plane_reset()
92 kfree(to_mdp5_plane_state(plane->state)); in mdp5_plane_reset()
95 if (plane->type == DRM_PLANE_TYPE_PRIMARY) in mdp5_plane_reset()
98 mdp5_state->base.zpos = STAGE0 + drm_plane_index(plane); in mdp5_plane_reset()
101 __drm_atomic_helper_plane_reset(plane, &mdp5_state->base); in mdp5_plane_reset()
105 mdp5_plane_duplicate_state(struct drm_plane *plane) in mdp5_plane_duplicate_state() argument
109 if (WARN_ON(!plane->state)) in mdp5_plane_duplicate_state()
112 mdp5_state = kmemdup(to_mdp5_plane_state(plane->state), in mdp5_plane_duplicate_state()
117 __drm_atomic_helper_plane_duplicate_state(plane, &mdp5_state->base); in mdp5_plane_duplicate_state()
122 static void mdp5_plane_destroy_state(struct drm_plane *plane, in mdp5_plane_destroy_state() argument
143 static void mdp5_plane_cleanup_fb(struct drm_plane *plane, in mdp5_plane_cleanup_fb() argument
146 struct mdp5_kms *mdp5_kms = get_kms(plane); in mdp5_plane_cleanup_fb()
153 DBG("%s: cleanup: FB[%u]", plane->name, fb->base.id); in mdp5_plane_cleanup_fb()
161 struct drm_plane *plane = state->plane; in mdp5_plane_atomic_check_with_state() local
162 struct drm_plane_state *old_state = plane->state; in mdp5_plane_atomic_check_with_state()
163 struct mdp5_cfg *config = mdp5_cfg_get_config(get_kms(plane)->cfg); in mdp5_plane_atomic_check_with_state()
172 DBG("%s: check (%d -> %d)", plane->name, in mdp5_plane_atomic_check_with_state()
214 struct mdp5_kms *mdp5_kms = get_kms(plane); in mdp5_plane_atomic_check_with_state()
236 if (plane->type == DRM_PLANE_TYPE_CURSOR) in mdp5_plane_atomic_check_with_state()
275 ret = mdp5_pipe_assign(state->state, plane, caps, in mdp5_plane_atomic_check_with_state()
281 plane->name); in mdp5_plane_atomic_check_with_state()
309 static int mdp5_plane_atomic_check(struct drm_plane *plane, in mdp5_plane_atomic_check() argument
313 plane); in mdp5_plane_atomic_check()
315 plane); in mdp5_plane_atomic_check()
331 static void mdp5_plane_atomic_update(struct drm_plane *plane, in mdp5_plane_atomic_update() argument
335 plane); in mdp5_plane_atomic_update()
337 DBG("%s: update", plane->name); in mdp5_plane_atomic_update()
342 ret = mdp5_plane_mode_set(plane, in mdp5_plane_atomic_update()
350 static int mdp5_plane_atomic_async_check(struct drm_plane *plane, in mdp5_plane_atomic_async_check() argument
354 plane); in mdp5_plane_atomic_async_check()
375 if (plane->state->crtc != new_plane_state->crtc || in mdp5_plane_atomic_async_check()
376 plane->state->src_w != new_plane_state->src_w || in mdp5_plane_atomic_async_check()
377 plane->state->src_h != new_plane_state->src_h || in mdp5_plane_atomic_async_check()
378 plane->state->crtc_w != new_plane_state->crtc_w || in mdp5_plane_atomic_async_check()
379 plane->state->crtc_h != new_plane_state->crtc_h || in mdp5_plane_atomic_async_check()
380 !plane->state->fb || in mdp5_plane_atomic_async_check()
381 plane->state->fb != new_plane_state->fb) in mdp5_plane_atomic_async_check()
394 * if the visibility of the plane changes (i.e, if the cursor is in mdp5_plane_atomic_async_check()
396 * we need to stage/unstage the plane from the Layer Mixer(s). We in mdp5_plane_atomic_async_check()
397 * also assign/unassign the hwpipe(s) tied to the plane. We avoid in mdp5_plane_atomic_async_check()
400 if (new_plane_state->visible != plane->state->visible) in mdp5_plane_atomic_async_check()
406 static void mdp5_plane_atomic_async_update(struct drm_plane *plane, in mdp5_plane_atomic_async_update() argument
410 plane); in mdp5_plane_atomic_async_update()
411 struct drm_framebuffer *old_fb = plane->state->fb; in mdp5_plane_atomic_async_update()
413 plane->state->src_x = new_state->src_x; in mdp5_plane_atomic_async_update()
414 plane->state->src_y = new_state->src_y; in mdp5_plane_atomic_async_update()
415 plane->state->crtc_x = new_state->crtc_x; in mdp5_plane_atomic_async_update()
416 plane->state->crtc_y = new_state->crtc_y; in mdp5_plane_atomic_async_update()
424 ret = mdp5_plane_mode_set(plane, new_state->crtc, new_state->fb, in mdp5_plane_atomic_async_update()
430 mdp5_ctl_commit(ctl, pipeline, mdp5_plane_get_flush(plane), true); in mdp5_plane_atomic_async_update()
433 *to_mdp5_plane_state(plane->state) = in mdp5_plane_atomic_async_update()
559 static int calc_scalex_steps(struct drm_plane *plane, in calc_scalex_steps() argument
564 struct mdp5_kms *mdp5_kms = get_kms(plane); in calc_scalex_steps()
582 static int calc_scaley_steps(struct drm_plane *plane, in calc_scaley_steps() argument
587 struct mdp5_kms *mdp5_kms = get_kms(plane); in calc_scaley_steps()
827 static int mdp5_plane_mode_set(struct drm_plane *plane, in mdp5_plane_mode_set() argument
831 struct drm_plane_state *pstate = plane->state; in mdp5_plane_mode_set()
833 struct mdp5_kms *mdp5_kms = get_kms(plane); in mdp5_plane_mode_set()
879 DBG("%s: FB[%u] %u,%u,%u,%u -> CRTC[%u] %d,%d,%u,%u", plane->name, in mdp5_plane_mode_set()
886 * if the plane comprises of 2 hw pipes, assume that the width in mdp5_plane_mode_set()
895 ret = calc_scalex_steps(plane, pix_format, src_w, crtc_w, step.x); in mdp5_plane_mode_set()
899 ret = calc_scaley_steps(plane, pix_format, src_h, crtc_h, step.y); in mdp5_plane_mode_set()
943 enum mdp5_pipe mdp5_plane_pipe(struct drm_plane *plane) in mdp5_plane_pipe() argument
945 struct mdp5_plane_state *pstate = to_mdp5_plane_state(plane->state); in mdp5_plane_pipe()
953 enum mdp5_pipe mdp5_plane_right_pipe(struct drm_plane *plane) in mdp5_plane_right_pipe() argument
955 struct mdp5_plane_state *pstate = to_mdp5_plane_state(plane->state); in mdp5_plane_right_pipe()
963 uint32_t mdp5_plane_get_flush(struct drm_plane *plane) in mdp5_plane_get_flush() argument
965 struct mdp5_plane_state *pstate = to_mdp5_plane_state(plane->state); in mdp5_plane_get_flush()
979 /* initialize plane */
983 struct drm_plane *plane = NULL; in mdp5_plane_init() local
993 plane = &mdp5_plane->base; in mdp5_plane_init()
998 ret = drm_universal_plane_init(dev, plane, 0xff, &mdp5_plane_funcs, in mdp5_plane_init()
1004 drm_plane_helper_add(plane, &mdp5_plane_helper_funcs); in mdp5_plane_init()
1006 mdp5_plane_install_properties(plane, &plane->base); in mdp5_plane_init()
1008 drm_plane_enable_fb_damage_clips(plane); in mdp5_plane_init()
1010 return plane; in mdp5_plane_init()
1013 if (plane) in mdp5_plane_init()
1014 mdp5_plane_destroy(plane); in mdp5_plane_init()