Lines Matching full:plane

28 #define DPU_DEBUG_PLANE(pl, fmt, ...) DPU_DEBUG("plane%d " fmt,\
31 #define DPU_ERROR_PLANE(pl, fmt, ...) DPU_ERROR("plane%d " fmt,\
81 * struct dpu_plane - local dpu plane structure
86 * @revalidate: force revalidation of all the plane properties
127 static struct dpu_kms *_dpu_plane_get_kms(struct drm_plane *plane) in _dpu_plane_get_kms() argument
129 struct msm_drm_private *priv = plane->dev->dev_private; in _dpu_plane_get_kms()
135 * _dpu_plane_calc_bw - calculate bandwidth required for a plane
136 * @Plane: Pointer to drm plane.
137 * Result: Updates calculated bandwidth in the plane state.
141 static void _dpu_plane_calc_bw(struct drm_plane *plane, in _dpu_plane_calc_bw() argument
144 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_calc_bw()
148 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_calc_bw()
156 pstate = to_dpu_plane_state(plane->state); in _dpu_plane_calc_bw()
157 mode = &plane->state->crtc->mode; in _dpu_plane_calc_bw()
185 * _dpu_plane_calc_clk - calculate clock required for a plane
186 * @Plane: Pointer to drm plane.
187 * Result: Updates calculated clock in the plane state.
190 static void _dpu_plane_calc_clk(struct drm_plane *plane) in _dpu_plane_calc_clk() argument
192 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_calc_clk()
197 pstate = to_dpu_plane_state(plane->state); in _dpu_plane_calc_clk()
198 mode = &plane->state->crtc->mode; in _dpu_plane_calc_clk()
216 * @plane: Pointer to drm plane
221 static int _dpu_plane_calc_fill_level(struct drm_plane *plane, in _dpu_plane_calc_fill_level() argument
229 if (!fmt || !plane->state || !src_width || !fmt->bpp) { in _dpu_plane_calc_fill_level()
234 pdpu = to_dpu_plane(plane); in _dpu_plane_calc_fill_level()
235 pstate = to_dpu_plane_state(plane->state); in _dpu_plane_calc_fill_level()
241 DPU_DEBUG("plane%d/%d src_width:%d/%d\n", in _dpu_plane_calc_fill_level()
269 DPU_DEBUG("plane%u: pnum:%d fmt: %4.4s w:%u fl:%u\n", in _dpu_plane_calc_fill_level()
270 plane->base.id, pdpu->pipe - SSPP_VIG0, in _dpu_plane_calc_fill_level()
303 * _dpu_plane_set_qos_lut - set QoS LUT of the given plane
304 * @plane: Pointer to drm plane
305 * @fb: Pointer to framebuffer associated with the given plane
307 static void _dpu_plane_set_qos_lut(struct drm_plane *plane, in _dpu_plane_set_qos_lut() argument
310 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_lut()
321 total_fl = _dpu_plane_calc_fill_level(plane, fmt, in _dpu_plane_set_qos_lut()
339 DPU_DEBUG("plane%u: pnum:%d fmt: %4.4s rt:%d fl:%u lut:0x%llx\n", in _dpu_plane_set_qos_lut()
340 plane->base.id, in _dpu_plane_set_qos_lut()
349 * _dpu_plane_set_panic_lut - set danger/safe LUT of the given plane
350 * @plane: Pointer to drm plane
351 * @fb: Pointer to framebuffer associated with the given plane
353 static void _dpu_plane_set_danger_lut(struct drm_plane *plane, in _dpu_plane_set_danger_lut() argument
356 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_danger_lut()
392 DPU_DEBUG("plane%u: pnum:%d fmt: %4.4s mode:%d luts[0x%x, 0x%x]\n", in _dpu_plane_set_danger_lut()
393 plane->base.id, in _dpu_plane_set_danger_lut()
405 * _dpu_plane_set_qos_ctrl - set QoS control of the given plane
406 * @plane: Pointer to drm plane
410 static void _dpu_plane_set_qos_ctrl(struct drm_plane *plane, in _dpu_plane_set_qos_ctrl() argument
413 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_ctrl()
436 DPU_DEBUG("plane%u: pnum:%d ds:%d vb:%d pri[0x%x, 0x%x] is_rt:%d\n", in _dpu_plane_set_qos_ctrl()
437 plane->base.id, in _dpu_plane_set_qos_ctrl()
450 * _dpu_plane_set_ot_limit - set OT limit for the given plane
451 * @plane: Pointer to drm plane
454 static void _dpu_plane_set_ot_limit(struct drm_plane *plane, in _dpu_plane_set_ot_limit() argument
457 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_ot_limit()
459 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_set_ot_limit()
476 * _dpu_plane_set_vbif_qos - set vbif QoS for the given plane
477 * @plane: Pointer to drm plane
479 static void _dpu_plane_set_qos_remap(struct drm_plane *plane) in _dpu_plane_set_qos_remap() argument
481 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_qos_remap()
483 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in _dpu_plane_set_qos_remap()
492 DPU_DEBUG("plane%d pipe:%d vbif:%d xin:%d rt:%d, clk_ctrl:%d\n", in _dpu_plane_set_qos_remap()
493 plane->base.id, qos_params.num, in _dpu_plane_set_qos_remap()
501 static void _dpu_plane_set_scanout(struct drm_plane *plane, in _dpu_plane_set_scanout() argument
506 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_set_scanout()
626 DPU_ERROR("invalid plane\n"); in _dpu_plane_setup_csc()
659 * _dpu_plane_color_fill - enables color fill on plane
660 * @pdpu: Pointer to DPU plane object
669 const struct drm_plane *plane = &pdpu->base; in _dpu_plane_color_fill() local
670 struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state); in _dpu_plane_color_fill()
727 int dpu_plane_validate_multirect_v2(struct dpu_multirect_plane_states *plane) in dpu_plane_validate_multirect_v2() argument
742 drm_state[i] = i ? plane->r1 : plane->r0; in dpu_plane_validate_multirect_v2()
757 dpu_plane[i] = to_dpu_plane(drm_state[i]->plane); in dpu_plane_validate_multirect_v2()
760 DPU_ERROR("DPU plane state of plane id %d is NULL\n", in dpu_plane_validate_multirect_v2()
761 drm_state[i]->plane->base.id); in dpu_plane_validate_multirect_v2()
822 drm_state[R0]->plane->base.id, in dpu_plane_validate_multirect_v2()
823 drm_state[R1]->plane->base.id); in dpu_plane_validate_multirect_v2()
844 * dpu_plane_get_ctl_flush - get control flush for the given plane
845 * @plane: Pointer to drm plane structure
849 void dpu_plane_get_ctl_flush(struct drm_plane *plane, struct dpu_hw_ctl *ctl, in dpu_plane_get_ctl_flush() argument
852 *flush_sspp = ctl->ops.get_bitmask_sspp(ctl, dpu_plane_pipe(plane)); in dpu_plane_get_ctl_flush()
855 static int dpu_plane_prepare_fb(struct drm_plane *plane, in dpu_plane_prepare_fb() argument
859 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_prepare_fb()
878 drm_gem_fb_prepare_fb(plane, new_state); in dpu_plane_prepare_fb()
900 static void dpu_plane_cleanup_fb(struct drm_plane *plane, in dpu_plane_cleanup_fb() argument
903 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_cleanup_fb()
935 static int dpu_plane_atomic_check(struct drm_plane *plane, in dpu_plane_atomic_check() argument
939 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_check()
954 DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret); in dpu_plane_atomic_check()
981 "plane doesn't have scaler/csc for yuv\n"); in dpu_plane_atomic_check()
1015 void dpu_plane_flush(struct drm_plane *plane) in dpu_plane_flush() argument
1020 if (!plane || !plane->state) { in dpu_plane_flush()
1021 DPU_ERROR("invalid plane\n"); in dpu_plane_flush()
1025 pdpu = to_dpu_plane(plane); in dpu_plane_flush()
1026 pstate = to_dpu_plane_state(plane->state); in dpu_plane_flush()
1029 * These updates have to be done immediately before the plane flush in dpu_plane_flush()
1042 if (plane->state) in dpu_plane_flush()
1048 * @plane: pointer to drm_plane structure
1050 void dpu_plane_set_error(struct drm_plane *plane, bool error) in dpu_plane_set_error() argument
1054 if (!plane) in dpu_plane_set_error()
1057 pdpu = to_dpu_plane(plane); in dpu_plane_set_error()
1061 static void dpu_plane_sspp_atomic_update(struct drm_plane *plane) in dpu_plane_sspp_atomic_update() argument
1064 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_sspp_atomic_update()
1065 struct drm_plane_state *state = plane->state; in dpu_plane_sspp_atomic_update()
1074 _dpu_plane_set_scanout(plane, pstate, &pdpu->pipe_cfg, fb); in dpu_plane_sspp_atomic_update()
1079 _dpu_plane_set_qos_ctrl(plane, false, DPU_PLANE_QOS_PANIC_CTRL); in dpu_plane_sspp_atomic_update()
1176 _dpu_plane_set_qos_lut(plane, fb); in dpu_plane_sspp_atomic_update()
1177 _dpu_plane_set_danger_lut(plane, fb); in dpu_plane_sspp_atomic_update()
1179 if (plane->type != DRM_PLANE_TYPE_CURSOR) { in dpu_plane_sspp_atomic_update()
1180 _dpu_plane_set_qos_ctrl(plane, true, DPU_PLANE_QOS_PANIC_CTRL); in dpu_plane_sspp_atomic_update()
1181 _dpu_plane_set_ot_limit(plane, crtc); in dpu_plane_sspp_atomic_update()
1184 _dpu_plane_set_qos_remap(plane); in dpu_plane_sspp_atomic_update()
1186 _dpu_plane_calc_bw(plane, fb); in dpu_plane_sspp_atomic_update()
1188 _dpu_plane_calc_clk(plane); in dpu_plane_sspp_atomic_update()
1191 static void _dpu_plane_atomic_disable(struct drm_plane *plane) in _dpu_plane_atomic_disable() argument
1193 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_atomic_disable()
1194 struct drm_plane_state *state = plane->state; in _dpu_plane_atomic_disable()
1197 trace_dpu_plane_disable(DRMID(plane), is_dpu_plane_virtual(plane), in _dpu_plane_atomic_disable()
1202 if (is_dpu_plane_virtual(plane) && in _dpu_plane_atomic_disable()
1208 static void dpu_plane_atomic_update(struct drm_plane *plane, in dpu_plane_atomic_update() argument
1211 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_atomic_update()
1212 struct drm_plane_state *state = plane->state; in dpu_plane_atomic_update()
1219 _dpu_plane_atomic_disable(plane); in dpu_plane_atomic_update()
1221 dpu_plane_sspp_atomic_update(plane); in dpu_plane_atomic_update()
1225 void dpu_plane_restore(struct drm_plane *plane) in dpu_plane_restore() argument
1229 if (!plane || !plane->state) { in dpu_plane_restore()
1230 DPU_ERROR("invalid plane\n"); in dpu_plane_restore()
1234 pdpu = to_dpu_plane(plane); in dpu_plane_restore()
1238 /* last plane state is same as current state */ in dpu_plane_restore()
1239 dpu_plane_atomic_update(plane, plane->state); in dpu_plane_restore()
1242 static void dpu_plane_destroy(struct drm_plane *plane) in dpu_plane_destroy() argument
1244 struct dpu_plane *pdpu = plane ? to_dpu_plane(plane) : NULL; in dpu_plane_destroy()
1249 _dpu_plane_set_qos_ctrl(plane, false, DPU_PLANE_QOS_PANIC_CTRL); in dpu_plane_destroy()
1254 drm_plane_cleanup(plane); in dpu_plane_destroy()
1262 static void dpu_plane_destroy_state(struct drm_plane *plane, in dpu_plane_destroy_state() argument
1270 dpu_plane_duplicate_state(struct drm_plane *plane) in dpu_plane_duplicate_state() argument
1276 if (!plane) { in dpu_plane_duplicate_state()
1277 DPU_ERROR("invalid plane\n"); in dpu_plane_duplicate_state()
1279 } else if (!plane->state) { in dpu_plane_duplicate_state()
1280 DPU_ERROR("invalid plane state\n"); in dpu_plane_duplicate_state()
1284 old_state = to_dpu_plane_state(plane->state); in dpu_plane_duplicate_state()
1285 pdpu = to_dpu_plane(plane); in dpu_plane_duplicate_state()
1296 __drm_atomic_helper_plane_duplicate_state(plane, &pstate->base); in dpu_plane_duplicate_state()
1301 static void dpu_plane_reset(struct drm_plane *plane) in dpu_plane_reset() argument
1306 if (!plane) { in dpu_plane_reset()
1307 DPU_ERROR("invalid plane\n"); in dpu_plane_reset()
1311 pdpu = to_dpu_plane(plane); in dpu_plane_reset()
1315 if (plane->state) { in dpu_plane_reset()
1316 dpu_plane_destroy_state(plane, plane->state); in dpu_plane_reset()
1317 plane->state = 0; in dpu_plane_reset()
1326 pstate->base.plane = plane; in dpu_plane_reset()
1328 plane->state = &pstate->base; in dpu_plane_reset()
1332 static void dpu_plane_danger_signal_ctrl(struct drm_plane *plane, bool enable) in dpu_plane_danger_signal_ctrl() argument
1334 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_danger_signal_ctrl()
1335 struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane); in dpu_plane_danger_signal_ctrl()
1341 _dpu_plane_set_qos_ctrl(plane, enable, DPU_PLANE_QOS_PANIC_CTRL); in dpu_plane_danger_signal_ctrl()
1359 struct drm_plane *plane; in _dpu_plane_set_danger_state() local
1361 drm_for_each_plane(plane, kms->dev) { in _dpu_plane_set_danger_state()
1362 if (plane->fb && plane->state) { in _dpu_plane_set_danger_state()
1363 dpu_plane_danger_signal_ctrl(plane, enable); in _dpu_plane_set_danger_state()
1364 DPU_DEBUG("plane:%d img:%dx%d ", in _dpu_plane_set_danger_state()
1365 plane->base.id, plane->fb->width, in _dpu_plane_set_danger_state()
1366 plane->fb->height); in _dpu_plane_set_danger_state()
1368 plane->state->src_x >> 16, in _dpu_plane_set_danger_state()
1369 plane->state->src_y >> 16, in _dpu_plane_set_danger_state()
1370 plane->state->src_w >> 16, in _dpu_plane_set_danger_state()
1371 plane->state->src_h >> 16, in _dpu_plane_set_danger_state()
1372 plane->state->crtc_x, plane->state->crtc_y, in _dpu_plane_set_danger_state()
1373 plane->state->crtc_w, plane->state->crtc_h); in _dpu_plane_set_danger_state()
1375 DPU_DEBUG("Inactive plane:%d\n", plane->base.id); in _dpu_plane_set_danger_state()
1412 static int _dpu_plane_init_debugfs(struct drm_plane *plane) in _dpu_plane_init_debugfs() argument
1414 struct dpu_plane *pdpu = to_dpu_plane(plane); in _dpu_plane_init_debugfs()
1415 struct dpu_kms *kms = _dpu_plane_get_kms(plane); in _dpu_plane_init_debugfs()
1422 plane->dev->primary->debugfs_root); in _dpu_plane_init_debugfs()
1487 static int _dpu_plane_init_debugfs(struct drm_plane *plane) in _dpu_plane_init_debugfs() argument
1493 static int dpu_plane_late_register(struct drm_plane *plane) in dpu_plane_late_register() argument
1495 return _dpu_plane_init_debugfs(plane); in dpu_plane_late_register()
1498 static void dpu_plane_early_unregister(struct drm_plane *plane) in dpu_plane_early_unregister() argument
1500 struct dpu_plane *pdpu = to_dpu_plane(plane); in dpu_plane_early_unregister()
1505 static bool dpu_plane_format_mod_supported(struct drm_plane *plane, in dpu_plane_format_mod_supported() argument
1541 enum dpu_sspp dpu_plane_pipe(struct drm_plane *plane) in dpu_plane_pipe() argument
1543 return plane ? to_dpu_plane(plane)->pipe : SSPP_NONE; in dpu_plane_pipe()
1546 bool is_dpu_plane_virtual(struct drm_plane *plane) in is_dpu_plane_virtual() argument
1548 return plane ? to_dpu_plane(plane)->is_virtual : false; in is_dpu_plane_virtual()
1551 /* initialize plane */
1556 struct drm_plane *plane = NULL, *master_plane = NULL; in dpu_plane_init() local
1568 DPU_ERROR("[%u]failed to allocate local plane struct\n", pipe); in dpu_plane_init()
1574 plane = &pdpu->base; in dpu_plane_init()
1614 ret = drm_universal_plane_init(dev, plane, 0xff, &dpu_plane_funcs, in dpu_plane_init()
1629 ret = drm_plane_create_zpos_property(plane, 0, 0, zpos_max); in dpu_plane_init()
1633 drm_plane_create_rotation_property(plane, in dpu_plane_init()
1640 drm_plane_enable_fb_damage_clips(plane); in dpu_plane_init()
1643 drm_plane_helper_add(plane, &dpu_plane_helper_funcs); in dpu_plane_init()
1646 snprintf(pdpu->pipe_name, DPU_NAME_SIZE, "plane%u", plane->base.id); in dpu_plane_init()
1651 pipe, plane->base.id, master_plane_id); in dpu_plane_init()
1652 return plane; in dpu_plane_init()