Lines Matching full:crtc
47 static struct dpu_kms *_dpu_crtc_get_kms(struct drm_crtc *crtc)
49 struct msm_drm_private *priv = crtc->dev->dev_private;
54 static struct drm_encoder *get_encoder_from_crtc(struct drm_crtc *crtc)
56 struct drm_device *dev = crtc->dev;
60 if (encoder->crtc == crtc)
80 static int dpu_crtc_verify_crc_source(struct drm_crtc *crtc,
84 struct dpu_crtc_state *crtc_state = to_dpu_crtc_state(crtc->state);
87 DRM_DEBUG_DRIVER("Invalid source %s for CRTC%d\n", src_name, crtc->index);
98 drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc->state->encoder_mask)
121 static void dpu_crtc_setup_encoder_misr(struct drm_crtc *crtc)
125 drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc->state->encoder_mask)
129 static int dpu_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name)
134 struct drm_device *drm_dev = crtc->dev;
141 DRM_DEBUG_DRIVER("Invalid CRC source %s for CRTC%d\n", src_name, crtc->index);
145 ret = drm_modeset_lock(&crtc->mutex, NULL);
151 crtc_state = to_dpu_crtc_state(crtc->state);
160 ret = drm_crtc_vblank_get(crtc);
166 drm_crtc_vblank_put(crtc);
178 dpu_crtc_setup_encoder_misr(crtc);
183 drm_modeset_unlock(&crtc->mutex);
188 static u32 dpu_crtc_get_vblank_counter(struct drm_crtc *crtc)
190 struct drm_encoder *encoder = get_encoder_from_crtc(crtc);
192 DRM_ERROR("no encoder found for crtc %d\n", crtc->index);
199 static int dpu_crtc_get_lm_crc(struct drm_crtc *crtc,
226 return drm_crtc_add_crc_entry(crtc, true,
227 drm_crtc_accurate_vblank_count(crtc), crcs);
230 static int dpu_crtc_get_encoder_crc(struct drm_crtc *crtc)
236 drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc->state->encoder_mask) {
248 return drm_crtc_add_crc_entry(crtc, true,
249 drm_crtc_accurate_vblank_count(crtc), crcs);
252 static int dpu_crtc_get_crc(struct drm_crtc *crtc)
254 struct dpu_crtc_state *crtc_state = to_dpu_crtc_state(crtc->state);
263 return dpu_crtc_get_lm_crc(crtc, crtc_state);
265 return dpu_crtc_get_encoder_crc(crtc);
270 static bool dpu_crtc_get_scanout_position(struct drm_crtc *crtc,
276 unsigned int pipe = crtc->index;
280 encoder = get_encoder_from_crtc(crtc);
282 DRM_ERROR("no encoder found for crtc %d\n", pipe);
377 static void _dpu_crtc_program_lm_output_roi(struct drm_crtc *crtc)
382 crtc_state = to_dpu_crtc_state(crtc->state);
401 static void _dpu_crtc_blend_setup_pipe(struct drm_crtc *crtc,
421 trace_dpu_crtc_setup_mixer(DRMID(crtc), DRMID(plane),
426 DRM_DEBUG_ATOMIC("crtc %d stage:%d - plane %d sspp %d fb %d multirect_idx %d\n",
427 crtc->base.id,
442 static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc,
449 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
460 drm_atomic_crtc_for_each_plane(plane, crtc) {
478 _dpu_crtc_blend_setup_pipe(crtc, plane,
487 _dpu_crtc_blend_setup_pipe(crtc, plane,
513 _dpu_crtc_program_lm_output_roi(crtc);
517 * _dpu_crtc_blend_setup - configure crtc mixers
518 * @crtc: Pointer to drm crtc structure
520 static void _dpu_crtc_blend_setup(struct drm_crtc *crtc)
522 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
523 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
551 _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, &stage_cfg);
589 * @crtc: Pointer to drm crtc structure
591 static void _dpu_crtc_complete_flip(struct drm_crtc *crtc)
593 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
594 struct drm_device *dev = crtc->dev;
601 trace_dpu_crtc_complete_flip(DRMID(crtc));
602 drm_crtc_send_vblank_event(crtc, dpu_crtc->event);
609 * dpu_crtc_get_intf_mode - get interface mode of the given crtc
610 * @crtc: Pointert to crtc
612 enum dpu_intf_mode dpu_crtc_get_intf_mode(struct drm_crtc *crtc)
618 * check. When called from debugfs, the crtc->mutex must be held to
619 * read crtc->state. However reading crtc->state from atomic check isn't
625 WARN_ON(!drm_modeset_is_locked(&crtc->mutex));
628 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask)
636 * @crtc: Pointer to drm crtc object
638 void dpu_crtc_vblank_callback(struct drm_crtc *crtc)
640 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
648 dpu_crtc_get_crc(crtc);
650 drm_crtc_handle_vblank(crtc);
651 trace_dpu_crtc_vblank_cb(DRMID(crtc));
658 struct drm_crtc *crtc = fevent->crtc;
659 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
665 DRM_DEBUG_ATOMIC("crtc%d event:%u ts:%lld\n", crtc->base.id, fevent->event,
676 trace_dpu_crtc_frame_event_done(DRMID(crtc),
678 dpu_core_perf_crtc_release_bw(crtc);
680 trace_dpu_crtc_frame_event_more_pending(DRMID(crtc),
690 DPU_ERROR("crtc%d ts:%lld received panel dead event\n",
691 crtc->base.id, ktime_to_ns(fevent->ts));
703 * dpu_crtc_frame_event_cb - crtc frame event callback API
704 * @crtc: Pointer to crtc
712 void dpu_crtc_frame_event_cb(struct drm_crtc *crtc, u32 event)
724 dpu_crtc = to_dpu_crtc(crtc);
725 priv = crtc->dev->dev_private;
726 crtc_id = drm_crtc_index(crtc);
728 trace_dpu_crtc_frame_event_cb(DRMID(crtc), event);
738 DRM_ERROR_RATELIMITED("crtc%d event %d overflow\n", crtc->base.id, event);
743 fevent->crtc = crtc;
750 * @crtc: Pointer to drm crtc object
752 void dpu_crtc_complete_commit(struct drm_crtc *crtc)
754 trace_dpu_crtc_complete_commit(DRMID(crtc));
755 dpu_core_perf_crtc_update(crtc, 0);
756 _dpu_crtc_complete_flip(crtc);
759 static int _dpu_crtc_check_and_setup_lm_bounds(struct drm_crtc *crtc,
765 struct dpu_kms *dpu_kms = _dpu_crtc_get_kms(crtc);
782 trace_dpu_crtc_setup_lm_bounds(DRMID(crtc), i, r);
816 static void _dpu_crtc_setup_cp_blocks(struct drm_crtc *crtc)
818 struct drm_crtc_state *state = crtc->state;
819 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
850 static void dpu_crtc_atomic_begin(struct drm_crtc *crtc,
853 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
856 if (!crtc->state->enable) {
857 DRM_DEBUG_ATOMIC("crtc%d -> enable %d, skip atomic_begin\n",
858 crtc->base.id, crtc->state->enable);
862 DRM_DEBUG_ATOMIC("crtc%d\n", crtc->base.id);
864 _dpu_crtc_check_and_setup_lm_bounds(crtc, crtc->state);
867 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask)
872 * it means we are trying to flush a CRTC whose state is disabled:
878 _dpu_crtc_blend_setup(crtc);
880 _dpu_crtc_setup_cp_blocks(crtc);
891 static void dpu_crtc_atomic_flush(struct drm_crtc *crtc,
901 if (!crtc->state->enable) {
902 DRM_DEBUG_ATOMIC("crtc%d -> enable %d, skip atomic_flush\n",
903 crtc->base.id, crtc->state->enable);
907 DRM_DEBUG_ATOMIC("crtc%d\n", crtc->base.id);
909 dpu_crtc = to_dpu_crtc(crtc);
910 cstate = to_dpu_crtc_state(crtc->state);
911 dev = crtc->dev;
914 if (crtc->index >= ARRAY_SIZE(priv->kms->event_thread)) {
915 DPU_ERROR("invalid crtc index[%d]\n", crtc->index);
921 dpu_crtc->event = crtc->state->event;
922 crtc->state->event = NULL;
927 * it means we are trying to flush a CRTC whose state is disabled:
933 /* update performance setting before crtc kickoff */
934 dpu_core_perf_crtc_update(crtc, 1);
938 * required writes/flushing before crtc's "flush
941 drm_atomic_crtc_for_each_plane(plane, crtc) {
952 * @crtc: drm CRTC
953 * @state: CRTC state object to release
955 static void dpu_crtc_destroy_state(struct drm_crtc *crtc,
960 DRM_DEBUG_ATOMIC("crtc%d\n", crtc->base.id);
967 static int _dpu_crtc_wait_for_frame_done(struct drm_crtc *crtc)
969 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
989 static int dpu_crtc_kickoff_clone_mode(struct drm_crtc *crtc)
993 struct dpu_kms *dpu_kms = _dpu_crtc_get_kms(crtc);
996 drm_for_each_encoder_mask(encoder, crtc->dev,
997 crtc->state->encoder_mask) {
1029 * dpu_crtc_commit_kickoff - trigger kickoff of the commit for this crtc
1030 * @crtc: Pointer to drm crtc object
1032 void dpu_crtc_commit_kickoff(struct drm_crtc *crtc)
1035 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1036 struct dpu_kms *dpu_kms = _dpu_crtc_get_kms(crtc);
1037 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
1041 * it means we are trying to start a CRTC whose state is disabled:
1049 drm_for_each_encoder_mask(encoder, crtc->dev,
1050 crtc->state->encoder_mask) {
1052 DRM_DEBUG_ATOMIC("invalid FB not kicking off crtc\n");
1057 if (drm_crtc_in_clone_mode(crtc->state)) {
1058 if (dpu_crtc_kickoff_clone_mode(crtc))
1065 drm_for_each_encoder_mask(encoder, crtc->dev,
1066 crtc->state->encoder_mask)
1071 drm_for_each_encoder_mask(encoder, crtc->dev,
1072 crtc->state->encoder_mask) {
1080 DRM_DEBUG_ATOMIC("crtc%d first commit\n", crtc->base.id);
1082 DRM_DEBUG_ATOMIC("crtc%d commit\n", crtc->base.id);
1092 static void dpu_crtc_reset(struct drm_crtc *crtc)
1096 if (crtc->state)
1097 dpu_crtc_destroy_state(crtc, crtc->state);
1100 __drm_atomic_helper_crtc_reset(crtc, &cstate->base);
1102 __drm_atomic_helper_crtc_reset(crtc, NULL);
1107 * @crtc: Pointer to drm crtc structure
1109 static struct drm_crtc_state *dpu_crtc_duplicate_state(struct drm_crtc *crtc)
1111 struct dpu_crtc_state *cstate, *old_cstate = to_dpu_crtc_state(crtc->state);
1120 __drm_atomic_helper_crtc_duplicate_state(crtc, &cstate->base);
1139 static void dpu_crtc_disable(struct drm_crtc *crtc,
1143 crtc);
1144 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1145 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
1150 DRM_DEBUG_KMS("crtc%d\n", crtc->base.id);
1154 * it won't trigger a warn while assigning crtc.
1157 drm_for_each_encoder_mask(encoder, crtc->dev,
1165 drm_crtc_vblank_off(crtc);
1167 drm_for_each_encoder_mask(encoder, crtc->dev,
1171 * crtc is being used in video mode.
1178 * we will need encoder->crtc connection to process the device sleep &
1181 if (!crtc->state->self_refresh_active)
1186 if (_dpu_crtc_wait_for_frame_done(crtc))
1187 DPU_ERROR("crtc%d wait for frame done failed;frame_pending%d\n",
1188 crtc->base.id,
1191 trace_dpu_crtc_disable(DRMID(crtc), false, dpu_crtc);
1195 trace_dpu_crtc_disable_frame_pending(DRMID(crtc),
1198 dpu_core_perf_crtc_release_bw(crtc);
1202 dpu_core_perf_crtc_update(crtc, 0);
1208 if (crtc->state->event && !crtc->state->active) {
1209 spin_lock_irqsave(&crtc->dev->event_lock, flags);
1210 drm_crtc_send_vblank_event(crtc, crtc->state->event);
1211 crtc->state->event = NULL;
1212 spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
1215 pm_runtime_put_sync(crtc->dev->dev);
1218 static void dpu_crtc_enable(struct drm_crtc *crtc,
1221 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1226 old_crtc_state = drm_atomic_get_old_crtc_state(state, crtc);
1228 pm_runtime_get_sync(crtc->dev->dev);
1230 DRM_DEBUG_KMS("crtc%d\n", crtc->base.id);
1232 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask) {
1235 * crtc is being used in video mode.
1242 atomic_inc(&_dpu_crtc_get_kms(crtc)->bandwidth_ref);
1244 trace_dpu_crtc_enable(DRMID(crtc), true, dpu_crtc);
1248 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask)
1249 dpu_encoder_assign_crtc(encoder, crtc);
1253 drm_crtc_vblank_on(crtc);
1258 struct drm_crtc *crtc = cstate->crtc;
1264 drm_for_each_encoder_mask (encoder, crtc->dev, cstate->encoder_mask) {
1273 static int dpu_crtc_reassign_planes(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state)
1275 int total_planes = crtc->dev->mode_config.num_total_plane;
1286 dpu_rm_release_all_sspp(global_state, crtc);
1307 ret = dpu_assign_plane_resources(global_state, state, crtc, states, total_planes);
1318 struct drm_crtc *crtc,
1326 drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc_state->encoder_mask)
1369 static int dpu_crtc_assign_resources(struct drm_crtc *crtc,
1376 struct dpu_kms *dpu_kms = _dpu_crtc_get_kms(crtc);
1389 dpu_rm_release(global_state, crtc);
1394 topology = dpu_crtc_get_topology(crtc, dpu_kms, crtc_state);
1396 crtc_state->crtc, &topology);
1403 crtc_state->crtc,
1407 crtc_state->crtc,
1411 crtc_state->crtc,
1431 * @old_crtc_state: Previous CRTC state
1432 * @new_crtc_state: Corresponding CRTC state to be checked
1440 struct drm_crtc *crtc = new_crtc_state->crtc;
1444 DRM_DEBUG_ATOMIC("%d\n", crtc->base.id);
1447 drm_for_each_encoder_mask(drm_enc, crtc->dev, new_crtc_state->encoder_mask) {
1459 static int dpu_crtc_atomic_check(struct drm_crtc *crtc,
1463 crtc);
1464 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1476 rc = dpu_crtc_assign_resources(crtc, crtc_state);
1483 rc = dpu_crtc_reassign_planes(crtc, crtc_state);
1489 DRM_DEBUG_ATOMIC("crtc%d -> enable %d, active %d, skip atomic_check\n",
1490 crtc->base.id, crtc_state->enable,
1499 rc = _dpu_crtc_check_and_setup_lm_bounds(crtc, crtc_state);
1521 atomic_inc(&_dpu_crtc_get_kms(crtc)->bandwidth_ref);
1523 rc = dpu_core_perf_crtc_check(crtc, crtc_state);
1525 DPU_ERROR("crtc%d failed performance check %d\n",
1526 crtc->base.id, rc);
1533 static enum drm_mode_status dpu_crtc_mode_valid(struct drm_crtc *crtc,
1536 struct dpu_kms *dpu_kms = _dpu_crtc_get_kms(crtc);
1545 * max crtc width is equal to the max mixer width * 2 and max height is 4K
1553 * dpu_crtc_vblank - enable or disable vblanks for this crtc
1554 * @crtc: Pointer to drm crtc object
1557 int dpu_crtc_vblank(struct drm_crtc *crtc, bool en)
1559 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1565 * Normally we would iterate through encoder_mask in crtc state to find
1569 * Instead, we "assign" a crtc to the encoder in enable and clear it in
1572 * currently assigned to our crtc.
1574 * Note also that this function cannot be called while crtc is disabled
1579 list_for_each_entry(enc, &crtc->dev->mode_config.encoder_list, head) {
1580 trace_dpu_crtc_vblank_enable(DRMID(crtc), DRMID(enc), en,
1583 dpu_encoder_toggle_vblank_for_crtc(enc, crtc, en);
1596 struct drm_crtc *crtc;
1606 crtc = &dpu_crtc->base;
1608 drm_modeset_lock_all(crtc->dev);
1609 cstate = to_dpu_crtc_state(crtc->state);
1611 mode = &crtc->state->adjusted_mode;
1614 seq_printf(s, "crtc:%d width:%d height:%d\n", crtc->base.id,
1628 drm_atomic_crtc_for_each_plane(plane, crtc) {
1700 drm_modeset_unlock_all(crtc->dev);
1709 struct drm_crtc *crtc = s->private;
1710 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1712 seq_printf(s, "client type: %d\n", dpu_crtc_get_client_type(crtc));
1713 seq_printf(s, "intf_mode: %d\n", dpu_crtc_get_intf_mode(crtc));
1725 static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc)
1727 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1730 crtc->debugfs_entry,
1733 crtc->debugfs_entry,
1740 static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc)
1746 static int dpu_crtc_late_register(struct drm_crtc *crtc)
1748 return _dpu_crtc_init_debugfs(crtc);
1778 * dpu_crtc_init - create a new crtc object
1782 * @return: new crtc object or error
1784 * initialize CRTC
1791 struct drm_crtc *crtc = NULL;
1803 crtc = &dpu_crtc->base;
1804 crtc->dev = dev;
1821 drm_crtc_helper_add(crtc, &dpu_crtc_helper_funcs);
1824 drm_crtc_enable_color_mgmt(crtc, 0, true, 0);
1826 /* save user friendly CRTC name for later */
1827 snprintf(dpu_crtc->name, DPU_CRTC_NAME_SIZE, "crtc%u", crtc->base.id);
1832 ret = drm_self_refresh_helper_init(crtc);
1835 crtc->name, ret);
1839 DRM_DEBUG_KMS("%s: successfully initialized crtc\n", dpu_crtc->name);
1840 return crtc;