linux/drivers/gpu/drm/i915
Ville Syrjälä 8f4d38099b drm/i915: Workaround VLV/CHV DSI scanline counter hardware fail
The scanline counter is bonkers on VLV/CHV DSI. The scanline counter
increment is not lined up with the start of vblank like it is on
every other platform and output type. This causes problems for
both the vblank timestamping and atomic update vblank evasion.

On my FFRD8 machine at least, the scanline counter increment
happens about 1/3 of a scanline ahead of the start of vblank (which
is where all register latching happens still). That means we can't
trust the scanline counter to tell us whether we're in vblank or not
while we're on that particular line. In order to keep vblank
timestamping in working condition when called from the vblank irq,
we'll leave scanline_offset at one, which means that the entire
line containing the start of vblank is considered to be inside
the vblank.

For the vblank evasion we'll need to consider that entire line
to be bad, since we can't tell whether the registers already
got latched or not. And we can't actually use the start of vblank
interrupt to get us past that line as the interrupt would fire
too soon, and then we'd up waiting for the next start of vblank
instead. One way around that would using the frame start
interrupt instead since that wouldn't fire until the next
scanline, but that would require some bigger changes in the
interrupt code. So for simplicity we'll just poll until we get
past the bad line.

v2: Adjust the comments a bit

