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()
772 "plane doesn't have csc for yuv\n"); in dpu_plane_atomic_check_pipe()
811 DPU_DEBUG_PLANE(pdpu, "plane exceeds max mdp core clk limits\n"); in dpu_plane_atomic_check_pipe()
821 static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane, in dpu_plane_atomic_check_nosspp() argument
826 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check_nosspp()
843 DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret); in dpu_plane_atomic_check_nosspp()
851 DPU_ERROR("> %d plane stages assigned\n", in dpu_plane_atomic_check_nosspp()
874 DPU_ERROR_PLANE(pdpu, "failed to get format plane sizes, %d\n", ret); in dpu_plane_atomic_check_nosspp()
944 static int dpu_plane_atomic_check_sspp(struct drm_plane *plane, in dpu_plane_atomic_check_sspp() argument
949 drm_atomic_get_new_plane_state(state, plane); in dpu_plane_atomic_check_sspp()
950 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check_sspp()
1005 static int dpu_plane_atomic_check(struct drm_plane *plane, in dpu_plane_atomic_check() argument
1009 plane); in dpu_plane_atomic_check()
1011 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check()
1013 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_atomic_check()
1030 ret = dpu_plane_atomic_check_nosspp(plane, new_plane_state, crtc_state); in dpu_plane_atomic_check()
1049 return dpu_plane_atomic_check_sspp(plane, state, crtc_state); in dpu_plane_atomic_check()
1052 static int dpu_plane_virtual_atomic_check(struct drm_plane *plane, in dpu_plane_virtual_atomic_check() argument
1056 drm_atomic_get_plane_state(state, plane); in dpu_plane_virtual_atomic_check()
1058 drm_atomic_get_old_plane_state(state, plane); in dpu_plane_virtual_atomic_check()
1070 ret = dpu_plane_atomic_check_nosspp(plane, plane_state, crtc_state); in dpu_plane_virtual_atomic_check()
1088 * plane than the one used previously. in dpu_plane_virtual_atomic_check()
1108 struct drm_plane *plane = plane_state->plane; in dpu_plane_virtual_assign_resources() local
1109 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_virtual_assign_resources()
1161 return dpu_plane_atomic_check_sspp(plane, state, crtc_state); in dpu_plane_virtual_assign_resources()
1211 * dpu_plane_flush - final plane operations before commit flush
1212 * @plane: Pointer to drm plane structure
1214 void dpu_plane_flush(struct drm_plane *plane) in dpu_plane_flush() argument
1219 if (!plane || !plane->state) { in dpu_plane_flush()
1220 DPU_ERROR("invalid plane\n"); in dpu_plane_flush()
1224 pdpu = to_dpu_plane(plane); in dpu_plane_flush()
1225 pstate = to_dpu_plane_state(plane->state); in dpu_plane_flush()
1228 * These updates have to be done immediately before the plane flush in dpu_plane_flush()
1243 if (plane->state) in dpu_plane_flush()
1249 * @plane: pointer to drm_plane structure
1252 void dpu_plane_set_error(struct drm_plane *plane, bool error) in dpu_plane_set_error() argument
1256 if (!plane) in dpu_plane_set_error()
1259 pdpu = to_dpu_plane(plane); in dpu_plane_set_error()
1263 static void dpu_plane_sspp_update_pipe(struct drm_plane *plane, in dpu_plane_sspp_update_pipe() argument
1271 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_sspp_update_pipe()
1272 struct drm_plane_state *state = plane->state; in dpu_plane_sspp_update_pipe()
1282 _dpu_plane_set_qos_ctrl(plane, pipe, false); in dpu_plane_sspp_update_pipe()
1324 _dpu_plane_set_qos_lut(plane, pipe, fmt, pipe_cfg); in dpu_plane_sspp_update_pipe()
1328 _dpu_plane_set_ot_limit(plane, pipe, pipe_cfg, frame_rate); in dpu_plane_sspp_update_pipe()
1331 _dpu_plane_set_qos_remap(plane, pipe); in dpu_plane_sspp_update_pipe()
1334 static void dpu_plane_sspp_atomic_update(struct drm_plane *plane, in dpu_plane_sspp_atomic_update() argument
1337 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_sspp_atomic_update()
1338 struct drm_plane_state *state = plane->state; in dpu_plane_sspp_atomic_update()
1363 dpu_plane_sspp_update_pipe(plane, pipe, pipe_cfg, fmt, in dpu_plane_sspp_atomic_update()
1368 dpu_plane_sspp_update_pipe(plane, r_pipe, r_pipe_cfg, fmt, in dpu_plane_sspp_atomic_update()
1388 static void _dpu_plane_atomic_disable(struct drm_plane *plane) in _dpu_plane_atomic_disable() argument
1390 struct drm_plane_state *state = plane->state; in _dpu_plane_atomic_disable()
1394 trace_dpu_plane_disable(DRMID(plane), false, in _dpu_plane_atomic_disable()
1408 static void dpu_plane_atomic_update(struct drm_plane *plane, in dpu_plane_atomic_update() argument
1411 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_update()
1413 plane); in dpu_plane_atomic_update()
1420 _dpu_plane_atomic_disable(plane); in dpu_plane_atomic_update()
1422 dpu_plane_sspp_atomic_update(plane, new_state); in dpu_plane_atomic_update()
1426 static void dpu_plane_destroy_state(struct drm_plane *plane, in dpu_plane_destroy_state() argument
1434 dpu_plane_duplicate_state(struct drm_plane *plane) in dpu_plane_duplicate_state() argument
1440 if (!plane) { in dpu_plane_duplicate_state()
1441 DPU_ERROR("invalid plane\n"); in dpu_plane_duplicate_state()
1443 } else if (!plane->state) { in dpu_plane_duplicate_state()
1444 DPU_ERROR("invalid plane state\n"); in dpu_plane_duplicate_state()
1448 old_state = to_dpu_plane_state(plane->state); in dpu_plane_duplicate_state()
1449 pdpu = to_dpu_plane(plane); in dpu_plane_duplicate_state()
1460 __drm_atomic_helper_plane_duplicate_state(plane, &pstate->base); in dpu_plane_duplicate_state()
1525 static void dpu_plane_reset(struct drm_plane *plane) in dpu_plane_reset() argument
1530 if (!plane) { in dpu_plane_reset()
1531 DPU_ERROR("invalid plane\n"); in dpu_plane_reset()
1535 pdpu = to_dpu_plane(plane); in dpu_plane_reset()
1539 if (plane->state) { in dpu_plane_reset()
1540 dpu_plane_destroy_state(plane, plane->state); in dpu_plane_reset()
1541 plane->state = NULL; in dpu_plane_reset()
1550 __drm_atomic_helper_plane_reset(plane, &pstate->base); in dpu_plane_reset()
1554 void dpu_plane_danger_signal_ctrl(struct drm_plane *plane, bool enable) in dpu_plane_danger_signal_ctrl() argument
1556 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_danger_signal_ctrl()
1557 struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state); in dpu_plane_danger_signal_ctrl()
1558 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_danger_signal_ctrl()
1564 _dpu_plane_set_qos_ctrl(plane, &pstate->pipe, enable); in dpu_plane_danger_signal_ctrl()
1566 _dpu_plane_set_qos_ctrl(plane, &pstate->r_pipe, enable); in dpu_plane_danger_signal_ctrl()
1571 static bool dpu_plane_format_mod_supported(struct drm_plane *plane, in dpu_plane_format_mod_supported() argument
1574 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_format_mod_supported()
1612 /* initialize plane */
1621 struct drm_plane *plane = NULL; in dpu_plane_init_common() local
1636 plane = &pdpu->base; in dpu_plane_init_common()
1641 ret = drm_plane_create_zpos_property(plane, 0, 0, DPU_ZPOS_MAX); in dpu_plane_init_common()
1645 drm_plane_create_alpha_property(plane); in dpu_plane_init_common()
1646 drm_plane_create_blend_mode_property(plane, in dpu_plane_init_common()
1656 drm_plane_create_rotation_property(plane, in dpu_plane_init_common()
1659 drm_plane_enable_fb_damage_clips(plane); in dpu_plane_init_common()
1661 DPU_DEBUG("%s created for pipe:%u id:%u\n", plane->name, in dpu_plane_init_common()
1662 pipe, plane->base.id); in dpu_plane_init_common()
1663 return plane; in dpu_plane_init_common()
1667 * dpu_plane_init - create new dpu plane for the given pipe
1670 * @type: Plane type - PRIMARY/OVERLAY/CURSOR
1673 * Initialize the plane.
1679 struct drm_plane *plane = NULL; in dpu_plane_init() local
1692 plane = dpu_plane_init_common(dev, type, possible_crtcs, in dpu_plane_init()
1697 if (IS_ERR(plane)) in dpu_plane_init()
1698 return plane; in dpu_plane_init()
1700 drm_plane_helper_add(plane, &dpu_plane_helper_funcs); in dpu_plane_init()
1702 DPU_DEBUG("%s created for pipe:%u id:%u\n", plane->name, in dpu_plane_init()
1703 pipe, plane->base.id); in dpu_plane_init()
1705 return plane; in dpu_plane_init()
1709 * dpu_plane_init_virtual - create new virtualized DPU plane
1711 * @type: Plane type - PRIMARY/OVERLAY/CURSOR
1714 * Initialize the virtual plane with no backing SSPP / pipe.
1720 struct drm_plane *plane = NULL; in dpu_plane_init_virtual() local
1742 plane = dpu_plane_init_common(dev, type, possible_crtcs, in dpu_plane_init_virtual()
1747 if (IS_ERR(plane)) in dpu_plane_init_virtual()
1748 return plane; in dpu_plane_init_virtual()
1750 drm_plane_helper_add(plane, &dpu_plane_virtual_helper_funcs); in dpu_plane_init_virtual()
1752 DPU_DEBUG("%s created virtual id:%u\n", plane->name, plane->base.id); in dpu_plane_init_virtual()
1754 return plane; in dpu_plane_init_virtual()