Lines Matching refs:crtc
81 static struct mdp5_kms *get_kms(struct drm_crtc *crtc) in get_kms() argument
83 struct msm_drm_private *priv = crtc->dev->dev_private; in get_kms()
87 static void request_pending(struct drm_crtc *crtc, uint32_t pending) in request_pending() argument
89 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in request_pending()
92 mdp_irq_register(&get_kms(crtc)->base, &mdp5_crtc->vblank); in request_pending()
95 static void request_pp_done_pending(struct drm_crtc *crtc) in request_pp_done_pending() argument
97 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in request_pp_done_pending()
101 static u32 crtc_flush(struct drm_crtc *crtc, u32 flush_mask) in crtc_flush() argument
103 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in crtc_flush()
114 static u32 crtc_flush_all(struct drm_crtc *crtc) in crtc_flush_all() argument
116 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in crtc_flush_all()
124 drm_atomic_crtc_for_each_plane(plane, crtc) { in crtc_flush_all()
130 return crtc_flush(crtc, flush_mask); in crtc_flush_all()
134 static void complete_flip(struct drm_crtc *crtc, struct drm_file *file) in complete_flip() argument
136 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in complete_flip()
137 struct drm_device *dev = crtc->dev; in complete_flip()
157 drm_atomic_crtc_for_each_plane(plane, crtc) { in complete_flip()
161 if (mdp5_crtc->ctl && !crtc->state->enable) { in complete_flip()
178 static void mdp5_crtc_destroy(struct drm_crtc *crtc) in mdp5_crtc_destroy() argument
180 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_destroy()
182 drm_crtc_cleanup(crtc); in mdp5_crtc_destroy()
188 static bool mdp5_crtc_mode_fixup(struct drm_crtc *crtc, in mdp5_crtc_mode_fixup() argument
202 static void blend_setup(struct drm_crtc *crtc) in blend_setup() argument
204 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in blend_setup()
205 struct mdp5_kms *mdp5_kms = get_kms(crtc); in blend_setup()
226 drm_atomic_crtc_for_each_plane(plane, crtc) { in blend_setup()
297 static void mdp5_crtc_mode_set_nofb(struct drm_crtc *crtc) in mdp5_crtc_mode_set_nofb() argument
299 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_mode_set_nofb()
300 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_mode_set_nofb()
304 if (WARN_ON(!crtc->state)) in mdp5_crtc_mode_set_nofb()
307 mode = &crtc->state->adjusted_mode; in mdp5_crtc_mode_set_nofb()
325 static void mdp5_crtc_disable(struct drm_crtc *crtc) in mdp5_crtc_disable() argument
327 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_disable()
328 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_disable()
344 static void mdp5_crtc_enable(struct drm_crtc *crtc) in mdp5_crtc_enable() argument
346 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_enable()
347 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_enable()
375 static int mdp5_crtc_atomic_check(struct drm_crtc *crtc, in mdp5_crtc_atomic_check() argument
378 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_atomic_check()
379 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_atomic_check()
381 struct drm_device *dev = crtc->dev; in mdp5_crtc_atomic_check()
425 static void mdp5_crtc_atomic_begin(struct drm_crtc *crtc, in mdp5_crtc_atomic_begin() argument
428 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_atomic_begin()
432 static void mdp5_crtc_atomic_flush(struct drm_crtc *crtc, in mdp5_crtc_atomic_flush() argument
435 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_atomic_flush()
436 struct drm_device *dev = crtc->dev; in mdp5_crtc_atomic_flush()
439 DBG("%s: event: %p", mdp5_crtc->name, crtc->state->event); in mdp5_crtc_atomic_flush()
444 mdp5_crtc->event = crtc->state->event; in mdp5_crtc_atomic_flush()
455 blend_setup(crtc); in mdp5_crtc_atomic_flush()
464 request_pp_done_pending(crtc); in mdp5_crtc_atomic_flush()
466 mdp5_crtc->flushed_mask = crtc_flush_all(crtc); in mdp5_crtc_atomic_flush()
468 request_pending(crtc, PENDING_FLIP); in mdp5_crtc_atomic_flush()
471 static int mdp5_crtc_set_property(struct drm_crtc *crtc, in mdp5_crtc_set_property() argument
478 static void get_roi(struct drm_crtc *crtc, uint32_t *roi_w, uint32_t *roi_h) in get_roi() argument
480 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in get_roi()
481 uint32_t xres = crtc->mode.hdisplay; in get_roi()
482 uint32_t yres = crtc->mode.vdisplay; in get_roi()
504 static int mdp5_crtc_cursor_set(struct drm_crtc *crtc, in mdp5_crtc_cursor_set() argument
508 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_cursor_set()
509 struct drm_device *dev = crtc->dev; in mdp5_crtc_cursor_set()
510 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_cursor_set()
554 get_roi(crtc, &roi_w, &roi_h); in mdp5_crtc_cursor_set()
581 crtc_flush(crtc, flush_mask); in mdp5_crtc_cursor_set()
587 request_pending(crtc, PENDING_CURSOR); in mdp5_crtc_cursor_set()
592 static int mdp5_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) in mdp5_crtc_cursor_move() argument
594 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_cursor_move()
595 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_cursor_move()
602 if (unlikely(!crtc->state->enable)) in mdp5_crtc_cursor_move()
608 get_roi(crtc, &roi_w, &roi_h); in mdp5_crtc_cursor_move()
619 crtc_flush(crtc, flush_mask); in mdp5_crtc_cursor_move()
649 struct drm_crtc *crtc = &mdp5_crtc->base; in mdp5_crtc_vblank_irq() local
650 struct msm_drm_private *priv = crtc->dev->dev_private; in mdp5_crtc_vblank_irq()
653 mdp_irq_unregister(&get_kms(crtc)->base, &mdp5_crtc->vblank); in mdp5_crtc_vblank_irq()
658 complete_flip(crtc, NULL); in mdp5_crtc_vblank_irq()
680 static void mdp5_crtc_wait_for_pp_done(struct drm_crtc *crtc) in mdp5_crtc_wait_for_pp_done() argument
682 struct drm_device *dev = crtc->dev; in mdp5_crtc_wait_for_pp_done()
683 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_wait_for_pp_done()
692 static void mdp5_crtc_wait_for_flush_done(struct drm_crtc *crtc) in mdp5_crtc_wait_for_flush_done() argument
694 struct drm_device *dev = crtc->dev; in mdp5_crtc_wait_for_flush_done()
695 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_wait_for_flush_done()
702 ret = drm_crtc_vblank_get(crtc); in mdp5_crtc_wait_for_flush_done()
706 ret = wait_event_timeout(dev->vblank[drm_crtc_index(crtc)].queue, in mdp5_crtc_wait_for_flush_done()
715 drm_crtc_vblank_put(crtc); in mdp5_crtc_wait_for_flush_done()
718 uint32_t mdp5_crtc_vblank(struct drm_crtc *crtc) in mdp5_crtc_vblank() argument
720 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_vblank()
724 void mdp5_crtc_cancel_pending_flip(struct drm_crtc *crtc, struct drm_file *file) in mdp5_crtc_cancel_pending_flip() argument
727 complete_flip(crtc, file); in mdp5_crtc_cancel_pending_flip()
730 void mdp5_crtc_set_pipeline(struct drm_crtc *crtc, in mdp5_crtc_set_pipeline() argument
733 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_set_pipeline()
734 struct mdp5_kms *mdp5_kms = get_kms(crtc); in mdp5_crtc_set_pipeline()
735 int lm = mdp5_crtc_get_lm(crtc); in mdp5_crtc_set_pipeline()
758 int mdp5_crtc_get_lm(struct drm_crtc *crtc) in mdp5_crtc_get_lm() argument
760 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_get_lm()
761 return WARN_ON(!crtc) ? -EINVAL : mdp5_crtc->lm; in mdp5_crtc_get_lm()
764 void mdp5_crtc_wait_for_commit_done(struct drm_crtc *crtc) in mdp5_crtc_wait_for_commit_done() argument
766 struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); in mdp5_crtc_wait_for_commit_done()
769 mdp5_crtc_wait_for_pp_done(crtc); in mdp5_crtc_wait_for_commit_done()
771 mdp5_crtc_wait_for_flush_done(crtc); in mdp5_crtc_wait_for_commit_done()
778 struct drm_crtc *crtc = NULL; in mdp5_crtc_init() local
785 crtc = &mdp5_crtc->base; in mdp5_crtc_init()
800 drm_crtc_init_with_planes(dev, crtc, plane, NULL, &mdp5_crtc_funcs); in mdp5_crtc_init()
805 drm_crtc_helper_add(crtc, &mdp5_crtc_helper_funcs); in mdp5_crtc_init()
806 plane->crtc = crtc; in mdp5_crtc_init()
808 return crtc; in mdp5_crtc_init()