| /linux/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_internal.h | 120 static inline void drm_vblank_flush_worker(struct drm_vblank_crtc *vblank) in drm_vblank_flush_worker() argument 122 kthread_flush_worker(vblank->worker); in drm_vblank_flush_worker() 125 static inline void drm_vblank_destroy_worker(struct drm_vblank_crtc *vblank) in drm_vblank_destroy_worker() argument 127 if (vblank->worker) in drm_vblank_destroy_worker() 128 kthread_destroy_worker(vblank->worker); in drm_vblank_destroy_worker() 131 int drm_vblank_worker_init(struct drm_vblank_crtc *vblank); 132 void drm_vblank_cancel_pending_works(struct drm_vblank_crtc *vblank); 133 void drm_handle_vblank_works(struct drm_vblank_crtc *vblank);
|
| /linux/drivers/gpu/drm/nouveau/nvkm/engine/sw/ |
| H A D | nv50.c | 42 container_of(notify, typeof(*chan), vblank.notify[notify->id]); 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->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.index_nr) { in gf100_sw_chan_mthd() [all …]
|
| /linux/drivers/gpu/drm/i915/display/ |
| 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() 88 …/* On preempt-rt we cannot take the vblank spinlock since this function is called from tracepoints… in intel_crtc_get_vblank_counter() 142 * requires vblank support on some platforms/outputs. in intel_crtc_vblank_on() 155 * requires vblank support on some platforms/outputs. in intel_crtc_vblank_off() 305 /* no hw vblank counter */ 484 * Interrupt latency is critical for getting the vblank in intel_crtc_vblank_work_init() 485 * work executed as early as possible during the vblank. in intel_crtc_vblank_work_init() 534 * atomically regarding vblank. If the next vblank will happens within [all …]
|
| H A D | intel_display_rps.c | 32 * If we missed the vblank, but the request is already running it in do_rps_boost() 34 * vblank without our intervention, so leave RPS alone if not started. in do_rps_boost()
|
| /linux/drivers/gpu/drm/amd/display/amdgpu_dm/ |
| H A D | amdgpu_dm_crtc.c | 106 * @vblank_enabled: indicates whether the DRM vblank counter is currently 111 * The DRM vblank counter enable/disable action is used as the trigger to enable 117 * - vblank counter is disabled 121 * - Keep enabled even when vblank counter gets enabled 125 * - Disable when vblank counter is enabled 263 * Control PSR based on vblank requirements from OS in amdgpu_dm_crtc_vblank_control_worker() 267 * requests vblank events). Fast atomic commits will simply trigger a in amdgpu_dm_crtc_vblank_control_worker() 302 "Reject vblank enable on unconfigured CRTC %d (enabled=%d)\n", in amdgpu_dm_crtc_set_vblank() 311 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in amdgpu_dm_crtc_set_vblank() local 318 * IPS & self-refresh feature can cause vblank counter resets between in amdgpu_dm_crtc_set_vblank() [all …]
|
| /linux/drivers/gpu/drm/radeon/ |
| H A D | radeon_display.c | 319 * to complete in this vblank? GET_DISTANCE_TO_VBLANKSTART provides in radeon_crtc_handle_vblank() 320 * distance to start of "fudged earlier" vblank in vpos, distance to in radeon_crtc_handle_vblank() 321 * start of real vblank in hpos. vpos >= 0 && hpos < 0 means we are in in radeon_crtc_handle_vblank() 322 * the last few scanlines before start of real vblank, where the vblank in radeon_crtc_handle_vblank() 325 * vblank. On pre-AVIVO hardware, flips also complete inside the real in radeon_crtc_handle_vblank() 326 * vblank, not only at leading edge, so if update_pending for hpos >= 0 in radeon_crtc_handle_vblank() 327 * == inside real vblank, the flip will complete almost immediately. in radeon_crtc_handle_vblank() 332 * vblank, leading to a delayed emission of the flip completion event. in radeon_crtc_handle_vblank() 334 * completing inside vblank, not only at leading edge of vblank. in radeon_crtc_handle_vblank() 343 /* crtc didn't flip in this target vblank interval, in radeon_crtc_handle_vblank() [all …]
|
| H A D | radeon_kms.c | 740 * VBlank related functions. 764 * of vblank, as is required by DRM core vblank counter handling. in radeon_get_vblank_counter_kms() 766 * incremented at start of vblank. We measure distance to start of in radeon_get_vblank_counter_kms() 767 * vblank in vpos. vpos therefore will be >= 0 between start of vblank in radeon_get_vblank_counter_kms() 778 * distance to start of vblank, instead of regular in radeon_get_vblank_counter_kms() 792 DRM_DEBUG_VBL("crtc %u: dist from vblank start %d\n", in radeon_get_vblank_counter_kms() 795 /* Bump counter if we are at >= leading edge of vblank, in radeon_get_vblank_counter_kms() 813 * radeon_enable_vblank_kms - enable vblank interrupt 815 * @crtc: crtc to enable vblank interrupt for 841 * radeon_disable_vblank_kms - disable vblank interrupt [all …]
|
| /linux/include/drm/ |
| 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/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/gpu/drm/omapdrm/ |
| H A D | omap_irq.c | 103 * omap_irq_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 * omap_irq_disable_vblank - disable vblank interrupt events 136 * Disable vblank interrupts for @crtc. If the device doesn't have 137 * a hardware vblank counter, this routine should be a no-op, since
|
| /linux/drivers/gpu/drm/loongson/ |
| H A D | loongson_module.c | 17 MODULE_PARM_DESC(vblank, "Disable/Enable hw vblank support"); 18 module_param_named(vblank, loongson_vblank, int, 0400);
|
| /linux/drivers/gpu/drm/amd/amdgpu/ |
| H A D | amdgpu_vkms.c | 57 "%s: vblank timer overrun count: %llu\n", in amdgpu_vkms_vblank_simulate() 61 /* Don't queue timer again when vblank is disabled. */ in amdgpu_vkms_vblank_simulate() 70 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in amdgpu_vkms_enable_vblank() local 76 out->period_ns = ktime_set(0, vblank->framedur_ns); in amdgpu_vkms_enable_vblank() 95 struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc); in amdgpu_vkms_get_vblank_timestamp() local 98 if (!READ_ONCE(vblank->enabled)) { in amdgpu_vkms_get_vblank_timestamp() 105 if (WARN_ON(*vblank_time == vblank->time)) in amdgpu_vkms_get_vblank_timestamp() 111 * only generated after all the vblank registers are updated) and what in amdgpu_vkms_get_vblank_timestamp() 112 * the vblank core expects. Therefore we need to always correct the in amdgpu_vkms_get_vblank_timestamp()
|
| H A D | amdgpu_display.c | 1579 * USE_REAL_VBLANKSTART to use the real start of vblank instead 1580 * of a fudged earlier start of vblank. 1583 * fudged earlier start of vblank in *vpos and the distance 1584 * to true start of vblank in *hpos. 1594 * Returns vpos as a negative number inside vblank, counting the number 1595 * of scanlines to go until end of vblank, e.g., -1 means "one scanline 1596 * until start of active scanout / end of vblank." 1601 * DRM_SCANOUTPOS_INVBL = Inside vblank. 1637 /* Valid vblank area boundaries from gpu retrieved? */ in amdgpu_display_get_crtc_scanoutpos() 1649 /* Called from driver internal vblank counter query code? */ in amdgpu_display_get_crtc_scanoutpos() [all …]
|
| /linux/drivers/video/fbdev/matrox/ |
| H A D | matroxfb_crtc2.c | 403 …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/drivers/gpu/drm/nouveau/nvkm/engine/disp/ |
| H A D | base.c | 41 struct nvkm_disp *disp = container_of(event, typeof(*disp), vblank); in nvkm_disp_vblank_fini() 50 struct nvkm_disp *disp = container_of(event, typeof(*disp), vblank); in nvkm_disp_vblank_init() 65 nvkm_event_ntfy(&disp->vblank, head, NVKM_DISP_HEAD_EVENT_VBLANK); in nvkm_disp_vblank() 165 return nvkm_event_init(&nvkm_disp_vblank_func, subdev, 1, i, &disp->vblank); in nvkm_disp_oneinit() 188 nvkm_event_fini(&disp->vblank); in nvkm_disp_dtor()
|
| /linux/Documentation/devicetree/bindings/display/imx/ |
| H A D | nxp,imx8mq-dcss.yaml | 34 - description: DTG interrupt for Vblank 40 - const: vblank 90 interrupt-names = "ctxld", "ctxld_kick", "vblank";
|
| /linux/drivers/media/i2c/ |
| H A D | mt9v011.c | 202 unsigned height, width, hblank, vblank, speed; in calc_fps() local 210 vblank = mt9v011_read(sd, R06_MT9V011_VBLANK); in calc_fps() 214 t_time = row_time * (height + vblank + 1); in calc_fps() 232 unsigned height, width, hblank, vblank; in calc_speed() local 243 vblank = mt9v011_read(sd, R06_MT9V011_VBLANK); in calc_speed() 246 line_time = height + vblank + 1; in calc_speed() 277 * hblank and vblank should be adjusted, in order to warrant that in set_res()
|
| /linux/drivers/gpu/drm/vc4/ |
| H A D | vc4_crtc.c | 189 * Less: This happens when we are in vblank and the HVS, after getting in vc4_crtc_get_scanout_position() 192 * The PV does not scan out in vblank, so does not remove lines from in vc4_crtc_get_scanout_position() 202 * line of vblank, so PV has about a full vblank in vc4_crtc_get_scanout_position() 204 * one taken at entry into vblank irq handler, so it in vc4_crtc_get_scanout_position() 218 * we are at the very beginning of vblank, as the hvs just in vc4_crtc_get_scanout_position() 220 * truly correspond to start of vblank. in vc4_crtc_get_scanout_position() 227 * No clue where we are inside vblank. Return a vpos of zero, in vc4_crtc_get_scanout_position() 638 /* Disable vblank irq handling before crtc is disabled. */ in vc4_crtc_atomic_disable() 644 * Make sure we issue a vblank event after disabling the CRTC if in vc4_crtc_atomic_disable() 669 /* Enable vblank irq handling before crtc is started otherwise in vc4_crtc_atomic_enable() [all …]
|
| /linux/drivers/gpu/drm/msm/disp/mdp5/ |
| H A D | mdp5_crtc.c | 48 struct mdp_irq vblank; member 82 mdp_irq_register(&get_kms(crtc)->base, &mdp5_crtc->vblank); in request_pending() 108 * vblank we know hw is done w/ previous scanout_fb). 501 /* Disable/save vblank irq handling before power is disabled */ in mdp5_crtc_atomic_disable() 568 /* Restore vblank irq handling after power is enabled */ in mdp5_crtc_atomic_enable() 835 mdp5_crtc->vblank.irqmask = mdp5_cstate->vblank_irqmask; in mdp5_crtc_atomic_flush() 1030 /* enable vblank to complete cursor work: */ in mdp5_crtc_cursor_set() 1184 struct mdp5_crtc *mdp5_crtc = container_of(irq, struct mdp5_crtc, vblank); in mdp5_crtc_vblank_irq() 1189 mdp_irq_unregister(&get_kms(crtc)->base, &mdp5_crtc->vblank); in mdp5_crtc_vblank_irq() 1252 dev_warn(dev->dev, "vblank time out, crtc=%d\n", mdp5_crtc->id); in mdp5_crtc_wait_for_flush_done() [all …]
|
| /linux/drivers/gpu/drm/gma500/ |
| H A D | psb_irq.c | 263 if (dev->vblank[0].enabled) in gma_irq_preinstall() 265 if (dev->vblank[1].enabled) in gma_irq_preinstall() 296 if (dev->vblank[i].enabled) in gma_irq_postinstall() 354 if (dev->vblank[i].enabled) in gma_irq_uninstall() 468 dev_err(dev->dev, "trying to get vblank count for disabled pipe %u\n", in gma_crtc_get_vblank_counter()
|
| /linux/drivers/gpu/drm/vkms/ |
| H A D | vkms_drv.h | 179 * yet. Used by vblank to detect if the composer is too slow. 208 * @vblank_hrtimer: Timer used to trigger the vblank 209 * @period_ns: vblank period, in nanoseconds, used to configure @vblank_hrtimer and to compute 210 * vblank timestamps
|
| /linux/drivers/video/fbdev/core/ |
| H A D | fbmon.c | 1028 u32 vblank; member 1038 * vblank = right_margin + vsync_len + left_margin 1050 u32 vblank; in fb_get_vblank() local 1052 vblank = (hfreq * FLYBACK)/1000; in fb_get_vblank() 1053 vblank = (vblank + 500)/1000; in fb_get_vblank() 1054 return (vblank + V_FRONTPORCH); in fb_get_vblank() 1156 timings->vblank = fb_get_vblank(timings->hfreq); in fb_timings_vfreq() 1157 timings->vtotal = timings->vactive + timings->vblank; in fb_timings_vfreq() 1166 timings->vblank = fb_get_vblank(timings->hfreq); in fb_timings_hfreq() 1167 timings->vtotal = timings->vactive + timings->vblank; in fb_timings_hfreq() [all …]
|