Cc: stable@vger.kernel.org
Cc: Jonas Aaberg <cja@gmx.net>
Tested-by: Jonas Aaberg <cja@gmx.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99086
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161215174734.28779-1-ville.syrjala@linux.intel.com
Tested-by: Mika Kahola <mika.kahola@intel.com>
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
(cherry picked from commit ec1b4ee283)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2017-06-07 16:31:39 +03:00
..
gvt drm/i915/gvt: clean up unsubmited workloads before destroying kmem cache 2017-05-24 10:33:37 +08:00
selftests drm/i915/selftests: Silence compiler warning in igt_ctx_exec 2017-05-24 15:34:22 +03:00
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915/cmdparser: Limit clflush to active cachelines 2017-03-10 13:02:34 +00:00
i915_debugfs.c drm/i915: Move retire-requests into i915_gem_wait_for_idle() 2017-03-31 12:03:46 +01:00
i915_drv.c drm/i915: Prevent the system suspend complete optimization 2017-06-07 16:31:13 +03:00
i915_drv.h drm/i915: Serialize GTT/Aperture accesses on BXT 2017-06-07 12:23:19 +03:00
i915_gem_batch_pool.c drm/i915: Retire an active batch pool object rather than allocate new 2017-03-17 17:57:20 +00:00
i915_gem_batch_pool.h
i915_gem_clflush.c drm/i915: Wait for all fences before installing an exclusive clflush fence 2017-03-23 12:02:53 +00:00
i915_gem_clflush.h drm/i915: Perform object clflushing asynchronously 2017-02-22 12:12:15 +00:00
i915_gem_context.c drm/i915: Disable MI_SET_CONTEXT psmi w/a for bdw 2017-03-24 17:10:10 +00:00
i915_gem_context.h drm/i915: make context status notifier head be per engine 2017-03-21 16:51:47 +02:00
i915_gem_dmabuf.c dma-buf: Rename dma-ops to prevent conflict with kunmap_atomic macro 2017-04-20 13:47:46 +05:30
i915_gem_evict.c drm/i915: Move retire-requests into i915_gem_wait_for_idle() 2017-03-31 12:03:46 +01:00
i915_gem_execbuffer.c drm/i915: Align "unfenced" tiled access on gen2, early gen3 2017-03-29 13:52:08 +03:00
i915_gem_fence_reg.c drm/i915: Take rpm wakelock for releasing the fence on unbind 2017-03-06 14:38:18 +00:00
i915_gem_fence_reg.h drm/i915: Replace 4096 with PAGE_SIZE or I915_GTT_PAGE_SIZE 2017-01-10 20:54:32 +00:00
i915_gem_gtt.c drm/i915: Guard against i915_ggtt_disable_guc() being invoked unconditionally 2017-06-07 16:31:27 +03:00
i915_gem_gtt.h drm/i915: Avoid using word legacy with ppgtt 2017-03-03 16:46:23 +02:00
i915_gem_internal.c Linux 4.10-rc8 2017-02-23 12:10:12 +10:00
i915_gem_object.h drm/i915: Use pagecache write to prepopulate shmemfs from pwrite-ioctl 2017-03-09 10:46:07 +02:00
i915_gem_render_state.c scripts/spelling.txt: add "aligment" pattern and fix typo instances 2017-02-27 18:43:46 -08:00
i915_gem_render_state.h
i915_gem_request.c drm/i915: Confirm the request is still active before adding it to the await 2017-04-26 16:28:47 +03:00
i915_gem_request.h Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2017-05-10 10:30:46 -07:00
i915_gem_shrinker.c drm/i915: Do not sync RCU during shrinking 2017-05-18 14:15:20 +03:00
i915_gem_stolen.c drm/i915/gvt: Disable access to stolen memory as a guest 2017-02-16 11:59:13 +02:00
i915_gem_tiling.c drm/i915: Fix logical inversion for gen4 quirking 2017-06-07 16:31:34 +03:00
i915_gem_timeline.c drm/i915: Assert all timeline requests are gone before fini 2017-01-05 15:34:40 +00:00
i915_gem_timeline.h drm/i915: Keep a global seqno per-engine 2017-02-23 14:49:26 +00:00
i915_gem_userptr.c drm/i915/userptr: Reinvent GGTT self-faulting protection 2017-03-16 10:21:25 +00:00
i915_gem.c drm/i915: Short-circuit i915_gem_wait_for_idle() if already idle 2017-06-07 16:30:54 +03:00
i915_gem.h drm/i915: Rename conditional GEM execution macros 2017-02-10 21:43:43 +00:00
i915_gpu_error.c drm/i915: Split breadcrumbs spinlock into two 2017-03-03 20:19:13 +00:00
i915_guc_reg.h drm/i915/huc: Add HuC fw loading support 2017-01-19 11:18:55 +02:00
i915_guc_submission.c Revert "drm/i915: Skip execlists_dequeue() early if the list is empty" 2017-03-29 13:02:24 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Stop pretending to mask/unmask LPE audio interrupts 2017-05-26 11:51:18 +03:00
i915_memcpy.c
i915_mm.c
i915_oa_hsw.c
i915_oa_hsw.h
i915_params.c drm/i915/uc: Add params for specifying firmware 2017-03-15 14:26:30 +02:00
i915_params.h drm/i915/uc: Add params for specifying firmware 2017-03-15 14:26:30 +02:00
i915_pci.c drm/i915: Disable decoupled MMIO 2017-06-07 16:30:49 +03:00
i915_perf.c drm/i915/perf: remove user triggerable warn 2017-03-29 13:52:25 +03:00
i915_pvinfo.h
i915_reg.h drm/i915: Fix new -Wint-in-bool-context gcc compiler warning 2017-05-18 15:42:28 +03:00
i915_selftest.h drm/i915: Use fault-injection to force the shrinker to run in live GTT tests 2017-02-13 20:46:32 +00:00
i915_suspend.c
i915_sw_fence.c gpu: drm: drivers: Convert printk(KERN_<LEVEL> to pr_<level> 2017-03-01 09:44:11 +01:00
i915_sw_fence.h
i915_sysfs.c drm/i915: Return residency as microseconds 2017-03-16 12:28:28 +02:00
i915_trace_points.c
i915_trace.h drm/i915: Avoid use-after-free of ctx in request tracepoints 2017-03-17 07:59:48 +00:00
i915_utils.h drm/i915: Move WARN_ON/MISSING_CASE macros to i915_utils.h 2017-03-29 11:10:28 +01:00
i915_vgpu.c drm/i915: Fix vGPU balloon for ggtt guard page 2017-03-17 09:41:27 +00:00
i915_vgpu.h
i915_vma.c drm/i915: Remove the vma from the drm_mm if binding fails 2017-03-09 10:43:55 +02:00
i915_vma.h drm/i915: Exercise i915_vma_pin/i915_vma_insert 2017-02-13 20:46:41 +00:00
intel_acpi.c
intel_atomic_plane.c drm/i915: Add plane update/disable tracepoints 2017-03-03 16:50:10 +02:00
intel_atomic.c drm/i915: Skip useless watermark/FIFO related work on VLV/CHV when not needed 2017-03-03 16:50:10 +02:00
intel_audio.c Merge tag 'drm-intel-next-2017-03-06' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-03-08 12:41:47 +10:00
intel_bios.c drm/i915/vbt: split out defaults that are set when there is no VBT 2017-03-14 10:49:13 +02:00
intel_bios.h drm/i915/dsi: Fix swapping of MIPI_SEQ_DEASSERT_RESET / MIPI_SEQ_ASSERT_RESET 2016-12-20 16:28:25 +02:00
intel_breadcrumbs.c drm/i915: Apply a cond_resched() to the saturated signaler 2017-04-26 16:27:58 +03:00
intel_cdclk.c drm/i915: Fix rawclk readout for g4x 2017-05-15 14:44:17 +03:00
intel_color.c drm/i915/glk: Improve rounding caused by pre-CSC gamma tables 2017-03-14 16:07:00 +02:00
intel_crt.c drm/atomic: Acquire connection_mutex lock in drm_helper_probe_single_connector_modes, v4. 2017-04-06 21:29:23 +02:00
intel_csr.c drm/i915: update the firmware download URL 2017-03-28 11:17:37 +03:00
intel_ddi.c drm/i915: make a few DDI functions static 2017-03-31 11:32:41 -03:00
intel_device_info.c drm/i915/glk: Enable pooled EUs for Geminilake 2017-03-17 17:05:36 +02:00
intel_display.c drm/i915: Workaround VLV/CHV DSI scanline counter hardware fail 2017-06-07 16:31:39 +03:00
intel_dp_aux_backlight.c
intel_dp_link_training.c Revert "drm/i915: Implement Link Rate fallback on Link training failure" 2017-03-02 09:17:16 +01:00
intel_dp_mst.c drm/i915: Detect USB-C specific dongles before reducing M and N 2017-05-29 13:43:47 +03:00
intel_dp.c drm/i915: Detect USB-C specific dongles before reducing M and N 2017-05-29 13:43:47 +03:00
intel_dpio_phy.c
intel_dpll_mgr.c Linux 4.10-rc8 2017-02-23 12:10:12 +10:00
intel_dpll_mgr.h drm/i915: Remove unused function intel_ddi_get_link_dpll() 2017-02-10 11:40:27 +02:00
intel_drv.h drm/i915: use drm DP helper to read DPCD desc 2017-05-29 13:37:46 +03:00
intel_dsi_dcs_backlight.c
intel_dsi_pll.c drm/i915/glk: Validate only DSI PORT A PLL divider 2017-02-28 11:54:52 +02:00
intel_dsi_vbt.c drm/i915/dsi: rename intel_dsi_panel_vbt.c to intel_dsi_vbt.c 2017-03-07 15:18:24 +02:00
intel_dsi.c drm/i915/glk: Fix DSI "*ERROR* ULPS is still active" messages 2017-05-15 14:44:04 +03:00
intel_dsi.h drm/i915/dsi: arrange intel_dsi.h according to relevant files 2017-03-07 15:18:43 +02:00
intel_dvo.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_engine_cs.c drm/i915: Hold a wakeref for probing the ring registers 2017-06-07 16:31:00 +03:00
intel_fbc.c drm/i915: Use new atomic iterator macros in fbc 2017-03-13 12:06:40 +01:00
intel_fbdev.c drm/i915/fbdev: Stop repeating tile configuration on stagnation 2017-03-09 10:43:17 +02:00
intel_fifo_underrun.c drm/i915: Add FIFO underrun tracepoints 2017-03-03 16:50:11 +02:00
intel_frontbuffer.c drm/i915: Remove 'retire' parameter from intel_fb_obj_flush 2017-02-22 12:12:17 +00:00
intel_frontbuffer.h drm/i915: Remove 'retire' parameter from intel_fb_obj_flush 2017-02-22 12:12:17 +00:00
intel_guc_fwif.h drm/i915/guc: Split out the mmio_white_list struct 2017-03-23 14:58:50 +02:00
intel_guc_loader.c drm/i915/uc: Move intel_uc_fw_status_repr() to intel_uc.h 2017-03-31 10:39:39 +03:00
intel_guc_log.c drm/i915/guc: Break out the GuC log extras into their own "runtime" struct 2017-03-23 14:58:02 +02:00
intel_gvt.c drm/i915/gvt: Turn on KBL platform support. 2017-03-29 15:28:51 +08:00
intel_gvt.h
intel_hangcheck.c drm/i915: Add initial selftests for hang detection and resets 2017-02-13 20:46:53 +00:00
intel_hdmi.c drm/i915: allow HDMI 2.0 clock rates 2017-03-28 10:17:49 +03:00
intel_hotplug.c drm/atomic: Acquire connection_mutex lock in drm_helper_probe_single_connector_modes, v4. 2017-04-06 21:29:23 +02:00
intel_huc.c drm/i915/huc: Remove unused intel_huc_fini() 2017-03-31 10:39:39 +03:00
intel_i2c.c drm/i915: Introduce IS_GEN9_BC for Skylake and Kabylake. 2017-01-24 10:29:00 -08:00
intel_lpe_audio.c drm/i915: Stop pretending to mask/unmask LPE audio interrupts 2017-05-26 11:51:18 +03:00
intel_lrc.c drm/i915: set initialised only when init_context callback is NULL 2017-05-19 11:45:10 +03:00
intel_lrc.h drm/i915: Move engine->submit_request selection to a vfunc 2017-03-16 17:17:12 +00:00
intel_lspcon.c drm/i915: use drm DP helper to read DPCD desc 2017-05-29 13:37:46 +03:00
intel_lvds.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_mocs.c drm/i915: Emit to ringbuffer directly 2017-02-14 14:30:46 +00:00
intel_mocs.h
intel_modes.c
intel_opregion.c drm/i915/opregion: debug log about invalid ACPI OpRegion VBT 2017-03-30 09:12:36 +03:00
intel_overlay.c drm/i915: Remove superfluous i915_add_request_no_flush() helper 2017-03-17 13:03:25 +00:00
intel_panel.c drm/i915: Start moving the cdclk stuff into a distinct state structure 2017-02-08 18:07:10 +02:00
intel_pipe_crc.c drm: Remove drm_modeset_legacy_acquire_ctx and crtc->acquire_ctx 2017-04-05 09:26:45 +02:00
intel_pm.c drm/i915: Always recompute watermarks when distrust_bios_wm is set, v2. 2017-06-07 16:31:21 +03:00
intel_psr.c drm/i915/psr: disable psr2 for resolution greater than 32X20 2017-06-07 16:31:06 +03:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c Merge tag 'topic/synopsys-media-formats-2017-04-03' of git://anongit.freedesktop.org/git/drm-misc into drm-misc-next 2017-04-04 11:34:31 -04:00
intel_ringbuffer.h drm/i915/execlists: Wrap tail pointer after reset tweaking 2017-03-29 15:45:48 +03:00
intel_runtime_pm.c drm/i915: WARN if the core runtime PM get helpers fail 2017-03-28 16:02:10 +03:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_sideband.c drm/i915: Distinguish between timeout and error in sideband transactions 2017-02-27 17:22:19 +00:00
intel_sprite.c drm/i915: Workaround VLV/CHV DSI scanline counter hardware fail 2017-06-07 16:31:39 +03:00
intel_tv.c drm/atomic: Acquire connection_mutex lock in drm_helper_probe_single_connector_modes, v4. 2017-04-06 21:29:23 +02:00
intel_uc.c drm/i915/uc: Move fw path check to fetch_uc_fw() 2017-03-31 10:39:40 +03:00
intel_uc.h drm/i915/guc: Remove stale comment for q_fail 2017-06-07 16:30:38 +03:00
intel_uncore.c drm/i915: All fw_domains share the same set/clear/reset values 2017-03-23 10:22:04 +00:00
intel_vbt_defs.h drm/915: Parsing the missed out DTD fields from the VBT 2016-12-23 15:13:39 +02:00
Kconfig Merge tag 'topic/designware-baytrail-2017-03-02' of git://anongit.freedesktop.org/git/drm-intel into drm-intel-next-queued 2017-03-13 09:26:06 +01:00
Kconfig.debug drm/i915: Make vblank evade warnings optional 2017-05-12 14:28:02 +10:00
Makefile Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2017-03-08 10:54:45 +01:00