Lines Matching full:plane
29 #define DPU_DEBUG_PLANE(pl, fmt, ...) DRM_DEBUG_ATOMIC("plane%d " fmt,\
32 #define DPU_ERROR_PLANE(pl, fmt, ...) DPU_ERROR("plane%d " fmt,\
92 * struct dpu_plane - local dpu plane structure
96 * @revalidate: force revalidation of all the plane properties
120 static struct dpu_kms *_dpu_plane_get_kms(struct drm_plane *plane) in _dpu_plane_get_kms() argument
122 struct msm_drm_private *priv = plane->dev->dev_private; in _dpu_plane_get_kms()
128 * _dpu_plane_calc_bw - calculate bandwidth required for a plane
129 * @plane: Pointer to drm plane.
130 * @fb: Pointer to framebuffer associated with the given plane
132 * Result: Updates calculated bandwidth in the plane state.
136 static void _dpu_plane_calc_bw(struct drm_plane *plane, in _dpu_plane_calc_bw() argument
143 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_calc_bw()
151 pstate = to_dpu_plane_state(plane->state); in _dpu_plane_calc_bw()
152 mode = &plane->state->crtc->mode; in _dpu_plane_calc_bw()
187 * _dpu_plane_calc_clk - calculate clock required for a plane
188 * @plane: Pointer to drm plane.
190 * Result: Updates calculated clock in the plane state.
193 static void _dpu_plane_calc_clk(struct drm_plane *plane, struct dpu_hw_pipe_cfg *pipe_cfg) in _dpu_plane_calc_clk() argument
199 pstate = to_dpu_plane_state(plane->state); in _dpu_plane_calc_clk()
200 mode = &plane->state->crtc->mode; in _dpu_plane_calc_clk()
218 * @plane: Pointer to drm plane
223 static int _dpu_plane_calc_fill_level(struct drm_plane *plane, in _dpu_plane_calc_fill_level() argument
231 if (!fmt || !plane->state || !src_width || !fmt->bpp) { in _dpu_plane_calc_fill_level()
236 pdpu = to_dpu_plane(plane); in _dpu_plane_calc_fill_level()
237 pstate = to_dpu_plane_state(plane->state); in _dpu_plane_calc_fill_level()
271 * _dpu_plane_set_qos_lut - set QoS LUT of the given plane
272 * @plane: Pointer to drm plane
273 * @fb: Pointer to framebuffer associated with the given plane
276 static void _dpu_plane_set_qos_lut(struct drm_plane *plane, in _dpu_plane_set_qos_lut() argument
279 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_lut()
290 total_fl = _dpu_plane_calc_fill_level(plane, fmt, in _dpu_plane_set_qos_lut()
315 * _dpu_plane_set_danger_lut - set danger/safe LUT of the given plane
316 * @plane: Pointer to drm plane
317 * @fb: Pointer to framebuffer associated with the given plane
319 static void _dpu_plane_set_danger_lut(struct drm_plane *plane, in _dpu_plane_set_danger_lut() argument
322 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_danger_lut()
367 * _dpu_plane_set_qos_ctrl - set QoS control of the given plane
368 * @plane: Pointer to drm plane
372 static void _dpu_plane_set_qos_ctrl(struct drm_plane *plane, in _dpu_plane_set_qos_ctrl() argument
375 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_ctrl()
414 * _dpu_plane_set_ot_limit - set OT limit for the given plane
415 * @plane: Pointer to drm plane
419 static void _dpu_plane_set_ot_limit(struct drm_plane *plane, in _dpu_plane_set_ot_limit() argument
422 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_ot_limit()
424 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_set_ot_limit()
441 * _dpu_plane_set_qos_remap - set vbif QoS for the given plane
442 * @plane: Pointer to drm plane
444 static void _dpu_plane_set_qos_remap(struct drm_plane *plane) in _dpu_plane_set_qos_remap() argument
446 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_remap()
448 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_set_qos_remap()
466 static void _dpu_plane_set_scanout(struct drm_plane *plane, in _dpu_plane_set_scanout() argument
471 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_scanout()
613 DPU_ERROR("invalid plane\n"); in _dpu_plane_get_csc()
680 * _dpu_plane_color_fill - enables color fill on plane
681 * @pdpu: Pointer to DPU plane object
690 const struct drm_plane *plane = &pdpu->base; in _dpu_plane_color_fill() local
691 struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state); in _dpu_plane_color_fill()
742 int dpu_plane_validate_multirect_v2(struct dpu_multirect_plane_states *plane) in dpu_plane_validate_multirect_v2() argument
757 drm_state[i] = i ? plane->r1 : plane->r0; in dpu_plane_validate_multirect_v2()
772 dpu_plane[i] = to_dpu_plane(drm_state[i]->plane); in dpu_plane_validate_multirect_v2()
775 DPU_ERROR("DPU plane state of plane id %d is NULL\n", in dpu_plane_validate_multirect_v2()
776 drm_state[i]->plane->base.id); in dpu_plane_validate_multirect_v2()
837 drm_state[R0]->plane->base.id, in dpu_plane_validate_multirect_v2()
838 drm_state[R1]->plane->base.id); in dpu_plane_validate_multirect_v2()
853 static int dpu_plane_prepare_fb(struct drm_plane *plane, in dpu_plane_prepare_fb() argument
857 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_prepare_fb()
876 drm_gem_plane_helper_prepare_fb(plane, new_state); in dpu_plane_prepare_fb()
898 static void dpu_plane_cleanup_fb(struct drm_plane *plane, in dpu_plane_cleanup_fb() argument
901 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_cleanup_fb()
962 static int dpu_plane_atomic_check(struct drm_plane *plane, in dpu_plane_atomic_check() argument
966 plane); in dpu_plane_atomic_check()
968 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check()
989 DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret); in dpu_plane_atomic_check()
1015 "plane doesn't have scaler/csc for yuv\n"); in dpu_plane_atomic_check()
1067 void dpu_plane_flush(struct drm_plane *plane) in dpu_plane_flush() argument
1072 if (!plane || !plane->state) { in dpu_plane_flush()
1073 DPU_ERROR("invalid plane\n"); in dpu_plane_flush()
1077 pdpu = to_dpu_plane(plane); in dpu_plane_flush()
1078 pstate = to_dpu_plane_state(plane->state); in dpu_plane_flush()
1081 * These updates have to be done immediately before the plane flush in dpu_plane_flush()
1091 const struct dpu_format *fmt = to_dpu_format(msm_framebuffer_format(plane->state->fb)); in dpu_plane_flush()
1099 if (plane->state) in dpu_plane_flush()
1105 * @plane: pointer to drm_plane structure
1108 void dpu_plane_set_error(struct drm_plane *plane, bool error) in dpu_plane_set_error() argument
1112 if (!plane) in dpu_plane_set_error()
1115 pdpu = to_dpu_plane(plane); in dpu_plane_set_error()
1119 static void dpu_plane_sspp_atomic_update(struct drm_plane *plane) in dpu_plane_sspp_atomic_update() argument
1122 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_sspp_atomic_update()
1123 struct drm_plane_state *state = plane->state; in dpu_plane_sspp_atomic_update()
1134 _dpu_plane_set_scanout(plane, pstate, &pipe_cfg, fb); in dpu_plane_sspp_atomic_update()
1139 _dpu_plane_set_qos_ctrl(plane, false, DPU_PLANE_QOS_PANIC_CTRL); in dpu_plane_sspp_atomic_update()
1212 _dpu_plane_set_qos_lut(plane, fb, &pipe_cfg); in dpu_plane_sspp_atomic_update()
1213 _dpu_plane_set_danger_lut(plane, fb); in dpu_plane_sspp_atomic_update()
1215 if (plane->type != DRM_PLANE_TYPE_CURSOR) { in dpu_plane_sspp_atomic_update()
1216 _dpu_plane_set_qos_ctrl(plane, true, DPU_PLANE_QOS_PANIC_CTRL); in dpu_plane_sspp_atomic_update()
1217 _dpu_plane_set_ot_limit(plane, crtc, &pipe_cfg); in dpu_plane_sspp_atomic_update()
1228 _dpu_plane_set_qos_remap(plane); in dpu_plane_sspp_atomic_update()
1231 _dpu_plane_calc_bw(plane, fb, &pipe_cfg); in dpu_plane_sspp_atomic_update()
1233 _dpu_plane_calc_clk(plane, &pipe_cfg); in dpu_plane_sspp_atomic_update()
1236 static void _dpu_plane_atomic_disable(struct drm_plane *plane) in _dpu_plane_atomic_disable() argument
1238 struct drm_plane_state *state = plane->state; in _dpu_plane_atomic_disable()
1241 trace_dpu_plane_disable(DRMID(plane), false, in _dpu_plane_atomic_disable()
1247 static void dpu_plane_atomic_update(struct drm_plane *plane, in dpu_plane_atomic_update() argument
1250 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_update()
1252 plane); in dpu_plane_atomic_update()
1259 _dpu_plane_atomic_disable(plane); in dpu_plane_atomic_update()
1261 dpu_plane_sspp_atomic_update(plane); in dpu_plane_atomic_update()
1265 static void dpu_plane_destroy(struct drm_plane *plane) in dpu_plane_destroy() argument
1267 struct dpu_plane *pdpu = plane ? to_dpu_plane(plane) : NULL; in dpu_plane_destroy()
1272 _dpu_plane_set_qos_ctrl(plane, false, DPU_PLANE_QOS_PANIC_CTRL); in dpu_plane_destroy()
1277 drm_plane_cleanup(plane); in dpu_plane_destroy()
1285 static void dpu_plane_destroy_state(struct drm_plane *plane, in dpu_plane_destroy_state() argument
1293 dpu_plane_duplicate_state(struct drm_plane *plane) in dpu_plane_duplicate_state() argument
1299 if (!plane) { in dpu_plane_duplicate_state()
1300 DPU_ERROR("invalid plane\n"); in dpu_plane_duplicate_state()
1302 } else if (!plane->state) { in dpu_plane_duplicate_state()
1303 DPU_ERROR("invalid plane state\n"); in dpu_plane_duplicate_state()
1307 old_state = to_dpu_plane_state(plane->state); in dpu_plane_duplicate_state()
1308 pdpu = to_dpu_plane(plane); in dpu_plane_duplicate_state()
1319 __drm_atomic_helper_plane_duplicate_state(plane, &pstate->base); in dpu_plane_duplicate_state()
1356 const struct dpu_plane *pdpu = to_dpu_plane(state->plane); in dpu_plane_atomic_print_state()
1364 static void dpu_plane_reset(struct drm_plane *plane) in dpu_plane_reset() argument
1369 if (!plane) { in dpu_plane_reset()
1370 DPU_ERROR("invalid plane\n"); in dpu_plane_reset()
1374 pdpu = to_dpu_plane(plane); in dpu_plane_reset()
1378 if (plane->state) { in dpu_plane_reset()
1379 dpu_plane_destroy_state(plane, plane->state); in dpu_plane_reset()
1380 plane->state = NULL; in dpu_plane_reset()
1389 __drm_atomic_helper_plane_reset(plane, &pstate->base); in dpu_plane_reset()
1393 void dpu_plane_danger_signal_ctrl(struct drm_plane *plane, bool enable) in dpu_plane_danger_signal_ctrl() argument
1395 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_danger_signal_ctrl()
1396 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_danger_signal_ctrl()
1402 _dpu_plane_set_qos_ctrl(plane, enable, DPU_PLANE_QOS_PANIC_CTRL); in dpu_plane_danger_signal_ctrl()
1409 struct drm_plane *plane; in dpu_debugfs_sspp_init() local
1415 drm_for_each_plane(plane, dpu_kms->dev) { in dpu_debugfs_sspp_init()
1416 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_debugfs_sspp_init()
1423 static bool dpu_plane_format_mod_supported(struct drm_plane *plane, in dpu_plane_format_mod_supported() argument
1454 enum dpu_sspp dpu_plane_pipe(struct drm_plane *plane) in dpu_plane_pipe() argument
1456 return plane ? to_dpu_plane(plane)->pipe : SSPP_NONE; in dpu_plane_pipe()
1459 /* initialize plane */
1464 struct drm_plane *plane = NULL; in dpu_plane_init() local
1476 DPU_ERROR("[%u]failed to allocate local plane struct\n", pipe); in dpu_plane_init()
1482 plane = &pdpu->base; in dpu_plane_init()
1499 ret = drm_universal_plane_init(dev, plane, 0xff, &dpu_plane_funcs, in dpu_plane_init()
1507 ret = drm_plane_create_zpos_property(plane, 0, 0, DPU_ZPOS_MAX); in dpu_plane_init()
1511 drm_plane_create_alpha_property(plane); in dpu_plane_init()
1512 drm_plane_create_blend_mode_property(plane, in dpu_plane_init()
1522 drm_plane_create_rotation_property(plane, in dpu_plane_init()
1525 drm_plane_enable_fb_damage_clips(plane); in dpu_plane_init()
1528 drm_plane_helper_add(plane, &dpu_plane_helper_funcs); in dpu_plane_init()
1532 DPU_DEBUG("%s created for pipe:%u id:%u\n", plane->name, in dpu_plane_init()
1533 pipe, plane->base.id); in dpu_plane_init()
1534 return plane; in dpu_plane_init()