Lines Matching full:plane

22 static int mdp5_plane_mode_set(struct drm_plane *plane,
26 static struct mdp5_kms *get_kms(struct drm_plane *plane) in get_kms() argument
28 struct msm_drm_private *priv = plane->dev->dev_private; in get_kms()
37 static void mdp5_plane_destroy(struct drm_plane *plane) in mdp5_plane_destroy() argument
39 struct mdp5_plane *mdp5_plane = to_mdp5_plane(plane); in mdp5_plane_destroy()
41 drm_plane_cleanup(plane); in mdp5_plane_destroy()
47 struct drm_plane *plane) in mdp5_plane_install_rotation_property() argument
49 drm_plane_create_rotation_property(plane, in mdp5_plane_install_rotation_property()
58 static void mdp5_plane_install_properties(struct drm_plane *plane, in mdp5_plane_install_properties() argument
61 struct drm_device *dev = plane->dev; in mdp5_plane_install_properties()
78 drm_object_attach_property(&plane->base, prop, init_val); \ in mdp5_plane_install_properties()
92 mdp5_plane_install_rotation_property(dev, plane); in mdp5_plane_install_properties()
99 static int mdp5_plane_atomic_set_property(struct drm_plane *plane, in mdp5_plane_atomic_set_property() argument
103 struct drm_device *dev = plane->dev; in mdp5_plane_atomic_set_property()
127 static int mdp5_plane_atomic_get_property(struct drm_plane *plane, in mdp5_plane_atomic_get_property() argument
131 struct drm_device *dev = plane->dev; in mdp5_plane_atomic_get_property()
160 struct mdp5_kms *mdp5_kms = get_kms(state->plane); in mdp5_plane_atomic_print_state()
174 static void mdp5_plane_reset(struct drm_plane *plane) in mdp5_plane_reset() argument
178 if (plane->state && plane->state->fb) in mdp5_plane_reset()
179 drm_framebuffer_put(plane->state->fb); in mdp5_plane_reset()
181 kfree(to_mdp5_plane_state(plane->state)); in mdp5_plane_reset()
188 if (plane->type == DRM_PLANE_TYPE_PRIMARY) in mdp5_plane_reset()
191 mdp5_state->zpos = STAGE0 + drm_plane_index(plane); in mdp5_plane_reset()
193 mdp5_state->base.plane = plane; in mdp5_plane_reset()
195 plane->state = &mdp5_state->base; in mdp5_plane_reset()
199 mdp5_plane_duplicate_state(struct drm_plane *plane) in mdp5_plane_duplicate_state() argument
203 if (WARN_ON(!plane->state)) in mdp5_plane_duplicate_state()
206 mdp5_state = kmemdup(to_mdp5_plane_state(plane->state), in mdp5_plane_duplicate_state()
211 __drm_atomic_helper_plane_duplicate_state(plane, &mdp5_state->base); in mdp5_plane_duplicate_state()
216 static void mdp5_plane_destroy_state(struct drm_plane *plane, in mdp5_plane_destroy_state() argument
239 static void mdp5_plane_cleanup_fb(struct drm_plane *plane, in mdp5_plane_cleanup_fb() argument
242 struct mdp5_kms *mdp5_kms = get_kms(plane); in mdp5_plane_cleanup_fb()
249 DBG("%s: cleanup: FB[%u]", plane->name, fb->base.id); in mdp5_plane_cleanup_fb()
257 struct drm_plane *plane = state->plane; in mdp5_plane_atomic_check_with_state() local
258 struct drm_plane_state *old_state = plane->state; in mdp5_plane_atomic_check_with_state()
259 struct mdp5_cfg *config = mdp5_cfg_get_config(get_kms(plane)->cfg); in mdp5_plane_atomic_check_with_state()
268 DBG("%s: check (%d -> %d)", plane->name, in mdp5_plane_atomic_check_with_state()
310 struct mdp5_kms *mdp5_kms = get_kms(plane); in mdp5_plane_atomic_check_with_state()
332 if (plane->type == DRM_PLANE_TYPE_CURSOR) in mdp5_plane_atomic_check_with_state()
371 ret = mdp5_pipe_assign(state->state, plane, caps, in mdp5_plane_atomic_check_with_state()
377 plane->name); in mdp5_plane_atomic_check_with_state()
405 static int mdp5_plane_atomic_check(struct drm_plane *plane, in mdp5_plane_atomic_check() argument
411 crtc = state->crtc ? state->crtc : plane->state->crtc; in mdp5_plane_atomic_check()
422 static void mdp5_plane_atomic_update(struct drm_plane *plane, in mdp5_plane_atomic_update() argument
425 struct drm_plane_state *state = plane->state; in mdp5_plane_atomic_update()
427 DBG("%s: update", plane->name); in mdp5_plane_atomic_update()
432 ret = mdp5_plane_mode_set(plane, in mdp5_plane_atomic_update()
440 static int mdp5_plane_atomic_async_check(struct drm_plane *plane, in mdp5_plane_atomic_async_check() argument
463 if (plane->state->crtc != state->crtc || in mdp5_plane_atomic_async_check()
464 plane->state->src_w != state->src_w || in mdp5_plane_atomic_async_check()
465 plane->state->src_h != state->src_h || in mdp5_plane_atomic_async_check()
466 plane->state->crtc_w != state->crtc_w || in mdp5_plane_atomic_async_check()
467 plane->state->crtc_h != state->crtc_h || in mdp5_plane_atomic_async_check()
468 !plane->state->fb || in mdp5_plane_atomic_async_check()
469 plane->state->fb != state->fb) in mdp5_plane_atomic_async_check()
482 * if the visibility of the plane changes (i.e, if the cursor is in mdp5_plane_atomic_async_check()
484 * we need to stage/unstage the plane from the Layer Mixer(s). We in mdp5_plane_atomic_async_check()
485 * also assign/unassign the hwpipe(s) tied to the plane. We avoid in mdp5_plane_atomic_async_check()
488 if (state->visible != plane->state->visible) in mdp5_plane_atomic_async_check()
494 static void mdp5_plane_atomic_async_update(struct drm_plane *plane, in mdp5_plane_atomic_async_update() argument
497 struct drm_framebuffer *old_fb = plane->state->fb; in mdp5_plane_atomic_async_update()
499 plane->state->src_x = new_state->src_x; in mdp5_plane_atomic_async_update()
500 plane->state->src_y = new_state->src_y; in mdp5_plane_atomic_async_update()
501 plane->state->crtc_x = new_state->crtc_x; in mdp5_plane_atomic_async_update()
502 plane->state->crtc_y = new_state->crtc_y; in mdp5_plane_atomic_async_update()
510 ret = mdp5_plane_mode_set(plane, new_state->crtc, new_state->fb, in mdp5_plane_atomic_async_update()
516 mdp5_ctl_commit(ctl, pipeline, mdp5_plane_get_flush(plane), true); in mdp5_plane_atomic_async_update()
519 *to_mdp5_plane_state(plane->state) = in mdp5_plane_atomic_async_update()
645 static int calc_scalex_steps(struct drm_plane *plane, in calc_scalex_steps() argument
650 struct mdp5_kms *mdp5_kms = get_kms(plane); in calc_scalex_steps()
668 static int calc_scaley_steps(struct drm_plane *plane, in calc_scaley_steps() argument
673 struct mdp5_kms *mdp5_kms = get_kms(plane); in calc_scaley_steps()
913 static int mdp5_plane_mode_set(struct drm_plane *plane, in mdp5_plane_mode_set() argument
917 struct drm_plane_state *pstate = plane->state; in mdp5_plane_mode_set()
919 struct mdp5_kms *mdp5_kms = get_kms(plane); in mdp5_plane_mode_set()
965 DBG("%s: FB[%u] %u,%u,%u,%u -> CRTC[%u] %d,%d,%u,%u", plane->name, in mdp5_plane_mode_set()
972 * if the plane comprises of 2 hw pipes, assume that the width in mdp5_plane_mode_set()
981 ret = calc_scalex_steps(plane, pix_format, src_w, crtc_w, step.x); in mdp5_plane_mode_set()
985 ret = calc_scaley_steps(plane, pix_format, src_h, crtc_h, step.y); in mdp5_plane_mode_set()
1029 enum mdp5_pipe mdp5_plane_pipe(struct drm_plane *plane) in mdp5_plane_pipe() argument
1031 struct mdp5_plane_state *pstate = to_mdp5_plane_state(plane->state); in mdp5_plane_pipe()
1039 enum mdp5_pipe mdp5_plane_right_pipe(struct drm_plane *plane) in mdp5_plane_right_pipe() argument
1041 struct mdp5_plane_state *pstate = to_mdp5_plane_state(plane->state); in mdp5_plane_right_pipe()
1049 uint32_t mdp5_plane_get_flush(struct drm_plane *plane) in mdp5_plane_get_flush() argument
1051 struct mdp5_plane_state *pstate = to_mdp5_plane_state(plane->state); in mdp5_plane_get_flush()
1065 /* initialize plane */
1069 struct drm_plane *plane = NULL; in mdp5_plane_init() local
1079 plane = &mdp5_plane->base; in mdp5_plane_init()
1084 ret = drm_universal_plane_init(dev, plane, 0xff, &mdp5_plane_funcs, in mdp5_plane_init()
1090 drm_plane_helper_add(plane, &mdp5_plane_helper_funcs); in mdp5_plane_init()
1092 mdp5_plane_install_properties(plane, &plane->base); in mdp5_plane_init()
1094 drm_plane_enable_fb_damage_clips(plane); in mdp5_plane_init()
1096 return plane; in mdp5_plane_init()
1099 if (plane) in mdp5_plane_init()
1100 mdp5_plane_destroy(plane); in mdp5_plane_init()