Lines Matching full:crtc

176 drm_crtc_vblank_crtc(struct drm_crtc *crtc)  in drm_crtc_vblank_crtc()  argument
178 return drm_vblank_crtc(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_crtc()
218 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in __get_vblank_counter() local
220 if (drm_WARN_ON(dev, !crtc)) in __get_vblank_counter()
223 if (crtc->funcs->get_vblank_counter) in __get_vblank_counter()
224 return crtc->funcs->get_vblank_counter(crtc); in __get_vblank_counter()
326 drm_dbg_vbl(dev, "crtc %u: Calculating number of vblanks." in drm_update_vblank_count()
333 drm_dbg_vbl(dev, "crtc %u: Redundant vblirq ignored\n", in drm_update_vblank_count()
351 "clamping vblank bump to 1 on crtc %u: diffr=%u" in drm_update_vblank_count()
356 drm_dbg_vbl(dev, "updating vblank count on crtc %u:" in drm_update_vblank_count()
402 * @crtc: which counter to retrieve
411 u64 drm_crtc_accurate_vblank_count(struct drm_crtc *crtc) in drm_crtc_accurate_vblank_count() argument
413 struct drm_device *dev = crtc->dev; in drm_crtc_accurate_vblank_count()
414 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_accurate_vblank_count()
419 !crtc->funcs->get_vblank_timestamp, in drm_crtc_accurate_vblank_count()
436 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in __disable_vblank() local
438 if (drm_WARN_ON(dev, !crtc)) in __disable_vblank()
441 if (crtc->funcs->disable_vblank) in __disable_vblank()
442 crtc->funcs->disable_vblank(crtc); in __disable_vblank()
447 * Disable vblank irq's on crtc, make sure that last vblank count
498 drm_dbg_core(dev, "disabling vblank on crtc %u\n", pipe); in vblank_disable_fn()
587 * drm_crtc_vblank_waitqueue - get vblank waitqueue for the CRTC
588 * @crtc: which CRTC's vblank waitqueue to retrieve
590 * This function returns a pointer to the vblank waitqueue for the CRTC.
594 wait_queue_head_t *drm_crtc_vblank_waitqueue(struct drm_crtc *crtc) in drm_crtc_vblank_waitqueue() argument
596 return &crtc->dev->vblank[drm_crtc_index(crtc)].queue; in drm_crtc_vblank_waitqueue()
603 * @crtc: drm_crtc whose timestamp constants should be updated.
609 * CRTC's true scanout timing, so they take things like panel scaling or
612 void drm_calc_timestamping_constants(struct drm_crtc *crtc, in drm_calc_timestamping_constants() argument
615 struct drm_device *dev = crtc->dev; in drm_calc_timestamping_constants()
616 unsigned int pipe = drm_crtc_index(crtc); in drm_calc_timestamping_constants()
617 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_calc_timestamping_constants()
645 drm_err(dev, "crtc %u: Can't calculate constants, dotclock = 0!\n", in drm_calc_timestamping_constants()
646 crtc->base.id); in drm_calc_timestamping_constants()
654 "crtc %u: hwmode: htotal %d, vtotal %d, vdisplay %d\n", in drm_calc_timestamping_constants()
655 crtc->base.id, mode->crtc_htotal, in drm_calc_timestamping_constants()
657 drm_dbg_core(dev, "crtc %u: clock %d kHz framedur %d linedur %d\n", in drm_calc_timestamping_constants()
658 crtc->base.id, dotclock, framedur_ns, linedur_ns); in drm_calc_timestamping_constants()
665 * @crtc: CRTC whose vblank timestamp to retrieve
678 * timings and current video scanout position of a CRTC.
686 * enabling a CRTC. The atomic helpers already take care of that in
695 struct drm_crtc *crtc, int *max_error, ktime_t *vblank_time, in drm_crtc_vblank_helper_get_vblank_timestamp_internal() argument
699 struct drm_device *dev = crtc->dev; in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
700 unsigned int pipe = crtc->index; in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
710 drm_err(dev, "Invalid crtc %u\n", pipe); in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
716 drm_err(dev, "Called from CRTC w/o get_scanout_position()!?\n"); in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
723 mode = &crtc->hwmode; in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
726 * Happens during initial modesetting of a crtc. in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
729 drm_dbg_core(dev, "crtc %u: Noop due to uninitialized mode.\n", in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
747 vbl_status = get_scanout_position(crtc, in_vblank_irq, in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
755 "crtc %u : scanoutpos query failed.\n", in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
771 "crtc %u: Noisy timestamp %d us > %d us [%d reps].\n", in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
797 "crtc %u : v p(%d,%d)@ %lld.%06ld -> %lld.%06ld [e %d us, %d rep]\n", in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
810 * @crtc: CRTC whose vblank timestamp to retrieve
820 * timings and current video scanout position of a CRTC. This can be directly
830 * enabling a CRTC. The atomic helpers already take care of that in
837 bool drm_crtc_vblank_helper_get_vblank_timestamp(struct drm_crtc *crtc, in drm_crtc_vblank_helper_get_vblank_timestamp() argument
843 crtc, max_error, vblank_time, in_vblank_irq, in drm_crtc_vblank_helper_get_vblank_timestamp()
844 crtc->helper_private->get_scanout_position); in drm_crtc_vblank_helper_get_vblank_timestamp()
851 * @crtc: CRTC whose vblank timestamp to retrieve
859 * vblank interval on specified CRTC. May call into kms-driver to
869 drm_crtc_get_last_vbltimestamp(struct drm_crtc *crtc, ktime_t *tvblank, in drm_crtc_get_last_vbltimestamp() argument
878 if (crtc && crtc->funcs->get_vblank_timestamp && max_error > 0) { in drm_crtc_get_last_vbltimestamp()
879 ret = crtc->funcs->get_vblank_timestamp(crtc, &max_error, in drm_crtc_get_last_vbltimestamp()
896 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in drm_get_last_vbltimestamp() local
898 return drm_crtc_get_last_vbltimestamp(crtc, tvblank, in_vblank_irq); in drm_get_last_vbltimestamp()
903 * @crtc: which counter to retrieve
922 u64 drm_crtc_vblank_count(struct drm_crtc *crtc) in drm_crtc_vblank_count() argument
924 return drm_vblank_count(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_count()
932 * @pipe: index of CRTC whose counter to retrieve
966 * @crtc: which counter to retrieve
982 u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc, in drm_crtc_vblank_count_and_time() argument
985 return drm_vblank_count_and_time(crtc->dev, drm_crtc_index(crtc), in drm_crtc_vblank_count_and_time()
992 * @crtc: the crtc for which to calculate next vblank time
998 int drm_crtc_next_vblank_start(struct drm_crtc *crtc, ktime_t *vblanktime) in drm_crtc_next_vblank_start() argument
1004 if (!drm_dev_has_vblank(crtc->dev)) in drm_crtc_next_vblank_start()
1007 vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_next_vblank_start()
1013 if (!drm_crtc_get_last_vbltimestamp(crtc, vblanktime, false)) in drm_crtc_next_vblank_start()
1063 * @crtc: the source CRTC of the vblank event
1099 void drm_crtc_arm_vblank_event(struct drm_crtc *crtc, in drm_crtc_arm_vblank_event() argument
1102 struct drm_device *dev = crtc->dev; in drm_crtc_arm_vblank_event()
1103 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_arm_vblank_event()
1108 e->sequence = drm_crtc_accurate_vblank_count(crtc) + 1; in drm_crtc_arm_vblank_event()
1115 * @crtc: the source CRTC of the vblank event
1124 void drm_crtc_send_vblank_event(struct drm_crtc *crtc, in drm_crtc_send_vblank_event() argument
1127 struct drm_device *dev = crtc->dev; in drm_crtc_send_vblank_event()
1129 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_send_vblank_event()
1147 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in __enable_vblank() local
1149 if (drm_WARN_ON(dev, !crtc)) in __enable_vblank()
1152 if (crtc->funcs->enable_vblank) in __enable_vblank()
1153 return crtc->funcs->enable_vblank(crtc); in __enable_vblank()
1177 drm_dbg_core(dev, "enabling vblank on crtc %u, ret: %d\n", in drm_vblank_enable()
1226 * @crtc: which CRTC to own
1234 int drm_crtc_vblank_get(struct drm_crtc *crtc) in drm_crtc_vblank_get() argument
1236 return drm_vblank_get(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_get()
1265 * @crtc: which counter to give up
1271 void drm_crtc_vblank_put(struct drm_crtc *crtc) in drm_crtc_vblank_put() argument
1273 drm_vblank_put(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_vblank_put()
1280 * @pipe: CRTC index
1284 * due to lack of driver support or because the crtc is off.
1298 if (drm_WARN(dev, ret, "vblank not available on crtc %i, ret=%i\n", in drm_wait_one_vblank()
1308 drm_WARN(dev, ret == 0, "vblank wait timed out on crtc %i\n", pipe); in drm_wait_one_vblank()
1316 * @crtc: DRM crtc
1318 * This waits for one vblank to pass on @crtc, using the irq driver interfaces.
1319 * It is a failure to call this when the vblank irq for @crtc is disabled, e.g.
1320 * due to lack of driver support or because the crtc is off.
1322 void drm_crtc_wait_one_vblank(struct drm_crtc *crtc) in drm_crtc_wait_one_vblank() argument
1324 drm_wait_one_vblank(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_wait_one_vblank()
1329 * drm_crtc_vblank_off - disable vblank events on a CRTC
1330 * @crtc: CRTC in question
1333 * disabling a crtc. This function ensures that the latest vblank frame count is
1337 * reset, e.g. when suspending or disabling the @crtc in general.
1339 void drm_crtc_vblank_off(struct drm_crtc *crtc) in drm_crtc_vblank_off() argument
1341 struct drm_device *dev = crtc->dev; in drm_crtc_vblank_off()
1342 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_vblank_off()
1343 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_vblank_off()
1358 drm_dbg_vbl(dev, "crtc %d, vblank enabled %d, inmodeset %d\n", in drm_crtc_vblank_off()
1397 /* Will be reset by the modeset helpers when re-enabling the crtc by in drm_crtc_vblank_off()
1407 * drm_crtc_vblank_reset - reset vblank state to off on a CRTC
1408 * @crtc: CRTC in question
1418 void drm_crtc_vblank_reset(struct drm_crtc *crtc) in drm_crtc_vblank_reset() argument
1420 struct drm_device *dev = crtc->dev; in drm_crtc_vblank_reset()
1421 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_vblank_reset()
1441 * @crtc: CRTC in question
1444 * Update the maximum hardware vblank counter value for @crtc
1456 void drm_crtc_set_max_vblank_count(struct drm_crtc *crtc, in drm_crtc_set_max_vblank_count() argument
1459 struct drm_device *dev = crtc->dev; in drm_crtc_set_max_vblank_count()
1460 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_set_max_vblank_count()
1470 * drm_crtc_vblank_on_config - enable vblank events on a CRTC with custom
1472 * @crtc: CRTC in question
1476 * custom vblank configuration for a given CRTC.
1482 void drm_crtc_vblank_on_config(struct drm_crtc *crtc, in drm_crtc_vblank_on_config() argument
1485 struct drm_device *dev = crtc->dev; in drm_crtc_vblank_on_config()
1486 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_vblank_on_config()
1487 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_vblank_on_config()
1493 drm_dbg_vbl(dev, "crtc %d, vblank enabled %d, inmodeset %d\n", in drm_crtc_vblank_on_config()
1517 * drm_crtc_vblank_on - enable vblank events on a CRTC
1518 * @crtc: CRTC in question
1521 * drm_crtc_vblank_off() again and is generally called when enabling @crtc. Note
1524 * reflect the current hardware state of the crtc.
1528 void drm_crtc_vblank_on(struct drm_crtc *crtc) in drm_crtc_vblank_on() argument
1532 .disable_immediate = crtc->dev->vblank_disable_immediate in drm_crtc_vblank_on()
1535 drm_crtc_vblank_on_config(crtc, &config); in drm_crtc_vblank_on()
1579 * @crtc: CRTC in question
1593 void drm_crtc_vblank_restore(struct drm_crtc *crtc) in drm_crtc_vblank_restore() argument
1595 struct drm_device *dev = crtc->dev; in drm_crtc_vblank_restore()
1596 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_vblank_restore()
1599 drm_WARN_ON_ONCE(dev, !crtc->funcs->get_vblank_timestamp); in drm_crtc_vblank_restore()
1630 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in drm_queue_vblank_event() local
1632 if (crtc) in drm_queue_vblank_event()
1633 e->event.vbl.crtc_id = crtc->base.id; in drm_queue_vblank_event()
1657 drm_dbg_core(dev, "event on vblank count %llu, current %llu, crtc %u\n", in drm_queue_vblank_event()
1737 struct drm_crtc *crtc; in drm_wait_vblank_ioctl() local
1769 /* Convert lease-relative crtc index into global crtc index */ in drm_wait_vblank_ioctl()
1772 drm_for_each_crtc(crtc, dev) { in drm_wait_vblank_ioctl()
1773 if (drm_lease_held(file_priv, crtc->base.id)) { in drm_wait_vblank_ioctl()
1802 "crtc %d failed to acquire vblank counter, %d\n", in drm_wait_vblank_ioctl()
1839 drm_dbg_core(dev, "waiting on vblank count %llu, crtc %u\n", in drm_wait_vblank_ioctl()
1864 drm_dbg_core(dev, "crtc %d returning %u to client\n", in drm_wait_vblank_ioctl()
1867 drm_dbg_core(dev, "crtc %d vblank wait interrupted by signal\n", in drm_wait_vblank_ioctl()
1878 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in drm_handle_vblank_events() local
1902 if (crtc && crtc->funcs->get_vblank_timestamp) in drm_handle_vblank_events()
1911 * @pipe: index of CRTC where this event occurred
1974 * @crtc: where this event occurred
1992 bool drm_crtc_handle_vblank(struct drm_crtc *crtc) in drm_crtc_handle_vblank() argument
1994 return drm_handle_vblank(crtc->dev, drm_crtc_index(crtc)); in drm_crtc_handle_vblank()
1999 * Get crtc VBLANK count.
2009 struct drm_crtc *crtc; in drm_crtc_get_sequence_ioctl() local
2023 crtc = drm_crtc_find(dev, file_priv, get_seq->crtc_id); in drm_crtc_get_sequence_ioctl()
2024 if (!crtc) in drm_crtc_get_sequence_ioctl()
2027 pipe = drm_crtc_index(crtc); in drm_crtc_get_sequence_ioctl()
2029 vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_get_sequence_ioctl()
2034 ret = drm_crtc_vblank_get(crtc); in drm_crtc_get_sequence_ioctl()
2037 "crtc %d failed to acquire vblank counter, %d\n", in drm_crtc_get_sequence_ioctl()
2042 drm_modeset_lock(&crtc->mutex, NULL); in drm_crtc_get_sequence_ioctl()
2043 if (crtc->state) in drm_crtc_get_sequence_ioctl()
2044 get_seq->active = crtc->state->enable; in drm_crtc_get_sequence_ioctl()
2046 get_seq->active = crtc->enabled; in drm_crtc_get_sequence_ioctl()
2047 drm_modeset_unlock(&crtc->mutex); in drm_crtc_get_sequence_ioctl()
2051 drm_crtc_vblank_put(crtc); in drm_crtc_get_sequence_ioctl()
2066 struct drm_crtc *crtc; in drm_crtc_queue_sequence_ioctl() local
2083 crtc = drm_crtc_find(dev, file_priv, queue_seq->crtc_id); in drm_crtc_queue_sequence_ioctl()
2084 if (!crtc) in drm_crtc_queue_sequence_ioctl()
2093 pipe = drm_crtc_index(crtc); in drm_crtc_queue_sequence_ioctl()
2095 vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_queue_sequence_ioctl()
2101 ret = drm_crtc_vblank_get(crtc); in drm_crtc_queue_sequence_ioctl()
2104 "crtc %d failed to acquire vblank counter, %d\n", in drm_crtc_queue_sequence_ioctl()
2145 drm_crtc_vblank_put(crtc); in drm_crtc_queue_sequence_ioctl()
2159 drm_crtc_vblank_put(crtc); in drm_crtc_queue_sequence_ioctl()