Lines Matching full:plane
30 #define DPU_DEBUG_PLANE(pl, fmt, ...) DRM_DEBUG_ATOMIC("plane%d " fmt,\
33 #define DPU_ERROR_PLANE(pl, fmt, ...) DPU_ERROR("plane%d " fmt,\
73 * struct dpu_plane - local dpu plane structure
77 * @revalidate: force revalidation of all the plane properties
98 static struct dpu_kms *_dpu_plane_get_kms(struct drm_plane *plane) in _dpu_plane_get_kms() argument
100 struct msm_drm_private *priv = plane->dev->dev_private; in _dpu_plane_get_kms()
106 * _dpu_plane_calc_bw - calculate bandwidth required for a plane
111 * Result: Updates calculated bandwidth in the plane state.
158 * _dpu_plane_calc_clk - calculate clock required for a plane
161 * Result: Updates calculated clock in the plane state.
188 * @plane: Pointer to drm plane
195 static int _dpu_plane_calc_fill_level(struct drm_plane *plane, in _dpu_plane_calc_fill_level() argument
212 pdpu = to_dpu_plane(plane); in _dpu_plane_calc_fill_level()
246 * _dpu_plane_set_qos_lut - set QoS LUT of the given plane
247 * @plane: Pointer to drm plane
252 static void _dpu_plane_set_qos_lut(struct drm_plane *plane, in _dpu_plane_set_qos_lut() argument
256 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_lut()
269 total_fl = _dpu_plane_calc_fill_level(plane, pipe, lut_usage, fmt, in _dpu_plane_set_qos_lut()
312 * _dpu_plane_set_qos_ctrl - set QoS control of the given plane
313 * @plane: Pointer to drm plane
317 static void _dpu_plane_set_qos_ctrl(struct drm_plane *plane, in _dpu_plane_set_qos_ctrl() argument
321 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_ctrl()
353 * _dpu_plane_set_ot_limit - set OT limit for the given plane
354 * @plane: Pointer to drm plane
359 static void _dpu_plane_set_ot_limit(struct drm_plane *plane, in _dpu_plane_set_ot_limit() argument
364 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_ot_limit()
366 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_set_ot_limit()
391 * _dpu_plane_set_qos_remap - set vbif QoS for the given plane
392 * @plane: Pointer to drm plane
395 static void _dpu_plane_set_qos_remap(struct drm_plane *plane, in _dpu_plane_set_qos_remap() argument
398 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_remap()
400 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_set_qos_remap()
609 * _dpu_plane_color_fill - enables color fill on plane
610 * @pdpu: Pointer to DPU plane object
618 const struct drm_plane *plane = &pdpu->base; in _dpu_plane_color_fill() local
619 struct msm_drm_private *priv = plane->dev->dev_private; in _dpu_plane_color_fill()
620 struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state); in _dpu_plane_color_fill()
643 static int dpu_plane_prepare_fb(struct drm_plane *plane, in dpu_plane_prepare_fb() argument
647 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_prepare_fb()
665 drm_gem_plane_helper_prepare_fb(plane, new_state); in dpu_plane_prepare_fb()
679 static void dpu_plane_cleanup_fb(struct drm_plane *plane, in dpu_plane_cleanup_fb() argument
682 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_cleanup_fb()
744 "plane doesn't have csc for yuv\n"); in dpu_plane_atomic_check_pipe()
783 DPU_DEBUG_PLANE(pdpu, "plane exceeds max mdp core clk limits\n"); in dpu_plane_atomic_check_pipe()
793 static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane, in dpu_plane_atomic_check_nosspp() argument
798 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check_nosspp()
815 DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret); in dpu_plane_atomic_check_nosspp()
823 DPU_ERROR("> %d plane stages assigned\n", in dpu_plane_atomic_check_nosspp()
846 DPU_ERROR_PLANE(pdpu, "failed to get format plane sizes, %d\n", ret); in dpu_plane_atomic_check_nosspp()
916 static int dpu_plane_atomic_check_sspp(struct drm_plane *plane, in dpu_plane_atomic_check_sspp() argument
921 drm_atomic_get_new_plane_state(state, plane); in dpu_plane_atomic_check_sspp()
922 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check_sspp()
1004 static int dpu_plane_atomic_check(struct drm_plane *plane, in dpu_plane_atomic_check() argument
1008 plane); in dpu_plane_atomic_check()
1010 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check()
1012 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_atomic_check()
1029 ret = dpu_plane_atomic_check_nosspp(plane, new_plane_state, crtc_state); in dpu_plane_atomic_check()
1048 return dpu_plane_atomic_check_sspp(plane, state, crtc_state); in dpu_plane_atomic_check()
1051 static int dpu_plane_virtual_atomic_check(struct drm_plane *plane, in dpu_plane_virtual_atomic_check() argument
1055 drm_atomic_get_plane_state(state, plane); in dpu_plane_virtual_atomic_check()
1057 drm_atomic_get_old_plane_state(state, plane); in dpu_plane_virtual_atomic_check()
1069 ret = dpu_plane_atomic_check_nosspp(plane, plane_state, crtc_state); in dpu_plane_virtual_atomic_check()
1087 * plane than the one used previously. in dpu_plane_virtual_atomic_check()
1107 struct drm_plane *plane = plane_state->plane; in dpu_plane_virtual_assign_resources() local
1108 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_virtual_assign_resources()
1160 return dpu_plane_atomic_check_sspp(plane, state, crtc_state); in dpu_plane_virtual_assign_resources()
1210 * dpu_plane_flush - final plane operations before commit flush
1211 * @plane: Pointer to drm plane structure
1213 void dpu_plane_flush(struct drm_plane *plane) in dpu_plane_flush() argument
1218 if (!plane || !plane->state) { in dpu_plane_flush()
1219 DPU_ERROR("invalid plane\n"); in dpu_plane_flush()
1223 pdpu = to_dpu_plane(plane); in dpu_plane_flush()
1224 pstate = to_dpu_plane_state(plane->state); in dpu_plane_flush()
1227 * These updates have to be done immediately before the plane flush in dpu_plane_flush()
1242 if (plane->state) in dpu_plane_flush()
1248 * @plane: pointer to drm_plane structure
1251 void dpu_plane_set_error(struct drm_plane *plane, bool error) in dpu_plane_set_error() argument
1255 if (!plane) in dpu_plane_set_error()
1258 pdpu = to_dpu_plane(plane); in dpu_plane_set_error()
1262 static void dpu_plane_sspp_update_pipe(struct drm_plane *plane, in dpu_plane_sspp_update_pipe() argument
1270 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_sspp_update_pipe()
1271 struct drm_plane_state *state = plane->state; in dpu_plane_sspp_update_pipe()
1281 _dpu_plane_set_qos_ctrl(plane, pipe, false); in dpu_plane_sspp_update_pipe()
1323 _dpu_plane_set_qos_lut(plane, pipe, fmt, pipe_cfg); in dpu_plane_sspp_update_pipe()
1327 _dpu_plane_set_ot_limit(plane, pipe, pipe_cfg, frame_rate); in dpu_plane_sspp_update_pipe()
1330 _dpu_plane_set_qos_remap(plane, pipe); in dpu_plane_sspp_update_pipe()
1333 static void dpu_plane_sspp_atomic_update(struct drm_plane *plane, in dpu_plane_sspp_atomic_update() argument
1336 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_sspp_atomic_update()
1337 struct drm_plane_state *state = plane->state; in dpu_plane_sspp_atomic_update()
1362 dpu_plane_sspp_update_pipe(plane, pipe, pipe_cfg, fmt, in dpu_plane_sspp_atomic_update()
1367 dpu_plane_sspp_update_pipe(plane, r_pipe, r_pipe_cfg, fmt, in dpu_plane_sspp_atomic_update()
1387 static void _dpu_plane_atomic_disable(struct drm_plane *plane) in _dpu_plane_atomic_disable() argument
1389 struct drm_plane_state *state = plane->state; in _dpu_plane_atomic_disable()
1393 trace_dpu_plane_disable(DRMID(plane), false, in _dpu_plane_atomic_disable()
1407 static void dpu_plane_atomic_update(struct drm_plane *plane, in dpu_plane_atomic_update() argument
1410 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_update()
1412 plane); in dpu_plane_atomic_update()
1419 _dpu_plane_atomic_disable(plane); in dpu_plane_atomic_update()
1421 dpu_plane_sspp_atomic_update(plane, new_state); in dpu_plane_atomic_update()
1425 static void dpu_plane_destroy_state(struct drm_plane *plane, in dpu_plane_destroy_state() argument
1433 dpu_plane_duplicate_state(struct drm_plane *plane) in dpu_plane_duplicate_state() argument
1439 if (!plane) { in dpu_plane_duplicate_state()
1440 DPU_ERROR("invalid plane\n"); in dpu_plane_duplicate_state()
1442 } else if (!plane->state) { in dpu_plane_duplicate_state()
1443 DPU_ERROR("invalid plane state\n"); in dpu_plane_duplicate_state()
1447 old_state = to_dpu_plane_state(plane->state); in dpu_plane_duplicate_state()
1448 pdpu = to_dpu_plane(plane); in dpu_plane_duplicate_state()
1459 __drm_atomic_helper_plane_duplicate_state(plane, &pstate->base); in dpu_plane_duplicate_state()
1524 static void dpu_plane_reset(struct drm_plane *plane) in dpu_plane_reset() argument
1529 if (!plane) { in dpu_plane_reset()
1530 DPU_ERROR("invalid plane\n"); in dpu_plane_reset()
1534 pdpu = to_dpu_plane(plane); in dpu_plane_reset()
1538 if (plane->state) { in dpu_plane_reset()
1539 dpu_plane_destroy_state(plane, plane->state); in dpu_plane_reset()
1540 plane->state = NULL; in dpu_plane_reset()
1549 __drm_atomic_helper_plane_reset(plane, &pstate->base); in dpu_plane_reset()
1553 void dpu_plane_danger_signal_ctrl(struct drm_plane *plane, bool enable) in dpu_plane_danger_signal_ctrl() argument
1555 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_danger_signal_ctrl()
1556 struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state); in dpu_plane_danger_signal_ctrl()
1557 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_danger_signal_ctrl()
1563 _dpu_plane_set_qos_ctrl(plane, &pstate->pipe, enable); in dpu_plane_danger_signal_ctrl()
1565 _dpu_plane_set_qos_ctrl(plane, &pstate->r_pipe, enable); in dpu_plane_danger_signal_ctrl()
1570 static bool dpu_plane_format_mod_supported(struct drm_plane *plane, in dpu_plane_format_mod_supported() argument
1573 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_format_mod_supported()
1611 /* initialize plane */
1620 struct drm_plane *plane = NULL; in dpu_plane_init_common() local
1635 plane = &pdpu->base; in dpu_plane_init_common()
1640 ret = drm_plane_create_zpos_property(plane, 0, 0, DPU_ZPOS_MAX); in dpu_plane_init_common()
1644 drm_plane_create_alpha_property(plane); in dpu_plane_init_common()
1645 drm_plane_create_blend_mode_property(plane, in dpu_plane_init_common()
1655 drm_plane_create_rotation_property(plane, in dpu_plane_init_common()
1658 drm_plane_enable_fb_damage_clips(plane); in dpu_plane_init_common()
1660 DPU_DEBUG("%s created for pipe:%u id:%u\n", plane->name, in dpu_plane_init_common()
1661 pipe, plane->base.id); in dpu_plane_init_common()
1662 return plane; in dpu_plane_init_common()
1666 * dpu_plane_init - create new dpu plane for the given pipe
1669 * @type: Plane type - PRIMARY/OVERLAY/CURSOR
1672 * Initialize the plane.
1678 struct drm_plane *plane = NULL; in dpu_plane_init() local
1691 plane = dpu_plane_init_common(dev, type, possible_crtcs, in dpu_plane_init()
1696 if (IS_ERR(plane)) in dpu_plane_init()
1697 return plane; in dpu_plane_init()
1699 drm_plane_helper_add(plane, &dpu_plane_helper_funcs); in dpu_plane_init()
1701 DPU_DEBUG("%s created for pipe:%u id:%u\n", plane->name, in dpu_plane_init()
1702 pipe, plane->base.id); in dpu_plane_init()
1704 return plane; in dpu_plane_init()
1708 * dpu_plane_init_virtual - create new virtualized DPU plane
1710 * @type: Plane type - PRIMARY/OVERLAY/CURSOR
1713 * Initialize the virtual plane with no backing SSPP / pipe.
1719 struct drm_plane *plane = NULL; in dpu_plane_init_virtual() local
1741 plane = dpu_plane_init_common(dev, type, possible_crtcs, in dpu_plane_init_virtual()
1746 if (IS_ERR(plane)) in dpu_plane_init_virtual()
1747 return plane; in dpu_plane_init_virtual()
1749 drm_plane_helper_add(plane, &dpu_plane_virtual_helper_funcs); in dpu_plane_init_virtual()
1751 DPU_DEBUG("%s created virtual id:%u\n", plane->name, plane->base.id); in dpu_plane_init_virtual()
1753 return plane; in dpu_plane_init_virtual()