Home
last modified time | relevance | path

Searched full:vblank (Results 1 – 25 of 315) sorted by relevance

12345678910>>...13

/Linux-v5.10/drivers/gpu/drm/
Ddrm_vblank_work.c13 * DOC: vblank works
39 * particular vblank has passed, and then executes the work at realtime
46 void drm_handle_vblank_works(struct drm_vblank_crtc *vblank) in drm_handle_vblank_works() argument
49 u64 count = atomic64_read(&vblank->count); in drm_handle_vblank_works()
52 assert_spin_locked(&vblank->dev->event_lock); in drm_handle_vblank_works()
54 list_for_each_entry_safe(work, next, &vblank->pending_work, node) { in drm_handle_vblank_works()
59 drm_vblank_put(vblank->dev, vblank->pipe); in drm_handle_vblank_works()
60 kthread_queue_work(vblank->worker, &work->base); in drm_handle_vblank_works()
64 wake_up_all(&vblank->work_wait_queue); in drm_handle_vblank_works()
67 /* Handle cancelling any pending vblank work items and drop respective vblank
[all …]
Ddrm_vblank.c2 * 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 interrupts are
133 * On many hardware disabling the vblank interrupt cannot be done in a race-free
[all …]
Ddrm_irq.c2 * drm_irq.c IRQ and vblank support
78 * need to set &drm_device.irq_enabled to signal the DRM core that vblank
96 * that vblank interrupts are available.
181 * vblank/irq handling. KMS drivers must ensure that vblanks are all in drm_irq_uninstall()
187 struct drm_vblank_crtc *vblank = &dev->vblank[i]; in drm_irq_uninstall() local
189 if (!vblank->enabled) in drm_irq_uninstall()
195 wake_up(&vblank->queue); in drm_irq_uninstall()
Ddrm_internal.h112 static inline void drm_vblank_flush_worker(struct drm_vblank_crtc *vblank) in drm_vblank_flush_worker() argument
114 kthread_flush_worker(vblank->worker); in drm_vblank_flush_worker()
117 static inline void drm_vblank_destroy_worker(struct drm_vblank_crtc *vblank) in drm_vblank_destroy_worker() argument
119 kthread_destroy_worker(vblank->worker); in drm_vblank_destroy_worker()
122 int drm_vblank_worker_init(struct drm_vblank_crtc *vblank);
123 void drm_vblank_cancel_pending_works(struct drm_vblank_crtc *vblank);
124 void drm_handle_vblank_works(struct drm_vblank_crtc *vblank);
/Linux-v5.10/include/drm/
Ddrm_vblank.h40 * struct drm_pending_vblank_event - pending vblank event tracking
67 * Event payload for vblank events, requested through
82 * struct drm_vblank_crtc - vblank tracking for a CRTC
84 * This structure tracks the vblank state for one CRTC.
86 * Note that for historical reasons - the vblank handling code is still shared
97 * @queue: Wait queue for vblank waiters.
101 * @disable_timer: Disable timer for the delayed vblank disabling
102 * hysteresis logic. Vblank disabling is controlled through the
109 * @seqlock: Protect vblank count and time.
116 * Current software vblank counter.
[all …]
Ddrm_device.h204 * Indicates that interrupt handling is enabled, specifically vblank
218 * If true, vblank interrupt will be disabled immediately when the
219 * refcount drops to zero, as opposed to via the vblank disable
222 * This can be set to true it the hardware has a working vblank counter
231 * @vblank:
233 * Array of vblank tracking structures, one per &struct drm_crtc. For
234 * historical reasons (vblank support predates kernel modesetting) this
238 struct drm_vblank_crtc *vblank; member
243 * Protects vblank count and time updates during vblank enable/disable
247 * @vbl_lock: Top-level vblank references lock, wraps the low-level
[all …]
Ddrm_crtc.h176 * Reflects the ability of a CRTC to send VBLANK events. This state
178 * atomic helpers will send out a fake VBLANK event during display
182 * One usage is for drivers and/or hardware without support for VBLANK
186 * drm_atomic_helper_check_modeset(), and a fake VBLANK event will be
191 * oneshot mode. In this case the fake VBLANK event is only generated
193 * core to fake VBLANK events when this part of the pipeline hasn't
204 * this case the driver will send the VBLANK event on its own when the
338 * last vblank before the display pipeline was shut off. The simplest
343 * undergoes an full modeset) the vblank timestamp and counter must
344 * be for the vblank right before the first frame that scans out the
[all …]
Ddrm_vblank_work.h12 * vblank passes, and then executes at realtime priority outside of IRQ
31 * @vblank: A pointer to &drm_vblank_crtc this work item belongs to.
33 struct drm_vblank_crtc *vblank; member
36 * @count: The target vblank this work will execute on. Drivers should
/Linux-v5.10/drivers/gpu/drm/nouveau/nvkm/engine/sw/
Dnv50.c42 container_of(notify, typeof(*chan), vblank.notify[notify->index]); in nv50_sw_chan_vblsem_release()
47 nvkm_wr32(device, 0x001710, 0x80000000 | chan->vblank.ctxdma); in nv50_sw_chan_vblsem_release()
51 nvkm_wr32(device, 0x001570, chan->vblank.offset); in nv50_sw_chan_vblsem_release()
52 nvkm_wr32(device, 0x001574, chan->vblank.value); in nv50_sw_chan_vblsem_release()
54 nvkm_wr32(device, 0x060010, chan->vblank.offset); in nv50_sw_chan_vblsem_release()
55 nvkm_wr32(device, 0x060014, chan->vblank.value); in nv50_sw_chan_vblsem_release()
68 case 0x018c: chan->vblank.ctxdma = data; return true; in nv50_sw_chan_mthd()
69 case 0x0400: chan->vblank.offset = data; return true; in nv50_sw_chan_mthd()
70 case 0x0404: chan->vblank.value = data; return true; in nv50_sw_chan_mthd()
72 if (data < device->disp->vblank.index_nr) { in nv50_sw_chan_mthd()
[all …]
Dgf100.c42 container_of(notify, typeof(*chan), vblank.notify[notify->index]); 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.index_nr) { in gf100_sw_chan_mthd()
[all …]
/Linux-v5.10/drivers/gpu/drm/vkms/
Dvkms_crtc.c26 DRM_ERROR("vkms failure on handling vblank"); in vkms_vblank_simulate()
59 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in vkms_enable_vblank() local
66 out->period_ns = ktime_set(0, vblank->framedur_ns); in vkms_enable_vblank()
87 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in vkms_get_vblank_timestamp() local
89 if (!READ_ONCE(vblank->enabled)) { in vkms_get_vblank_timestamp()
96 if (WARN_ON(*vblank_time == vblank->time)) in vkms_get_vblank_timestamp()
102 * only generated after all the vblank registers are updated) and what in vkms_get_vblank_timestamp()
103 * the vblank core expects. Therefore we need to always correct the in vkms_get_vblank_timestamp()
233 /* This lock is held across the atomic commit to block vblank timer in vkms_crtc_atomic_begin()
/Linux-v5.10/drivers/gpu/drm/amd/amdgpu/
Damdgpu_display.c779 * USE_REAL_VBLANKSTART to use the real start of vblank instead
780 * of a fudged earlier start of vblank.
783 * fudged earlier start of vblank in *vpos and the distance
784 * to true start of vblank in *hpos.
794 * Returns vpos as a negative number inside vblank, counting the number
795 * of scanlines to go until end of vblank, e.g., -1 means "one scanline
796 * until start of active scanout / end of vblank."
801 * DRM_SCANOUTPOS_INVBL = Inside vblank.
837 /* Valid vblank area boundaries from gpu retrieved? */ in amdgpu_display_get_crtc_scanoutpos()
850 /* Called from driver internal vblank counter query code? */ in amdgpu_display_get_crtc_scanoutpos()
[all …]
/Linux-v5.10/drivers/gpu/drm/radeon/
Dradeon_display.c324 * to complete in this vblank? GET_DISTANCE_TO_VBLANKSTART provides in radeon_crtc_handle_vblank()
325 * distance to start of "fudged earlier" vblank in vpos, distance to in radeon_crtc_handle_vblank()
326 * start of real vblank in hpos. vpos >= 0 && hpos < 0 means we are in in radeon_crtc_handle_vblank()
327 * the last few scanlines before start of real vblank, where the vblank in radeon_crtc_handle_vblank()
330 * vblank. On pre-AVIVO hardware, flips also complete inside the real in radeon_crtc_handle_vblank()
331 * vblank, not only at leading edge, so if update_pending for hpos >= 0 in radeon_crtc_handle_vblank()
332 * == inside real vblank, the flip will complete almost immediately. in radeon_crtc_handle_vblank()
337 * vblank, leading to a delayed emission of the flip completion event. in radeon_crtc_handle_vblank()
339 * completing inside vblank, not only at leading edge of vblank. in radeon_crtc_handle_vblank()
348 /* crtc didn't flip in this target vblank interval, in radeon_crtc_handle_vblank()
[all …]
/Linux-v5.10/drivers/media/test-drivers/vivid/
Dvivid-osd.c74 struct fb_vblank vblank; in vivid_fb_ioctl() local
76 memset(&vblank, 0, sizeof(vblank)); in vivid_fb_ioctl()
77 vblank.flags = FB_VBLANK_HAVE_COUNT | FB_VBLANK_HAVE_VCOUNT | in vivid_fb_ioctl()
79 vblank.count = 0; in vivid_fb_ioctl()
80 vblank.vcount = 0; in vivid_fb_ioctl()
81 vblank.hcount = 0; in vivid_fb_ioctl()
82 if (copy_to_user((void __user *)arg, &vblank, sizeof(vblank))) in vivid_fb_ioctl()
/Linux-v5.10/drivers/gpu/drm/omapdrm/
Domap_irq.c102 * enable_vblank - enable vblank interrupt events
106 * Enable vblank interrupts for @crtc. If the device doesn't have
107 * a hardware vblank counter, this routine should be a no-op, since
111 * Zero on success, appropriate errno if the given @crtc's vblank
133 * disable_vblank - disable vblank interrupt events
137 * Disable vblank interrupts for @crtc. If the device doesn't have
138 * a hardware vblank counter, this routine should be a no-op, since
/Linux-v5.10/drivers/gpu/drm/msm/disp/mdp4/
Dmdp4_crtc.c56 struct mdp_irq vblank; member
72 mdp_irq_register(&get_kms(crtc)->base, &mdp4_crtc->vblank); in request_pending()
277 /* 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
499 struct mdp4_crtc *mdp4_crtc = container_of(irq, struct mdp4_crtc, vblank); in mdp4_crtc_vblank_irq()
504 mdp_irq_unregister(&get_kms(crtc)->base, &mdp4_crtc->vblank); in mdp4_crtc_vblank_irq()
537 ret = wait_event_timeout(dev->vblank[drm_crtc_index(crtc)].queue, in mdp4_crtc_wait_for_flush_done()
542 dev_warn(dev->dev, "vblank time out, crtc=%d\n", mdp4_crtc->id); in mdp4_crtc_wait_for_flush_done()
552 return mdp4_crtc->vblank.irqmask; in mdp4_crtc_vblank()
[all …]
/Linux-v5.10/drivers/gpu/drm/msm/disp/dpu1/
Ddpu_encoder_phys.h28 * Masters have extra responsibilities, like managing the VBLANK IRQ.
63 * @handle_vblank_virt: Notify virtual encoder of vblank IRQ reception
97 * @control_vblank_irq Register/Deregister for VBLANK IRQ
102 * @wait_for_vblank: Wait for VBLANK, for sub-driver internal use
203 * @vblank_refcount: Reference count of vblank request
207 * vs. the number of done/vblank irqs. Should hover
255 * @pending_vblank_cnt: Atomic counter tracking pending wait for VBLANK
256 * @pending_vblank_wq: Wait queue for blocking until VBLANK received
Ddpu_crtc.h113 * @event : Pointer to last received drm vblank event. If there is a
114 * pending vblank event, this will be non-null.
121 * @vblank_cb_count : count of vblank callback since last reset
123 * @vblank_cb_time : ktime at vblank count reset
126 * safe to make decisions on during VBLANK on/off work
235 * dpu_crtc_vblank_callback - called on vblank irq, issues completion events
/Linux-v5.10/drivers/gpu/drm/gma500/
Dpsb_irq.c324 if (dev->vblank[0].enabled) in psb_irq_preinstall()
326 if (dev->vblank[1].enabled) in psb_irq_preinstall()
330 if (dev->vblank[1].enabled) in psb_irq_preinstall()
332 if (dev->vblank[2].enabled) in psb_irq_preinstall()
364 if (dev->vblank[i].enabled) in psb_irq_postinstall()
391 if (dev->vblank[i].enabled) in psb_irq_uninstall()
497 * It is used to enable VBLANK interrupt
508 /* Medfield is different - we should perhaps extract out vblank in psb_enable_vblank()
538 * It is used to disable VBLANK interrupt
649 dev_err(dev->dev, "trying to get vblank count for disabled pipe %u\n", in psb_get_vblank_counter()
/Linux-v5.10/drivers/video/fbdev/matrox/
Dmatroxfb_crtc2.c403 …ic 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
438 err = matroxfb_dh_get_vblank(m2info, &vblank); in matroxfb_dh_ioctl()
[all …]
/Linux-v5.10/drivers/gpu/drm/i915/
DKconfig.debug193 bool "Enable extra debug warnings for vblank evasion"
198 vblank evade mechanism. This gives a warning every time the
199 the deadline allotted for the vblank evade critical section
201 the vblank.
/Linux-v5.10/drivers/gpu/drm/mcde/
Dmcde_display.c69 bool vblank = false; in mcde_display_irq() local
106 /* Vblank from one of the channels */ in mcde_display_irq()
108 dev_dbg(mcde->dev, "chnl A vblank IRQ\n"); in mcde_display_irq()
109 vblank = true; in mcde_display_irq()
112 dev_dbg(mcde->dev, "chnl B vblank IRQ\n"); in mcde_display_irq()
113 vblank = true; in mcde_display_irq()
116 dev_dbg(mcde->dev, "chnl C0 vblank IRQ\n"); in mcde_display_irq()
118 dev_dbg(mcde->dev, "chnl C1 vblank IRQ\n"); in mcde_display_irq()
125 if (vblank) in mcde_display_irq()
1150 * Handle any pending event first, we need to arm the vblank in mcde_display_update()
[all …]
/Linux-v5.10/drivers/gpu/drm/nouveau/nvkm/engine/disp/
Dbase.c45 struct nvkm_disp *disp = container_of(event, typeof(*disp), vblank); in nvkm_disp_vblank_fini()
54 struct nvkm_disp *disp = container_of(event, typeof(*disp), vblank); in nvkm_disp_vblank_init()
65 container_of(notify->event, typeof(*disp), vblank); in nvkm_disp_vblank_ctor()
73 if (ret = -ENXIO, req->v0.head <= disp->vblank.index_nr) { in nvkm_disp_vblank_ctor()
94 nvkm_event_send(&disp->vblank, 1, head, &rep, sizeof(rep)); in nvkm_disp_vblank()
137 *event = &disp->vblank; in nvkm_disp_ntfy()
420 return nvkm_event_init(&nvkm_disp_vblank_func, 1, i, &disp->vblank); in nvkm_disp_oneinit()
434 nvkm_event_fini(&disp->vblank); in nvkm_disp_dtor()
/Linux-v5.10/Documentation/devicetree/bindings/display/imx/
Dnxp,imx8mq-dcss.yaml34 - description: DTG interrupt for Vblank
40 - const: vblank
90 interrupt-names = "ctxld", "ctxld_kick", "vblank";
/Linux-v5.10/drivers/gpu/drm/r128/
Dr128_irq.c58 /* VBLANK interrupt */ in r128_driver_irq_handler()
87 * FIXME: implement proper interrupt disable by using the vblank in r128_disable_vblank()
101 /* Clear vblank bit if it's already high */ in r128_driver_irq_preinstall()

12345678910>>...13