Lines Matching refs: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);
369 static void _dpu_crtc_program_lm_output_roi(struct drm_crtc *crtc)
374 crtc_state = to_dpu_crtc_state(crtc->state);
393 static void _dpu_crtc_blend_setup_pipe(struct drm_crtc *crtc,
413 trace_dpu_crtc_setup_mixer(DRMID(crtc), DRMID(plane),
418 DRM_DEBUG_ATOMIC("crtc %d stage:%d - plane %d sspp %d fb %d multirect_idx %d\n",
419 crtc->base.id,
434 static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc,
441 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
451 drm_atomic_crtc_for_each_plane(plane, crtc) {
468 _dpu_crtc_blend_setup_pipe(crtc, plane,
476 _dpu_crtc_blend_setup_pipe(crtc, plane,
498 _dpu_crtc_program_lm_output_roi(crtc);
502 * _dpu_crtc_blend_setup - configure crtc mixers
503 * @crtc: Pointer to drm crtc structure
505 static void _dpu_crtc_blend_setup(struct drm_crtc *crtc)
507 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
508 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
527 _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, &stage_cfg);
556 * @crtc: Pointer to drm crtc structure
558 static void _dpu_crtc_complete_flip(struct drm_crtc *crtc)
560 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
561 struct drm_device *dev = crtc->dev;
568 trace_dpu_crtc_complete_flip(DRMID(crtc));
569 drm_crtc_send_vblank_event(crtc, dpu_crtc->event);
575 enum dpu_intf_mode dpu_crtc_get_intf_mode(struct drm_crtc *crtc)
581 * check. When called from debugfs, the crtc->mutex must be held to
582 * read crtc->state. However reading crtc->state from atomic check isn't
588 WARN_ON(!drm_modeset_is_locked(&crtc->mutex));
591 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask)
597 void dpu_crtc_vblank_callback(struct drm_crtc *crtc)
599 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
607 dpu_crtc_get_crc(crtc);
609 drm_crtc_handle_vblank(crtc);
610 trace_dpu_crtc_vblank_cb(DRMID(crtc));
617 struct drm_crtc *crtc = fevent->crtc;
618 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
624 DRM_DEBUG_ATOMIC("crtc%d event:%u ts:%lld\n", crtc->base.id, fevent->event,
635 trace_dpu_crtc_frame_event_done(DRMID(crtc),
637 dpu_core_perf_crtc_release_bw(crtc);
639 trace_dpu_crtc_frame_event_more_pending(DRMID(crtc),
649 DPU_ERROR("crtc%d ts:%lld received panel dead event\n",
650 crtc->base.id, ktime_to_ns(fevent->ts));
662 * dpu_crtc_frame_event_cb - crtc frame event callback API. CRTC module
672 struct drm_crtc *crtc = (struct drm_crtc *)data;
683 dpu_crtc = to_dpu_crtc(crtc);
684 priv = crtc->dev->dev_private;
685 crtc_id = drm_crtc_index(crtc);
687 trace_dpu_crtc_frame_event_cb(DRMID(crtc), event);
697 DRM_ERROR_RATELIMITED("crtc%d event %d overflow\n", crtc->base.id, event);
702 fevent->crtc = crtc;
707 void dpu_crtc_complete_commit(struct drm_crtc *crtc)
709 trace_dpu_crtc_complete_commit(DRMID(crtc));
710 dpu_core_perf_crtc_update(crtc, 0);
711 _dpu_crtc_complete_flip(crtc);
714 static void _dpu_crtc_setup_lm_bounds(struct drm_crtc *crtc,
729 trace_dpu_crtc_setup_lm_bounds(DRMID(crtc), i, r);
758 static void _dpu_crtc_setup_cp_blocks(struct drm_crtc *crtc)
760 struct drm_crtc_state *state = crtc->state;
761 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
792 static void dpu_crtc_atomic_begin(struct drm_crtc *crtc,
795 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
798 if (!crtc->state->enable) {
799 DRM_DEBUG_ATOMIC("crtc%d -> enable %d, skip atomic_begin\n",
800 crtc->base.id, crtc->state->enable);
804 DRM_DEBUG_ATOMIC("crtc%d\n", crtc->base.id);
806 _dpu_crtc_setup_lm_bounds(crtc, crtc->state);
809 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask)
820 _dpu_crtc_blend_setup(crtc);
822 _dpu_crtc_setup_cp_blocks(crtc);
833 static void dpu_crtc_atomic_flush(struct drm_crtc *crtc,
843 if (!crtc->state->enable) {
844 DRM_DEBUG_ATOMIC("crtc%d -> enable %d, skip atomic_flush\n",
845 crtc->base.id, crtc->state->enable);
849 DRM_DEBUG_ATOMIC("crtc%d\n", crtc->base.id);
851 dpu_crtc = to_dpu_crtc(crtc);
852 cstate = to_dpu_crtc_state(crtc->state);
853 dev = crtc->dev;
856 if (crtc->index >= ARRAY_SIZE(priv->event_thread)) {
857 DPU_ERROR("invalid crtc index[%d]\n", crtc->index);
863 dpu_crtc->event = crtc->state->event;
864 crtc->state->event = NULL;
875 /* update performance setting before crtc kickoff */
876 dpu_core_perf_crtc_update(crtc, 1);
880 * required writes/flushing before crtc's "flush
883 drm_atomic_crtc_for_each_plane(plane, crtc) {
894 * @crtc: drm CRTC
897 static void dpu_crtc_destroy_state(struct drm_crtc *crtc,
902 DRM_DEBUG_ATOMIC("crtc%d\n", crtc->base.id);
909 static int _dpu_crtc_wait_for_frame_done(struct drm_crtc *crtc)
911 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
931 void dpu_crtc_commit_kickoff(struct drm_crtc *crtc)
934 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
935 struct dpu_kms *dpu_kms = _dpu_crtc_get_kms(crtc);
936 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
948 drm_for_each_encoder_mask(encoder, crtc->dev,
949 crtc->state->encoder_mask) {
951 DRM_DEBUG_ATOMIC("invalid FB not kicking off crtc\n");
959 drm_for_each_encoder_mask(encoder, crtc->dev,
960 crtc->state->encoder_mask)
965 DRM_DEBUG_ATOMIC("crtc%d first commit\n", crtc->base.id);
967 DRM_DEBUG_ATOMIC("crtc%d commit\n", crtc->base.id);
973 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask)
982 static void dpu_crtc_reset(struct drm_crtc *crtc)
986 if (crtc->state)
987 dpu_crtc_destroy_state(crtc, crtc->state);
990 __drm_atomic_helper_crtc_reset(crtc, &cstate->base);
992 __drm_atomic_helper_crtc_reset(crtc, NULL);
997 * @crtc: Pointer to drm crtc structure
999 static struct drm_crtc_state *dpu_crtc_duplicate_state(struct drm_crtc *crtc)
1001 struct dpu_crtc_state *cstate, *old_cstate = to_dpu_crtc_state(crtc->state);
1010 __drm_atomic_helper_crtc_duplicate_state(crtc, &cstate->base);
1029 static void dpu_crtc_disable(struct drm_crtc *crtc,
1033 crtc);
1034 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1035 struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
1040 DRM_DEBUG_KMS("crtc%d\n", crtc->base.id);
1044 * it won't trigger a warn while assigning crtc.
1047 drm_for_each_encoder_mask(encoder, crtc->dev,
1055 drm_crtc_vblank_off(crtc);
1057 drm_for_each_encoder_mask(encoder, crtc->dev,
1061 * crtc is being used in video mode.
1068 * we will need encoder->crtc connection to process the device sleep &
1071 if (!crtc->state->self_refresh_active)
1076 if (_dpu_crtc_wait_for_frame_done(crtc))
1077 DPU_ERROR("crtc%d wait for frame done failed;frame_pending%d\n",
1078 crtc->base.id,
1081 trace_dpu_crtc_disable(DRMID(crtc), false, dpu_crtc);
1085 trace_dpu_crtc_disable_frame_pending(DRMID(crtc),
1088 dpu_core_perf_crtc_release_bw(crtc);
1092 dpu_core_perf_crtc_update(crtc, 0);
1094 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask)
1104 if (crtc->state->event && !crtc->state->active) {
1105 spin_lock_irqsave(&crtc->dev->event_lock, flags);
1106 drm_crtc_send_vblank_event(crtc, crtc->state->event);
1107 crtc->state->event = NULL;
1108 spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
1111 pm_runtime_put_sync(crtc->dev->dev);
1114 static void dpu_crtc_enable(struct drm_crtc *crtc,
1117 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1122 old_crtc_state = drm_atomic_get_old_crtc_state(state, crtc);
1124 pm_runtime_get_sync(crtc->dev->dev);
1126 DRM_DEBUG_KMS("crtc%d\n", crtc->base.id);
1128 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask) {
1131 * crtc is being used in video mode.
1136 dpu_crtc_frame_event_cb, (void *)crtc);
1140 atomic_inc(&_dpu_crtc_get_kms(crtc)->bandwidth_ref);
1142 trace_dpu_crtc_enable(DRMID(crtc), true, dpu_crtc);
1146 drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask)
1147 dpu_encoder_assign_crtc(encoder, crtc);
1151 drm_crtc_vblank_on(crtc);
1156 struct drm_crtc *crtc = cstate->crtc;
1162 drm_for_each_encoder_mask (encoder, crtc->dev, cstate->encoder_mask) {
1171 static int dpu_crtc_atomic_check(struct drm_crtc *crtc,
1175 crtc);
1176 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1187 DRM_DEBUG_ATOMIC("crtc%d -> enable %d, active %d, skip atomic_check\n",
1188 crtc->base.id, crtc_state->enable,
1201 _dpu_crtc_setup_lm_bounds(crtc, crtc_state);
1220 atomic_inc(&_dpu_crtc_get_kms(crtc)->bandwidth_ref);
1222 rc = dpu_core_perf_crtc_check(crtc, crtc_state);
1224 DPU_ERROR("crtc%d failed performance check %d\n",
1225 crtc->base.id, rc);
1232 int dpu_crtc_vblank(struct drm_crtc *crtc, bool en)
1234 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1240 * Normally we would iterate through encoder_mask in crtc state to find
1244 * Instead, we "assign" a crtc to the encoder in enable and clear it in
1247 * currently assigned to our crtc.
1249 * Note also that this function cannot be called while crtc is disabled
1254 list_for_each_entry(enc, &crtc->dev->mode_config.encoder_list, head) {
1255 trace_dpu_crtc_vblank_enable(DRMID(crtc), DRMID(enc), en,
1258 dpu_encoder_toggle_vblank_for_crtc(enc, crtc, en);
1271 struct drm_crtc *crtc;
1281 crtc = &dpu_crtc->base;
1283 drm_modeset_lock_all(crtc->dev);
1284 cstate = to_dpu_crtc_state(crtc->state);
1286 mode = &crtc->state->adjusted_mode;
1289 seq_printf(s, "crtc:%d width:%d height:%d\n", crtc->base.id,
1303 drm_atomic_crtc_for_each_plane(plane, crtc) {
1375 drm_modeset_unlock_all(crtc->dev);
1384 struct drm_crtc *crtc = s->private;
1385 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1387 seq_printf(s, "client type: %d\n", dpu_crtc_get_client_type(crtc));
1388 seq_printf(s, "intf_mode: %d\n", dpu_crtc_get_intf_mode(crtc));
1399 static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc)
1401 struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
1404 crtc->debugfs_entry,
1407 crtc->debugfs_entry,
1414 static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc)
1420 static int dpu_crtc_late_register(struct drm_crtc *crtc)
1422 return _dpu_crtc_init_debugfs(crtc);
1450 /* initialize crtc */
1456 struct drm_crtc *crtc = NULL;
1468 crtc = &dpu_crtc->base;
1469 crtc->dev = dev;
1486 drm_crtc_helper_add(crtc, &dpu_crtc_helper_funcs);
1489 drm_crtc_enable_color_mgmt(crtc, 0, true, 0);
1492 snprintf(dpu_crtc->name, DPU_CRTC_NAME_SIZE, "crtc%u", crtc->base.id);
1497 ret = drm_self_refresh_helper_init(crtc);
1500 crtc->name, ret);
1504 DRM_DEBUG_KMS("%s: successfully initialized crtc\n", dpu_crtc->name);
1505 return crtc;