Lines Matching full:plane
31 #define DPU_DEBUG_PLANE(pl, fmt, ...) DRM_DEBUG_ATOMIC("plane%d " fmt,\
34 #define DPU_ERROR_PLANE(pl, fmt, ...) DPU_ERROR("plane%d " fmt,\
74 * struct dpu_plane - local dpu plane structure
78 * @revalidate: force revalidation of all the plane properties
99 static struct dpu_kms *_dpu_plane_get_kms(struct drm_plane *plane) in _dpu_plane_get_kms() argument
101 struct msm_drm_private *priv = plane->dev->dev_private; in _dpu_plane_get_kms()
107 * _dpu_plane_calc_bw - calculate bandwidth required for a plane
112 * Result: Updates calculated bandwidth in the plane state.
159 * _dpu_plane_calc_clk - calculate clock required for a plane
162 * Result: Updates calculated clock in the plane state.
189 * @plane: Pointer to drm plane
196 static int _dpu_plane_calc_fill_level(struct drm_plane *plane, in _dpu_plane_calc_fill_level() argument
213 pdpu = to_dpu_plane(plane); in _dpu_plane_calc_fill_level()
247 * _dpu_plane_set_qos_lut - set QoS LUT of the given plane
248 * @plane: Pointer to drm plane
253 static void _dpu_plane_set_qos_lut(struct drm_plane *plane, in _dpu_plane_set_qos_lut() argument
257 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_lut()
270 total_fl = _dpu_plane_calc_fill_level(plane, pipe, lut_usage, fmt, in _dpu_plane_set_qos_lut()
313 * _dpu_plane_set_qos_ctrl - set QoS control of the given plane
314 * @plane: Pointer to drm plane
318 static void _dpu_plane_set_qos_ctrl(struct drm_plane *plane, in _dpu_plane_set_qos_ctrl() argument
322 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_ctrl()
354 * _dpu_plane_set_ot_limit - set OT limit for the given plane
355 * @plane: Pointer to drm plane
360 static void _dpu_plane_set_ot_limit(struct drm_plane *plane, in _dpu_plane_set_ot_limit() argument
365 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_ot_limit()
367 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_set_ot_limit()
392 * _dpu_plane_set_qos_remap - set vbif QoS for the given plane
393 * @plane: Pointer to drm plane
396 static void _dpu_plane_set_qos_remap(struct drm_plane *plane, in _dpu_plane_set_qos_remap() argument
399 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_remap()
401 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_set_qos_remap()
610 * _dpu_plane_color_fill - enables color fill on plane
611 * @pdpu: Pointer to DPU plane object
619 const struct drm_plane *plane = &pdpu->base; in _dpu_plane_color_fill() local
620 struct msm_drm_private *priv = plane->dev->dev_private; in _dpu_plane_color_fill()
621 struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state); in _dpu_plane_color_fill()
644 static int dpu_plane_prepare_fb(struct drm_plane *plane, in dpu_plane_prepare_fb() argument
648 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_prepare_fb()
662 drm_gem_plane_helper_prepare_fb(plane, new_state); in dpu_plane_prepare_fb()
673 static void dpu_plane_cleanup_fb(struct drm_plane *plane, in dpu_plane_cleanup_fb() argument
676 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_cleanup_fb()
765 "plane doesn't have csc for yuv\n"); in dpu_plane_atomic_check_pipe()
804 DPU_DEBUG_PLANE(pdpu, "plane exceeds max mdp core clk limits\n"); in dpu_plane_atomic_check_pipe()
814 static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane, in dpu_plane_atomic_check_nosspp() argument
819 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check_nosspp()
836 DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret); in dpu_plane_atomic_check_nosspp()
844 DPU_ERROR("> %d plane stages assigned\n", in dpu_plane_atomic_check_nosspp()
867 DPU_ERROR_PLANE(pdpu, "failed to get format plane sizes, %d\n", ret); in dpu_plane_atomic_check_nosspp()
953 static int dpu_plane_atomic_check_sspp(struct drm_plane *plane, in dpu_plane_atomic_check_sspp() argument
958 drm_atomic_get_new_plane_state(state, plane); in dpu_plane_atomic_check_sspp()
959 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check_sspp()
1077 static int dpu_plane_atomic_check(struct drm_plane *plane, in dpu_plane_atomic_check() argument
1081 plane); in dpu_plane_atomic_check()
1083 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check()
1085 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_atomic_check()
1102 ret = dpu_plane_atomic_check_nosspp(plane, new_plane_state, crtc_state); in dpu_plane_atomic_check()
1121 return dpu_plane_atomic_check_sspp(plane, state, crtc_state); in dpu_plane_atomic_check()
1124 static int dpu_plane_virtual_atomic_check(struct drm_plane *plane, in dpu_plane_virtual_atomic_check() argument
1128 drm_atomic_get_plane_state(state, plane); in dpu_plane_virtual_atomic_check()
1130 drm_atomic_get_old_plane_state(state, plane); in dpu_plane_virtual_atomic_check()
1142 ret = dpu_plane_atomic_check_nosspp(plane, plane_state, crtc_state); in dpu_plane_virtual_atomic_check()
1160 * plane than the one used previously. in dpu_plane_virtual_atomic_check()
1181 struct drm_plane *plane = plane_state->plane; in dpu_plane_virtual_assign_resources() local
1182 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_virtual_assign_resources()
1254 return dpu_plane_atomic_check_sspp(plane, state, crtc_state); in dpu_plane_virtual_assign_resources()
1308 * dpu_plane_flush - final plane operations before commit flush
1309 * @plane: Pointer to drm plane structure
1311 void dpu_plane_flush(struct drm_plane *plane) in dpu_plane_flush() argument
1316 if (!plane || !plane->state) { in dpu_plane_flush()
1317 DPU_ERROR("invalid plane\n"); in dpu_plane_flush()
1321 pdpu = to_dpu_plane(plane); in dpu_plane_flush()
1322 pstate = to_dpu_plane_state(plane->state); in dpu_plane_flush()
1325 * These updates have to be done immediately before the plane flush in dpu_plane_flush()
1340 if (plane->state) in dpu_plane_flush()
1346 * @plane: pointer to drm_plane structure
1349 void dpu_plane_set_error(struct drm_plane *plane, bool error) in dpu_plane_set_error() argument
1353 if (!plane) in dpu_plane_set_error()
1356 pdpu = to_dpu_plane(plane); in dpu_plane_set_error()
1360 static void dpu_plane_sspp_update_pipe(struct drm_plane *plane, in dpu_plane_sspp_update_pipe() argument
1368 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_sspp_update_pipe()
1369 struct drm_plane_state *state = plane->state; in dpu_plane_sspp_update_pipe()
1379 _dpu_plane_set_qos_ctrl(plane, pipe, false); in dpu_plane_sspp_update_pipe()
1421 _dpu_plane_set_qos_lut(plane, pipe, fmt, pipe_cfg); in dpu_plane_sspp_update_pipe()
1425 _dpu_plane_set_ot_limit(plane, pipe, pipe_cfg, frame_rate); in dpu_plane_sspp_update_pipe()
1428 _dpu_plane_set_qos_remap(plane, pipe); in dpu_plane_sspp_update_pipe()
1431 static void dpu_plane_sspp_atomic_update(struct drm_plane *plane, in dpu_plane_sspp_atomic_update() argument
1434 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_sspp_atomic_update()
1435 struct drm_plane_state *state = plane->state; in dpu_plane_sspp_atomic_update()
1460 dpu_plane_sspp_update_pipe(plane, pipe, pipe_cfg, fmt, in dpu_plane_sspp_atomic_update()
1465 dpu_plane_sspp_update_pipe(plane, r_pipe, r_pipe_cfg, fmt, in dpu_plane_sspp_atomic_update()
1485 static void _dpu_plane_atomic_disable(struct drm_plane *plane) in _dpu_plane_atomic_disable() argument
1487 struct drm_plane_state *state = plane->state; in _dpu_plane_atomic_disable()
1491 trace_dpu_plane_disable(DRMID(plane), false, in _dpu_plane_atomic_disable()
1505 static void dpu_plane_atomic_update(struct drm_plane *plane, in dpu_plane_atomic_update() argument
1508 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_update()
1510 plane); in dpu_plane_atomic_update()
1517 _dpu_plane_atomic_disable(plane); in dpu_plane_atomic_update()
1519 dpu_plane_sspp_atomic_update(plane, new_state); in dpu_plane_atomic_update()
1523 static void dpu_plane_destroy_state(struct drm_plane *plane, in dpu_plane_destroy_state() argument
1531 dpu_plane_duplicate_state(struct drm_plane *plane) in dpu_plane_duplicate_state() argument
1537 if (!plane) { in dpu_plane_duplicate_state()
1538 DPU_ERROR("invalid plane\n"); in dpu_plane_duplicate_state()
1540 } else if (!plane->state) { in dpu_plane_duplicate_state()
1541 DPU_ERROR("invalid plane state\n"); in dpu_plane_duplicate_state()
1545 old_state = to_dpu_plane_state(plane->state); in dpu_plane_duplicate_state()
1546 pdpu = to_dpu_plane(plane); in dpu_plane_duplicate_state()
1557 __drm_atomic_helper_plane_duplicate_state(plane, &pstate->base); in dpu_plane_duplicate_state()
1622 static void dpu_plane_reset(struct drm_plane *plane) in dpu_plane_reset() argument
1627 if (!plane) { in dpu_plane_reset()
1628 DPU_ERROR("invalid plane\n"); in dpu_plane_reset()
1632 pdpu = to_dpu_plane(plane); in dpu_plane_reset()
1636 if (plane->state) { in dpu_plane_reset()
1637 dpu_plane_destroy_state(plane, plane->state); in dpu_plane_reset()
1638 plane->state = NULL; in dpu_plane_reset()
1647 __drm_atomic_helper_plane_reset(plane, &pstate->base); in dpu_plane_reset()
1651 void dpu_plane_danger_signal_ctrl(struct drm_plane *plane, bool enable) in dpu_plane_danger_signal_ctrl() argument
1653 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_danger_signal_ctrl()
1654 struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state); in dpu_plane_danger_signal_ctrl()
1655 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_danger_signal_ctrl()
1661 _dpu_plane_set_qos_ctrl(plane, &pstate->pipe, enable); in dpu_plane_danger_signal_ctrl()
1663 _dpu_plane_set_qos_ctrl(plane, &pstate->r_pipe, enable); in dpu_plane_danger_signal_ctrl()
1668 static bool dpu_plane_format_mod_supported(struct drm_plane *plane, in dpu_plane_format_mod_supported() argument
1671 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_format_mod_supported()
1709 /* initialize plane */
1718 struct drm_plane *plane = NULL; in dpu_plane_init_common() local
1733 plane = &pdpu->base; in dpu_plane_init_common()
1738 ret = drm_plane_create_zpos_property(plane, 0, 0, DPU_ZPOS_MAX); in dpu_plane_init_common()
1742 drm_plane_create_alpha_property(plane); in dpu_plane_init_common()
1743 drm_plane_create_blend_mode_property(plane, in dpu_plane_init_common()
1753 drm_plane_create_rotation_property(plane, in dpu_plane_init_common()
1756 drm_plane_enable_fb_damage_clips(plane); in dpu_plane_init_common()
1758 DPU_DEBUG("%s created for pipe:%u id:%u\n", plane->name, in dpu_plane_init_common()
1759 pipe, plane->base.id); in dpu_plane_init_common()
1760 return plane; in dpu_plane_init_common()
1764 * dpu_plane_init - create new dpu plane for the given pipe
1767 * @type: Plane type - PRIMARY/OVERLAY/CURSOR
1770 * Initialize the plane.
1776 struct drm_plane *plane = NULL; in dpu_plane_init() local
1789 plane = dpu_plane_init_common(dev, type, possible_crtcs, in dpu_plane_init()
1794 if (IS_ERR(plane)) in dpu_plane_init()
1795 return plane; in dpu_plane_init()
1797 drm_plane_helper_add(plane, &dpu_plane_helper_funcs); in dpu_plane_init()
1799 DPU_DEBUG("%s created for pipe:%u id:%u\n", plane->name, in dpu_plane_init()
1800 pipe, plane->base.id); in dpu_plane_init()
1802 return plane; in dpu_plane_init()
1806 * dpu_plane_init_virtual - create new virtualized DPU plane
1808 * @type: Plane type - PRIMARY/OVERLAY/CURSOR
1811 * Initialize the virtual plane with no backing SSPP / pipe.
1817 struct drm_plane *plane = NULL; in dpu_plane_init_virtual() local
1839 plane = dpu_plane_init_common(dev, type, possible_crtcs, in dpu_plane_init_virtual()
1844 if (IS_ERR(plane)) in dpu_plane_init_virtual()
1845 return plane; in dpu_plane_init_virtual()
1847 drm_plane_helper_add(plane, &dpu_plane_virtual_helper_funcs); in dpu_plane_init_virtual()
1849 DPU_DEBUG("%s created virtual id:%u\n", plane->name, plane->base.id); in dpu_plane_init_virtual()
1851 return plane; in dpu_plane_init_virtual()