/linux/drivers/gpu/drm/ |
H A D | drm_vblank_work.c | 15 * DOC: vblank works 41 * particular vblank has passed, and then executes the work at realtime 48 void drm_handle_vblank_works(struct drm_vblank_crtc *vblank) in drm_handle_vblank_works() argument 51 u64 count = atomic64_read(&vblank->count); in drm_handle_vblank_works() 54 assert_spin_locked(&vblank->dev->event_lock); in drm_handle_vblank_works() 56 list_for_each_entry_safe(work, next, &vblank->pending_work, node) { in drm_handle_vblank_works() 61 drm_vblank_put(vblank->dev, vblank->pipe); in drm_handle_vblank_works() 62 kthread_queue_work(vblank->worker, &work->base); in drm_handle_vblank_works() 66 wake_up_all(&vblank in drm_handle_vblank_works() 72 drm_vblank_cancel_pending_works(struct drm_vblank_crtc * vblank) drm_vblank_cancel_pending_works() argument 114 struct drm_vblank_crtc *vblank = work->vblank; drm_vblank_work_schedule() local 189 struct drm_vblank_crtc *vblank = work->vblank; drm_vblank_work_cancel_sync() local 225 struct drm_vblank_crtc *vblank = work->vblank; drm_vblank_work_flush() local 247 struct drm_vblank_crtc *vblank = &dev->vblank[drm_crtc_index(crtc)]; drm_vblank_work_flush_all() local 276 drm_vblank_worker_init(struct drm_vblank_crtc * vblank) drm_vblank_worker_init() argument [all...] |
H A D | drm_vblank.c | 2 * drm_irq.c IRQ and vblank support 43 * DOC: vblank handling 54 * scanlines is referred to as the vertical blanking region, or vblank for 98 * this programming has to both start and end in the same vblank. To help 101 * The interrupt is in this context named the vblank interrupt. 103 * The vblank interrupt may be fired at different points depending on the 122 * drm_crtc_handle_vblank() in its vblank interrupt handler for working vblank 129 * call drm_crtc_vblank_get() and release the vblank reference again with 130 * drm_crtc_vblank_put(). In between these two calls vblank interrupt 186 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); store_vblank() local 200 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_max_vblank_count() local 289 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_update_vblank_count() local 380 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_vblank_count() local 415 u64 vblank; drm_crtc_accurate_vblank_count() local 454 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_vblank_disable_and_save() local 490 struct drm_vblank_crtc *vblank = timer_container_of(vblank, t, vblank_disable_fn() local 506 struct drm_vblank_crtc *vblank = ptr; drm_vblank_init_release() local 542 struct drm_vblank_crtc *vblank = &dev->vblank[i]; drm_vblank_init() local 617 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); drm_calc_timestamping_constants() local 701 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; drm_crtc_vblank_helper_get_vblank_timestamp_internal() local 945 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_vblank_count_and_time() local 1000 struct drm_vblank_crtc *vblank; drm_crtc_next_vblank_start() local 1161 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_vblank_enable() local 1199 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_vblank_get() local 1242 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_vblank_put() local 1290 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_wait_one_vblank() local 1343 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); drm_crtc_vblank_off() local 1421 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); drm_crtc_vblank_reset() local 1460 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); drm_crtc_set_max_vblank_count() local 1487 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); drm_crtc_vblank_on_config() local 1542 struct drm_vblank_crtc *vblank; drm_vblank_restore() local 1597 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_crtc_vblank_restore() local 1612 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_queue_vblank_event() local 1738 struct drm_vblank_crtc *vblank; drm_wait_vblank_ioctl() local 1920 struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe); drm_handle_vblank() local 2010 struct drm_vblank_crtc *vblank; drm_crtc_get_sequence_ioctl() local 2067 struct drm_vblank_crtc *vblank; drm_crtc_queue_sequence_ioctl() local [all...] |
H A D | drm_internal.h | 107 static inline void drm_vblank_flush_worker(struct drm_vblank_crtc *vblank) in drm_vblank_flush_worker() argument 109 kthread_flush_worker(vblank->worker); in drm_vblank_flush_worker() 112 static inline void drm_vblank_destroy_worker(struct drm_vblank_crtc *vblank) in drm_vblank_destroy_worker() argument 114 if (vblank->worker) in drm_vblank_destroy_worker() 115 kthread_destroy_worker(vblank->worker); in drm_vblank_destroy_worker() 118 int drm_vblank_worker_init(struct drm_vblank_crtc *vblank); 119 void drm_vblank_cancel_pending_works(struct drm_vblank_crtc *vblank); 120 void drm_handle_vblank_works(struct drm_vblank_crtc *vblank);
|
/linux/include/drm/ |
H A D | drm_vblank.h | 40 * struct drm_pending_vblank_event - pending vblank event tracking 67 * Event payload for vblank events, requested through 82 * struct drm_vblank_crtc_config - vblank configuration for a CRTC 86 * @offdelay_ms: Vblank off delay in ms, used to determine how long 95 * for the exact semantics of immediate vblank disabling. 107 * struct drm_vblank_crtc - vblank tracking for a CRTC 109 * This structure tracks the vblank state for one CRTC. 111 * Note that for historical reasons - the vblank handling code is still shared 122 * @queue: Wait queue for vblank waiters. 126 * @disable_timer: Disable timer for the delayed vblank disablin [all...] |
H A D | drm_device.h | 250 * If true, vblank interrupt will be disabled immediately when the 251 * refcount drops to zero, as opposed to via the vblank disable 254 * This can be set to true it the hardware has a working vblank counter 264 * @vblank: 266 * Array of vblank tracking structures, one per &struct drm_crtc. For 267 * historical reasons (vblank support predates kernel modesetting) this 271 struct drm_vblank_crtc *vblank; member 276 * Protects vblank count and time updates during vblank enable/disable 280 * @vbl_lock: Top-level vblank reference [all...] |
H A D | drm_crtc.h | 158 * Reflects the ability of a CRTC to send VBLANK events. This state 160 * atomic helpers will send out a fake VBLANK event during display 164 * One usage is for drivers and/or hardware without support for VBLANK 168 * drm_atomic_helper_check_modeset(), and a fake VBLANK event will be 173 * oneshot mode. In this case the fake VBLANK event is only generated 175 * core to fake VBLANK events when this part of the pipeline hasn't 186 * this case the driver will send the VBLANK event on its own when the 331 * last vblank before the display pipeline was shut off. The simplest 336 * undergoes an full modeset) the vblank timestamp and counter must 337 * be for the vblank righ [all...] |
H A D | drm_vblank_work.h | 12 * vblank passes, and then executes at realtime priority outside of IRQ 32 * @vblank: A pointer to &drm_vblank_crtc this work item belongs to. 34 struct drm_vblank_crtc *vblank; member 37 * @count: The target vblank this work will execute on. Drivers should
|
/linux/drivers/gpu/drm/i915/display/ |
H A D | intel_vblank.c | 27 * start of vblank: 30 * generate start of vblank interrupt (gen4+) 33 * | generate frame start interrupt (aka. vblank interrupt) (gmch) 62 * (depending on TRANSCONF settings) after the start of vblank 73 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in i915_get_vblank_counter() local 74 const struct drm_display_mode *mode = &vblank->hwmode; in i915_get_vblank_counter() 83 * vblank wait before enabling the TV encoder and so we in i915_get_vblank_counter() 84 * have to enable vblank interrupts while the frame counter in i915_get_vblank_counter() 85 * is still in a working state. However the core vblank code in i915_get_vblank_counter() 90 if (!vblank in i915_get_vblank_counter() 125 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); g4x_get_vblank_counter() local 137 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc->base); intel_crtc_scanlines_since_frame_timestamp() local 182 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc->base); __intel_get_crtc_scanline_from_timestamp() local 243 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc->base); __intel_get_crtc_scanline() local [all...] |
H A D | intel_crtc.c | 43 "[CRTC:%d:%s] vblank assertion failure (expected off, current on)\n", in assert_vblank_disabled() 82 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc->base); in intel_crtc_get_vblank_counter() local 87 if (!vblank->max_vblank_count) in intel_crtc_get_vblank_counter() 137 * requires vblank support on some platforms/outputs. in intel_crtc_vblank_on() 150 * requires vblank support on some platforms/outputs. in intel_crtc_vblank_off() 300 /* no hw vblank counter */ 459 * Interrupt latency is critical for getting the vblank in intel_crtc_vblank_work_init() 460 * work executed as early as possible during the vblank. in intel_crtc_vblank_work_init() 509 * atomically regarding vblank. If the next vblank wil [all...] |
/linux/drivers/gpu/drm/nouveau/nvkm/engine/sw/ |
H A D | gf100.c | 42 container_of(notify, typeof(*chan), vblank.notify[notify->id]); in gf100_sw_chan_vblsem_release() 49 nvkm_wr32(device, 0x06000c, upper_32_bits(chan->vblank.offset)); in gf100_sw_chan_vblsem_release() 50 nvkm_wr32(device, 0x060010, lower_32_bits(chan->vblank.offset)); in gf100_sw_chan_vblsem_release() 51 nvkm_wr32(device, 0x060014, chan->vblank.value); in gf100_sw_chan_vblsem_release() 64 chan->vblank.offset &= 0x00ffffffffULL; in gf100_sw_chan_mthd() 65 chan->vblank.offset |= (u64)data << 32; in gf100_sw_chan_mthd() 68 chan->vblank.offset &= 0xff00000000ULL; in gf100_sw_chan_mthd() 69 chan->vblank.offset |= data; in gf100_sw_chan_mthd() 72 chan->vblank.value = data; in gf100_sw_chan_mthd() 75 if (data < device->disp->vblank in gf100_sw_chan_mthd() [all...] |
/linux/drivers/gpu/drm/vmwgfx/ |
H A D | vmwgfx_vkms.c | 123 * We raced with the vblank hrtimer and previous work already computed in crc_generate_worker() 154 * The worker can fall behind the vblank hrtimer, make sure we catch up. in crc_generate_worker() 173 drm_dbg_driver(crtc->dev, "vblank timer missed %lld frames.\n", in vmw_vkms_vblank_simulate() 252 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in vmw_vkms_get_vblank_timestamp() local 257 if (!READ_ONCE(vblank->enabled)) { in vmw_vkms_get_vblank_timestamp() 264 if (WARN_ON(*vblank_time == vblank->time)) in vmw_vkms_get_vblank_timestamp() 270 * only generated after all the vblank registers are updated) and what in vmw_vkms_get_vblank_timestamp() 271 * the vblank core expects. Therefore we need to always correct the in vmw_vkms_get_vblank_timestamp() 285 struct drm_vblank_crtc *vblank in vmw_vkms_enable_vblank() local [all...] |
/linux/drivers/gpu/drm/vkms/ |
H A D | vkms_crtc.c | 27 pr_warn("%s: vblank timer overrun\n", __func__); in vkms_vblank_simulate() 32 DRM_ERROR("vkms failure on handling vblank"); in vkms_vblank_simulate() 65 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in vkms_enable_vblank() local 70 out->period_ns = ktime_set(0, vblank->framedur_ns); in vkms_enable_vblank() 88 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in vkms_get_vblank_timestamp() local 90 if (!READ_ONCE(vblank->enabled)) { in vkms_get_vblank_timestamp() 97 if (WARN_ON(*vblank_time == vblank->time)) in vkms_get_vblank_timestamp() 103 * only generated after all the vblank registers are updated) and what in vkms_get_vblank_timestamp() 104 * the vblank core expects. Therefore we need to always correct the in vkms_get_vblank_timestamp() 234 /* This lock is held across the atomic commit to block vblank time in vkms_crtc_atomic_begin() [all...] |
/linux/drivers/gpu/drm/amd/display/dc/dml2/ |
H A D | dml2_mall_phantom.c | 210 * and regular P-State switching (i.e. VACTIVE/VBLANK) is not supported, or if 216 * In general we choose surfaces with the longest frame time first (better for SubVP + VBLANK). 219 * support MCLK switching naturally [i.e. ACTIVE or VBLANK]). 347 * 2. Check if the worst case overlap (VBLANK in middle of ACTIVE) for both 481 * for VBLANK: (VACTIVE region of the SubVP pipe can fit the MALL prefetch, VBLANK frame time, in dml2_svp_drr_schedulable() 482 * and the max of (VBLANK blanking time, MALL region)). in dml2_svp_drr_schedulable() 493 * subvp_vblank_schedulable: Determine if SubVP + VBLANK config is schedulable 496 * 1. Get timing for SubVP pipe, phantom pipe, and VBLANK pipe 497 * 2. If (SubVP Active - Prefetch > Vblank Fram [all...] |
/linux/drivers/gpu/drm/radeon/ |
H A D | radeon_display.c | 318 * to complete in this vblank? GET_DISTANCE_TO_VBLANKSTART provides in radeon_crtc_handle_vblank() 319 * distance to start of "fudged earlier" vblank in vpos, distance to in radeon_crtc_handle_vblank() 320 * start of real vblank in hpos. vpos >= 0 && hpos < 0 means we are in in radeon_crtc_handle_vblank() 321 * the last few scanlines before start of real vblank, where the vblank in radeon_crtc_handle_vblank() 324 * vblank. On pre-AVIVO hardware, flips also complete inside the real in radeon_crtc_handle_vblank() 325 * vblank, not only at leading edge, so if update_pending for hpos >= 0 in radeon_crtc_handle_vblank() 326 * == inside real vblank, the flip will complete almost immediately. in radeon_crtc_handle_vblank() 331 * vblank, leading to a delayed emission of the flip completion event. in radeon_crtc_handle_vblank() 333 * completing inside vblank, no in radeon_crtc_handle_vblank() [all...] |
/linux/drivers/gpu/drm/omapdrm/ |
H A D | omap_irq.c | 102 * omap_irq_enable_vblank - enable vblank interrupt events 105 * Enable vblank interrupts for @crtc. If the device doesn't have 106 * a hardware vblank counter, this routine should be a no-op, since 110 * Zero on success, appropriate errno if the given @crtc's vblank 132 * omap_irq_disable_vblank - disable vblank interrupt events 135 * Disable vblank interrupts for @crtc. If the device doesn't have 136 * a hardware vblank counter, this routine should be a no-op, since
|
/linux/drivers/gpu/drm/msm/disp/dpu1/ |
H A D | dpu_encoder_phys.h | 33 * Masters have extra responsibilities, like managing the VBLANK IRQ. 76 * @control_vblank_irq Register/Deregister for VBLANK IRQ 81 * @wait_for_vblank: Wait for VBLANK, for sub-driver internal use 157 * @vblank_ctl_lock: Vblank ctl mutex lock to protect vblank_refcount 163 * @vblank_refcount: Reference count of vblank request 167 * vs. the number of done/vblank irqs. Should hover 239 * @pending_vblank_cnt: Atomic counter tracking pending wait for VBLANK 240 * @pending_vblank_wq: Wait queue for blocking until VBLANK received
|
H A D | dpu_crtc.h | 127 * @event : Pointer to last received drm vblank event. If there is a 128 * pending vblank event, this will be non-null. 133 * @vblank_cb_count : count of vblank callback since last reset 135 * @vblank_cb_time : ktime at vblank count reset 138 * safe to make decisions on during VBLANK on/off work
|
/linux/drivers/media/test-drivers/vivid/ |
H A D | vivid-osd.c | 79 struct fb_vblank vblank; in vivid_fb_ioctl() local 81 memset(&vblank, 0, sizeof(vblank)); in vivid_fb_ioctl() 82 vblank.flags = FB_VBLANK_HAVE_COUNT | FB_VBLANK_HAVE_VCOUNT | in vivid_fb_ioctl() 84 vblank.count = 0; in vivid_fb_ioctl() 85 vblank.vcount = 0; in vivid_fb_ioctl() 86 vblank.hcount = 0; in vivid_fb_ioctl() 87 if (copy_to_user((void __user *)arg, &vblank, sizeof(vblank))) in vivid_fb_ioctl()
|
/linux/drivers/gpu/drm/msm/disp/mdp4/ |
H A D | mdp4_crtc.c | 57 struct mdp_irq vblank; member 73 mdp_irq_register(&get_kms(crtc)->base, &mdp4_crtc->vblank); in request_pending() 269 /* Disable/save vblank irq handling before power is disabled */ in mdp4_crtc_atomic_disable() 299 /* Restore vblank irq handling after power is enabled */ in mdp4_crtc_atomic_enable() 351 * buffered, and changing them other than from vblank seems to trigger 498 struct mdp4_crtc *mdp4_crtc = container_of(irq, struct mdp4_crtc, vblank); in mdp4_crtc_vblank_irq() 503 mdp_irq_unregister(&get_kms(crtc)->base, &mdp4_crtc->vblank); in mdp4_crtc_vblank_irq() 536 ret = wait_event_timeout(dev->vblank[drm_crtc_index(crtc)].queue, in mdp4_crtc_wait_for_flush_done() 541 dev_warn(dev->dev, "vblank time out, crtc=%s\n", mdp4_crtc->base.name); in mdp4_crtc_wait_for_flush_done() 551 return mdp4_crtc->vblank in mdp4_crtc_vblank() [all...] |
/linux/drivers/gpu/drm/ci/xfails/ |
H A D | virtio_gpu-none-fails.txt | 5 kms_atomic_transition@plane-primary-toggle-with-vblank-wait,Fail 141 kms_flip@dpms-vs-vblank-race,Fail 142 kms_flip@dpms-vs-vblank-race-interruptible,Fail 145 kms_flip@flip-vs-blocking-wf-vblank,Fail 146 kms_flip@flip-vs-expired-vblank,Fail 147 kms_flip@flip-vs-expired-vblank-interruptible,Fail 151 kms_flip@modeset-vs-vblank-race,Fail 152 kms_flip@modeset-vs-vblank-race-interruptible,Fail
|
H A D | mediatek-mt8183-fails.txt | 22 kms_flip@flip-vs-blocking-wf-vblank,Fail 23 kms_flip@flip-vs-expired-vblank,Fail 24 kms_flip@flip-vs-expired-vblank-interruptible,Fail
|
H A D | mediatek-mt8173-fails.txt | 29 kms_flip@flip-vs-blocking-wf-vblank,Fail 30 kms_flip@flip-vs-expired-vblank,Fail 31 kms_flip@flip-vs-expired-vblank-interruptible,Fail
|
H A D | rockchip-rk3399-flakes.txt | 20 kms_flip@dpms-vs-vblank-race-interruptible 62 kms_flip@dpms-vs-vblank-race 76 kms_flip@flip-vs-expired-vblank 118 kms_flip@flip-vs-blocking-wf-vblank 132 kms_flip@modeset-vs-vblank-race-interruptible
|
/linux/drivers/gpu/drm/amd/amdgpu/ |
H A D | amdgpu_vkms.c | 57 DRM_WARN("%s: vblank timer overrun\n", __func__); in amdgpu_vkms_vblank_simulate() 60 /* Don't queue timer again when vblank is disabled. */ in amdgpu_vkms_vblank_simulate() 69 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in amdgpu_vkms_enable_vblank() local 75 out->period_ns = ktime_set(0, vblank->framedur_ns); in amdgpu_vkms_enable_vblank() 94 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in amdgpu_vkms_get_vblank_timestamp() local 97 if (!READ_ONCE(vblank->enabled)) { in amdgpu_vkms_get_vblank_timestamp() 104 if (WARN_ON(*vblank_time == vblank->time)) in amdgpu_vkms_get_vblank_timestamp() 110 * only generated after all the vblank registers are updated) and what in amdgpu_vkms_get_vblank_timestamp() 111 * the vblank core expects. Therefore we need to always correct the in amdgpu_vkms_get_vblank_timestamp()
|
/linux/drivers/video/fbdev/matrox/ |
H A D | matroxfb_crtc2.c | 403 static int matroxfb_dh_get_vblank(const struct matroxfb_dh_fb_info* m2info, struct fb_vblank* vblank) { in matroxfb_dh_get_vblank() argument 407 memset(vblank, 0, sizeof(*vblank)); in matroxfb_dh_get_vblank() 408 vblank->flags = FB_VBLANK_HAVE_VCOUNT | FB_VBLANK_HAVE_VBLANK; in matroxfb_dh_get_vblank() 410 vblank->vcount = mga_inl(0x3C48) & 0x000007FF; in matroxfb_dh_get_vblank() 412 if (vblank->vcount >= m2info->fbcon.var.yres) in matroxfb_dh_get_vblank() 413 vblank->flags |= FB_VBLANK_VBLANKING; in matroxfb_dh_get_vblank() 415 vblank->flags |= FB_VBLANK_HAVE_COUNT; in matroxfb_dh_get_vblank() 418 vblank->count = minfo->crtc2.vsync.cnt; in matroxfb_dh_get_vblank() 435 struct fb_vblank vblank; in matroxfb_dh_ioctl() local [all...] |