| /OK3568_Linux_fs/external/xserver/present/ |
| H A D | present_vblank.c | 30 present_vblank_notify(present_vblank_ptr vblank, CARD8 kind, CARD8 mode, uint64_t ust, uint64_t crt… in present_vblank_notify() argument 34 if (vblank->window) in present_vblank_notify() 35 …present_send_complete_notify(vblank->window, kind, mode, vblank->serial, ust, crtc_msc - vblank->m… in present_vblank_notify() 36 for (n = 0; n < vblank->num_notifies; n++) { in present_vblank_notify() 37 WindowPtr window = vblank->notifies[n].window; in present_vblank_notify() 38 CARD32 serial = vblank->notifies[n].serial; in present_vblank_notify() 41 … present_send_complete_notify(window, kind, mode, serial, ust, crtc_msc - vblank->msc_offset); in present_vblank_notify() 66 present_vblank_ptr vblank; in present_vblank_create() local 69 vblank = calloc (1, sizeof (present_vblank_rec)); in present_vblank_create() 70 if (!vblank) in present_vblank_create() [all …]
|
| H A D | present_wnmd.c | 43 present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc); 57 present_wnmd_create_event_id(present_window_priv_ptr window_priv, present_vblank_ptr vblank) in present_wnmd_create_event_id() argument 59 vblank->event_id = ++window_priv->event_id; in present_wnmd_create_event_id() 86 present_wnmd_re_execute(present_vblank_ptr vblank) in present_wnmd_re_execute() argument 90 (void) present_wnmd_get_ust_msc(vblank->screen, vblank->window, &ust, &crtc_msc); in present_wnmd_re_execute() 91 present_wnmd_execute(vblank, ust, crtc_msc); in present_wnmd_re_execute() 98 present_vblank_ptr vblank; in present_wnmd_flip_try_ready() local 100 xorg_list_for_each_entry(vblank, &window_priv->flip_queue, event_queue) { in present_wnmd_flip_try_ready() 101 if (vblank->queued) { in present_wnmd_flip_try_ready() 102 present_wnmd_re_execute(vblank); in present_wnmd_flip_try_ready() [all …]
|
| H A D | present_scmd.c | 47 present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc); 51 present_vblank_ptr vblank) in present_scmd_create_event_id() argument 53 vblank->event_id = ++present_event_id; in present_scmd_create_event_id() 256 present_re_execute(present_vblank_ptr vblank) in present_re_execute() argument 260 if (vblank->crtc) in present_re_execute() 261 (void) present_get_ust_msc(vblank->screen, vblank->crtc, &ust, &crtc_msc); in present_re_execute() 263 present_execute(vblank, ust, crtc_msc); in present_re_execute() 269 present_vblank_ptr vblank; in present_flip_try_ready() local 271 xorg_list_for_each_entry(vblank, &present_flip_queue, event_queue) { in present_flip_try_ready() 272 if (vblank->queued) { in present_flip_try_ready() [all …]
|
| H A D | present_execute.c | 37 present_vblank_ptr vblank = param; in present_wait_fence_triggered() local 38 ScreenPtr screen = vblank->screen; in present_wait_fence_triggered() 41 screen_priv->re_execute(vblank); in present_wait_fence_triggered() 45 present_execute_wait(present_vblank_ptr vblank, uint64_t crtc_msc) in present_execute_wait() argument 47 WindowPtr window = vblank->window; in present_execute_wait() 54 if (vblank->exec_msc == crtc_msc + 1 && in present_execute_wait() 55 screen_priv->queue_vblank(screen, window, vblank->crtc, vblank->event_id, in present_execute_wait() 56 vblank->exec_msc) == Success) in present_execute_wait() 59 if (vblank->wait_fence) { in present_execute_wait() 60 if (!present_fence_check_triggered(vblank->wait_fence)) { in present_execute_wait() [all …]
|
| H A D | present_screen.c | 46 xorg_list_init(&window_priv->vblank); in present_get_window_priv() 84 present_vblank_ptr vblank, tmp; in present_free_window_vblank() local 86 xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->vblank, window_list) { in present_free_window_vblank() 87 …een_priv->abort_vblank(window->drawable.pScreen, window, vblank->crtc, vblank->event_id, vblank->t… in present_free_window_vblank() 88 present_vblank_destroy(vblank); in present_free_window_vblank() 116 present_vblank_ptr vblank, tmp; in present_wnmd_clear_window_flip() local 118 xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->flip_queue, event_queue) { in present_wnmd_clear_window_flip() 119 present_pixmap_idle(vblank->pixmap, vblank->window, vblank->serial, vblank->idle_fence); in present_wnmd_clear_window_flip() 120 present_vblank_destroy(vblank); in present_wnmd_clear_window_flip() 123 xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->idle_queue, event_queue) { in present_wnmd_clear_window_flip() [all …]
|
| H A D | present_priv.h | 84 Bool sync_flip; /* do flip synchronous to vblank */ 129 present_vblank_ptr vblank); 137 typedef void (*present_priv_re_execute_ptr)(present_vblank_ptr vblank); 221 struct xorg_list vblank; member 343 present_execute_wait(present_vblank_ptr vblank, uint64_t crtc_msc); 346 present_execute_copy(present_vblank_ptr vblank, uint64_t crtc_msc); 349 present_execute_post(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc); 455 present_vblank_notify(present_vblank_ptr vblank, CARD8 kind, CARD8 mode, uint64_t ust, uint64_t crt… 476 present_vblank_scrap(present_vblank_ptr vblank); 479 present_vblank_destroy(present_vblank_ptr vblank);
|
| /OK3568_Linux_fs/kernel/drivers/gpu/drm/ |
| 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 interrupts are 133 * On many hardware disabling the vblank interrupt cannot be done in a race-free [all …]
|
| H A D | drm_vblank_work.c | 13 * 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 …]
|
| H A D | drm_internal.h | 112 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 if (vblank->worker) in drm_vblank_destroy_worker() 120 kthread_destroy_worker(vblank->worker); in drm_vblank_destroy_worker() 123 int drm_vblank_worker_init(struct drm_vblank_crtc *vblank); 124 void drm_vblank_cancel_pending_works(struct drm_vblank_crtc *vblank); 125 void drm_handle_vblank_works(struct drm_vblank_crtc *vblank);
|
| H A D | drm_irq.c | 2 * 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()
|
| /OK3568_Linux_fs/kernel/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 - 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 …]
|
| H A D | drm_device.h | 204 * 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 …]
|
| H A D | drm_crtc.h | 176 * 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 …]
|
| H A D | drm_vblank_work.h | 12 * 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
|
| /OK3568_Linux_fs/kernel/drivers/gpu/drm/nouveau/nvkm/engine/sw/ |
| H A D | nv50.c | 42 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 …]
|
| H A D | gf100.c | 42 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 …]
|
| /OK3568_Linux_fs/kernel/drivers/gpu/drm/vkms/ |
| H A D | vkms_crtc.c | 22 pr_warn("%s: vblank timer overrun\n", __func__); in vkms_vblank_simulate() 27 DRM_ERROR("vkms failure on handling vblank"); in vkms_vblank_simulate() 60 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in vkms_enable_vblank() local 67 out->period_ns = ktime_set(0, vblank->framedur_ns); in vkms_enable_vblank() 88 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; 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 timer in vkms_crtc_atomic_begin()
|
| /OK3568_Linux_fs/kernel/drivers/gpu/drm/amd/amdgpu/ |
| H A D | amdgpu_display.c | 779 * 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 …]
|
| /OK3568_Linux_fs/kernel/drivers/gpu/drm/radeon/ |
| H A D | radeon_display.c | 324 * 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 …]
|
| /OK3568_Linux_fs/kernel/drivers/media/test-drivers/vivid/ |
| H A D | vivid-osd.c | 74 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()
|
| /OK3568_Linux_fs/kernel/drivers/gpu/drm/msm/disp/mdp4/ |
| H A D | mdp4_crtc.c | 56 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 …]
|
| /OK3568_Linux_fs/kernel/drivers/gpu/drm/omapdrm/ |
| H A D | omap_irq.c | 102 * 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
|
| /OK3568_Linux_fs/kernel/drivers/gpu/drm/msm/disp/dpu1/ |
| H A D | dpu_encoder_phys.h | 28 * 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
|
| H A D | dpu_crtc.h | 113 * @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
|
| /OK3568_Linux_fs/kernel/drivers/gpu/drm/gma500/ |
| H A D | psb_irq.c | 324 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()
|