Lines Matching refs:vblank

172 	return &dev->vblank[pipe];  in drm_vblank_crtc()
186 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in store_vblank() local
190 vblank->last = last; in store_vblank()
192 write_seqlock(&vblank->seqlock); in store_vblank()
193 vblank->time = t_vblank; in store_vblank()
194 atomic64_add(vblank_count_inc, &vblank->count); in store_vblank()
195 write_sequnlock(&vblank->seqlock); in store_vblank()
200 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_max_vblank_count() local
202 return vblank->max_vblank_count ?: dev->max_vblank_count; in drm_max_vblank_count()
289 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_update_vblank_count() local
294 int framedur_ns = vblank->framedur_ns; in drm_update_vblank_count()
316 diff = (cur_vblank - vblank->last) & max_vblank_count; in drm_update_vblank_count()
318 u64 diff_ns = ktime_to_ns(ktime_sub(t_vblank, vblank->time)); in drm_update_vblank_count()
349 if (diff > 1 && (vblank->inmodeset & 0x2)) { in drm_update_vblank_count()
358 pipe, (unsigned long long)atomic64_read(&vblank->count), in drm_update_vblank_count()
359 diff, cur_vblank, vblank->last); in drm_update_vblank_count()
362 drm_WARN_ON_ONCE(dev, cur_vblank != vblank->last); in drm_update_vblank_count()
380 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_vblank_count() local
386 count = atomic64_read(&vblank->count); in drm_vblank_count()
415 u64 vblank; in drm_crtc_accurate_vblank_count() local
425 vblank = drm_vblank_count(dev, pipe); in drm_crtc_accurate_vblank_count()
429 return vblank; in drm_crtc_accurate_vblank_count()
454 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_vblank_disable_and_save() local
471 if (!vblank->enabled) in drm_vblank_disable_and_save()
482 vblank->enabled = false; in drm_vblank_disable_and_save()
490 struct drm_vblank_crtc *vblank = timer_container_of(vblank, t, in vblank_disable_fn() local
492 struct drm_device *dev = vblank->dev; in vblank_disable_fn()
493 unsigned int pipe = vblank->pipe; in vblank_disable_fn()
497 if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) { in vblank_disable_fn()
506 struct drm_vblank_crtc *vblank = ptr; in drm_vblank_init_release() local
508 drm_WARN_ON(dev, READ_ONCE(vblank->enabled) && in drm_vblank_init_release()
511 drm_vblank_destroy_worker(vblank); in drm_vblank_init_release()
512 timer_delete_sync(&vblank->disable_timer); in drm_vblank_init_release()
535 dev->vblank = drmm_kcalloc(dev, num_crtcs, sizeof(*dev->vblank), GFP_KERNEL); in drm_vblank_init()
536 if (!dev->vblank) in drm_vblank_init()
542 struct drm_vblank_crtc *vblank = &dev->vblank[i]; in drm_vblank_init() local
544 vblank->dev = dev; in drm_vblank_init()
545 vblank->pipe = i; in drm_vblank_init()
546 init_waitqueue_head(&vblank->queue); in drm_vblank_init()
547 timer_setup(&vblank->disable_timer, vblank_disable_fn, 0); in drm_vblank_init()
548 seqlock_init(&vblank->seqlock); in drm_vblank_init()
551 vblank); in drm_vblank_init()
555 ret = drm_vblank_worker_init(vblank); in drm_vblank_init()
596 return &crtc->dev->vblank[drm_crtc_index(crtc)].queue; in drm_crtc_vblank_waitqueue()
617 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_calc_timestamping_constants() local
649 vblank->linedur_ns = linedur_ns; in drm_calc_timestamping_constants()
650 vblank->framedur_ns = framedur_ns; in drm_calc_timestamping_constants()
651 drm_mode_copy(&vblank->hwmode, mode); in drm_calc_timestamping_constants()
701 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_crtc_vblank_helper_get_vblank_timestamp_internal() local
721 mode = &vblank->hwmode; in drm_crtc_vblank_helper_get_vblank_timestamp_internal()
945 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_vblank_count_and_time() local
955 seq = read_seqbegin(&vblank->seqlock); in drm_vblank_count_and_time()
956 vblank_count = atomic64_read(&vblank->count); in drm_vblank_count_and_time()
957 *vblanktime = vblank->time; in drm_vblank_count_and_time()
958 } while (read_seqretry(&vblank->seqlock, seq)); in drm_vblank_count_and_time()
1000 struct drm_vblank_crtc *vblank; in drm_crtc_next_vblank_start() local
1007 vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_next_vblank_start()
1008 mode = &vblank->hwmode; in drm_crtc_next_vblank_start()
1010 if (!vblank->framedur_ns || !vblank->linedur_ns) in drm_crtc_next_vblank_start()
1017 (u64)vblank->framedur_ns * mode->crtc_vblank_start, in drm_crtc_next_vblank_start()
1161 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_vblank_enable() local
1168 if (!vblank->enabled) { in drm_vblank_enable()
1180 atomic_dec(&vblank->refcount); in drm_vblank_enable()
1188 WRITE_ONCE(vblank->enabled, true); in drm_vblank_enable()
1199 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_vblank_get() local
1211 if (atomic_add_return(1, &vblank->refcount) == 1) { in drm_vblank_get()
1214 if (!vblank->enabled) { in drm_vblank_get()
1215 atomic_dec(&vblank->refcount); in drm_vblank_get()
1242 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_vblank_put() local
1243 int vblank_offdelay = vblank->config.offdelay_ms; in drm_vblank_put()
1248 if (drm_WARN_ON(dev, atomic_read(&vblank->refcount) == 0)) in drm_vblank_put()
1252 if (atomic_dec_and_test(&vblank->refcount)) { in drm_vblank_put()
1256 vblank_disable_fn(&vblank->disable_timer); in drm_vblank_put()
1257 else if (!vblank->config.disable_immediate) in drm_vblank_put()
1258 mod_timer(&vblank->disable_timer, in drm_vblank_put()
1290 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_wait_one_vblank() local
1304 ret = wait_event_timeout(vblank->queue, in drm_wait_one_vblank()
1343 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_vblank_off() local
1359 pipe, vblank->enabled, vblank->inmodeset); in drm_crtc_vblank_off()
1363 if (drm_core_check_feature(dev, DRIVER_ATOMIC) || !vblank->inmodeset) in drm_crtc_vblank_off()
1366 wake_up(&vblank->queue); in drm_crtc_vblank_off()
1372 if (!vblank->inmodeset) { in drm_crtc_vblank_off()
1373 atomic_inc(&vblank->refcount); in drm_crtc_vblank_off()
1374 vblank->inmodeset = 1; in drm_crtc_vblank_off()
1393 drm_vblank_cancel_pending_works(vblank); in drm_crtc_vblank_off()
1399 vblank->hwmode.crtc_clock = 0; in drm_crtc_vblank_off()
1402 drm_vblank_flush_worker(vblank); in drm_crtc_vblank_off()
1421 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_vblank_reset() local
1428 if (!vblank->inmodeset) { in drm_crtc_vblank_reset()
1429 atomic_inc(&vblank->refcount); in drm_crtc_vblank_reset()
1430 vblank->inmodeset = 1; in drm_crtc_vblank_reset()
1435 drm_WARN_ON(dev, !list_empty(&vblank->pending_work)); in drm_crtc_vblank_reset()
1460 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_set_max_vblank_count() local
1463 drm_WARN_ON(dev, !READ_ONCE(vblank->inmodeset)); in drm_crtc_set_max_vblank_count()
1465 vblank->max_vblank_count = max_vblank_count; in drm_crtc_set_max_vblank_count()
1487 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_vblank_on_config() local
1494 pipe, vblank->enabled, vblank->inmodeset); in drm_crtc_vblank_on_config()
1496 vblank->config = *config; in drm_crtc_vblank_on_config()
1499 if (vblank->inmodeset) { in drm_crtc_vblank_on_config()
1500 atomic_dec(&vblank->refcount); in drm_crtc_vblank_on_config()
1501 vblank->inmodeset = 0; in drm_crtc_vblank_on_config()
1510 if (atomic_read(&vblank->refcount) != 0 || !vblank->config.offdelay_ms) in drm_crtc_vblank_on_config()
1542 struct drm_vblank_crtc *vblank; in drm_vblank_restore() local
1555 vblank = drm_vblank_crtc(dev, pipe); in drm_vblank_restore()
1557 drm_debug_enabled(DRM_UT_VBL) && !vblank->framedur_ns, in drm_vblank_restore()
1559 framedur_ns = vblank->framedur_ns; in drm_vblank_restore()
1566 diff_ns = ktime_to_ns(ktime_sub(t_vblank, vblank->time)); in drm_vblank_restore()
1573 diff, diff_ns, framedur_ns, cur_vblank - vblank->last); in drm_vblank_restore()
1574 vblank->last = (cur_vblank - diff) & max_vblank_count; in drm_vblank_restore()
1597 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_crtc_vblank_restore() local
1600 drm_WARN_ON_ONCE(dev, vblank->inmodeset); in drm_crtc_vblank_restore()
1601 drm_WARN_ON_ONCE(dev, !vblank->config.disable_immediate); in drm_crtc_vblank_restore()
1612 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_queue_vblank_event() local
1644 if (!READ_ONCE(vblank->enabled)) { in drm_queue_vblank_event()
1738 struct drm_vblank_crtc *vblank; in drm_wait_vblank_ioctl() local
1787 vblank = &dev->vblank[pipe]; in drm_wait_vblank_ioctl()
1792 if (vblank->config.disable_immediate && in drm_wait_vblank_ioctl()
1794 READ_ONCE(vblank->enabled)) { in drm_wait_vblank_ioctl()
1841 wait = wait_event_interruptible_timeout(vblank->queue, in drm_wait_vblank_ioctl()
1843 !READ_ONCE(vblank->enabled), in drm_wait_vblank_ioctl()
1920 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); in drm_handle_vblank() local
1939 if (!vblank->enabled) { in drm_handle_vblank()
1949 wake_up(&vblank->queue); in drm_handle_vblank()
1956 disable_irq = (vblank->config.disable_immediate && in drm_handle_vblank()
1957 vblank->config.offdelay_ms > 0 && in drm_handle_vblank()
1958 !atomic_read(&vblank->refcount)); in drm_handle_vblank()
1961 drm_handle_vblank_works(vblank); in drm_handle_vblank()
1966 vblank_disable_fn(&vblank->disable_timer); in drm_handle_vblank()
2010 struct drm_vblank_crtc *vblank; in drm_crtc_get_sequence_ioctl() local
2029 vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_get_sequence_ioctl()
2030 vblank_enabled = READ_ONCE(vblank->config.disable_immediate) && in drm_crtc_get_sequence_ioctl()
2031 READ_ONCE(vblank->enabled); in drm_crtc_get_sequence_ioctl()
2067 struct drm_vblank_crtc *vblank; in drm_crtc_queue_sequence_ioctl() local
2095 vblank = drm_crtc_vblank_crtc(crtc); in drm_crtc_queue_sequence_ioctl()
2131 if (!READ_ONCE(vblank->enabled)) { in drm_crtc_queue_sequence_ioctl()