Lines Matching refs:crtc

97 static bool vc4_crtc_get_scanout_position(struct drm_crtc *crtc,
103 struct drm_device *dev = crtc->dev;
106 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
107 struct vc4_crtc_state *vc4_crtc_state = to_vc4_crtc_state(crtc->state);
293 struct drm_encoder *vc4_get_crtc_encoder(struct drm_crtc *crtc,
300 drm_for_each_encoder_mask(encoder, crtc->dev, state->encoder_mask)
306 static void vc4_crtc_pixelvalve_reset(struct drm_crtc *crtc)
308 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
309 struct drm_device *dev = crtc->dev;
322 static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encoder,
325 struct drm_device *dev = crtc->dev;
328 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
330 struct drm_crtc_state *crtc_state = crtc->state;
356 drm_crtc_index(crtc));
360 vc4_crtc_pixelvalve_reset(crtc);
449 drm_crtc_index(crtc));
465 static int vc4_crtc_disable(struct drm_crtc *crtc,
471 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
472 struct drm_device *dev = crtc->dev;
505 vc4_crtc_pixelvalve_reset(crtc);
516 int vc4_crtc_disable_at_boot(struct drm_crtc *crtc)
518 struct drm_device *drm = crtc->dev;
520 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
560 ret = vc4_crtc_disable(crtc, encoder, NULL, channel);
573 void vc4_crtc_send_vblank(struct drm_crtc *crtc)
575 struct drm_device *dev = crtc->dev;
578 if (!crtc->state || !crtc->state->event)
582 drm_crtc_send_vblank_event(crtc, crtc->state->event);
583 crtc->state->event = NULL;
587 static void vc4_crtc_atomic_disable(struct drm_crtc *crtc,
591 crtc);
593 struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, old_state);
594 struct drm_device *dev = crtc->dev;
597 crtc->name, crtc->base.id, encoder->name, encoder->base.id);
601 /* Disable vblank irq handling before crtc is disabled. */
602 drm_crtc_vblank_off(crtc);
604 vc4_crtc_disable(crtc, encoder, state, old_vc4_state->assigned_channel);
610 vc4_crtc_send_vblank(crtc);
613 static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
617 crtc);
618 struct drm_device *dev = crtc->dev;
619 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
620 struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, new_state);
625 crtc->name, crtc->base.id, encoder->name, encoder->base.id);
632 /* Enable vblank irq handling before crtc is started otherwise
635 drm_crtc_vblank_on(crtc);
637 vc4_hvs_atomic_enable(crtc, state);
642 vc4_crtc_config_pv(crtc, encoder, state);
661 static enum drm_mode_status vc4_crtc_mode_valid(struct drm_crtc *crtc,
667 crtc->base.id);
694 if (conn_state->crtc != state->crtc)
705 int vc4_crtc_atomic_check(struct drm_crtc *crtc,
709 crtc);
716 ret = vc4_hvs_atomic_check(crtc, state);
720 encoder = vc4_get_crtc_encoder(crtc, crtc_state);
735 if (conn_state->crtc != crtc)
748 static int vc4_enable_vblank(struct drm_crtc *crtc)
750 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
751 struct drm_device *dev = crtc->dev;
764 static void vc4_disable_vblank(struct drm_crtc *crtc)
766 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
767 struct drm_device *dev = crtc->dev;
780 struct drm_crtc *crtc = &vc4_crtc->base;
781 struct drm_device *dev = crtc->dev;
792 drm_crtc_send_vblank_event(crtc, vc4_crtc->event);
794 drm_crtc_vblank_put(crtc);
808 void vc4_crtc_handle_vblank(struct vc4_crtc *crtc)
810 crtc->t_vblank = ktime_get();
811 drm_crtc_handle_vblank(&crtc->base);
812 vc4_crtc_handle_page_flip(crtc);
831 struct drm_crtc *crtc;
848 struct drm_crtc *crtc = flip_state->crtc;
849 struct drm_device *dev = crtc->dev;
850 struct drm_plane *plane = crtc->primary;
857 drm_crtc_send_vblank_event(crtc, flip_state->event);
861 drm_crtc_vblank_put(crtc);
942 vc4_async_page_flip_common(struct drm_crtc *crtc,
947 struct drm_device *dev = crtc->dev;
948 struct drm_plane *plane = crtc->primary;
957 flip_state->crtc = crtc;
972 WARN_ON(drm_crtc_vblank_get(crtc) != 0);
992 static int vc4_async_page_flip(struct drm_crtc *crtc,
997 struct drm_device *dev = crtc->dev;
1019 ret = vc4_async_page_flip_common(crtc, fb, event, flags);
1028 static int vc5_async_page_flip(struct drm_crtc *crtc,
1033 return vc4_async_page_flip_common(crtc, fb, event, flags);
1036 int vc4_page_flip(struct drm_crtc *crtc,
1043 struct drm_device *dev = crtc->dev;
1047 return vc5_async_page_flip(crtc, fb, event, flags);
1049 return vc4_async_page_flip(crtc, fb, event, flags);
1051 return drm_atomic_helper_page_flip(crtc, fb, event, flags, ctx);
1055 struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc)
1063 old_vc4_state = to_vc4_crtc_state(crtc->state);
1067 __drm_atomic_helper_crtc_duplicate_state(crtc, &vc4_state->base);
1071 void vc4_crtc_destroy_state(struct drm_crtc *crtc,
1074 struct vc4_dev *vc4 = to_vc4_dev(crtc->dev);
1086 drm_atomic_helper_crtc_destroy_state(crtc, state);
1089 void vc4_crtc_reset(struct drm_crtc *crtc)
1093 if (crtc->state)
1094 vc4_crtc_destroy_state(crtc, crtc->state);
1098 crtc->state = NULL;
1103 __drm_atomic_helper_crtc_reset(crtc, &vc4_crtc_state->base);
1106 int vc4_crtc_late_register(struct drm_crtc *crtc)
1108 struct drm_device *drm = crtc->dev;
1109 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
1273 struct drm_crtc *crtc)
1275 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
1291 encoder->possible_crtcs |= drm_crtc_mask(crtc);
1326 struct drm_crtc *crtc = &vc4_crtc->base;
1334 ret = drmm_crtc_init_with_planes(drm, crtc, primary_plane, NULL,
1339 drm_crtc_helper_add(crtc, crtc_helper_funcs);
1342 drm_mode_crtc_set_gamma_size(crtc, ARRAY_SIZE(vc4_crtc->lut_r));
1344 drm_crtc_enable_color_mgmt(crtc, 0, false, crtc->gamma_size);
1349 drm_crtc_enable_color_mgmt(crtc, 0, true, crtc->gamma_size);
1352 for (i = 0; i < crtc->gamma_size; i++) {
1392 struct drm_crtc *crtc;
1398 crtc = &vc4_crtc->base;
1417 vc4_set_crtc_possible_masks(drm, crtc);
1424 "vc4 crtc", vc4_crtc);