linux/drivers/gpu/drm/i915
Ville Syrjälä ec1b4ee283 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>
2017-06-06 17:58:42 +03:00
..
gvt Linux 4.12-rc3 2017-05-30 15:54:15 +10:00
selftests Merge tag 'drm-intel-next-2017-05-29' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-05-30 15:25:28 +10:00
dvo_ch7xxx.c drm/i915/dvo: fix debug logging on unknown DID 2017-06-01 15:53:03 +03:00
dvo_ch7017.c drm/i915/lvds: Remove magic from PLL programming 2017-05-10 13:47:55 +03:00
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915: Redefine ptr_pack_bits() and friends 2017-05-17 13:38:04 +01:00
i915_debugfs.c drm/i915: Remove toplevel struct_mutex locking from debugfs/i915_drop_caches 2017-05-30 11:46:23 +01:00
i915_drv.c drm/i915: Remove dead code from runtime resume handler 2017-06-06 15:31:42 +03:00
i915_drv.h drm/i915/cnp: Add PCI ID for Cannonpoint LP PCH 2017-06-02 13:57:06 -07: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: Mark up clflushes as belonging to an unordered timeline 2017-05-03 11:08:45 +01:00
i915_gem_clflush.h drm/i915: Mark up clflushes as belonging to an unordered timeline 2017-05-03 11:08:45 +01:00
i915_gem_context.c drm/i915: Use a define for the default priority [0] 2017-05-17 13:38:08 +01: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 drm/i915: Implement dma_buf_ops->kmap 2017-05-03 23:15:02 +01:00
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 Merge tag 'drm-intel-next-2017-05-29' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-05-30 15:25:28 +10: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
i915_gem_gtt.c drm/i915/guc: Assert that we switch between known ggtt->invalidate functions 2017-06-01 14:17:41 +01:00
i915_gem_gtt.h drm/i915: return the correct usable aperture size under gvt environment 2017-06-02 14:28:46 +01:00
i915_gem_internal.c
i915_gem_object.h drm/i915: Add kerneldoc to describe i915_gem_object.vma_list 2017-05-30 11:46:23 +01: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: Remove misleading comment in request_alloc 2017-05-23 11:53:22 +01:00
i915_gem_request.h Merge tag 'drm-intel-next-2017-05-29' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-05-30 15:25:28 +10:00
i915_gem_shrinker.c drm/i915: Allow kswapd to pause the device whilst reaping 2017-06-02 14:54:27 +01:00
i915_gem_stolen.c drm/i915: Consolidate #ifdef CONFIG_INTEL_IOMMU 2017-05-25 21:51:49 +01:00
i915_gem_tiling.c drm/i915: Fix logical inversion for gen4 quirking 2017-06-01 14:27:44 +01:00
i915_gem_timeline.c drm/i915: Squash repeated awaits on the same fence 2017-05-03 11:08:48 +01:00
i915_gem_timeline.h drm/i915: Rename intel_timeline.sync_seqno[] to .global_sync[] 2017-05-03 11:08:52 +01:00
i915_gem_userptr.c drm: drop drm_[cm]alloc* helpers 2017-05-18 17:22:39 +02:00
i915_gem.c drm/i915: return the correct usable aperture size under gvt environment 2017-06-02 14:28:46 +01:00
i915_gem.h drm/i915: Squash repeated awaits on the same fence 2017-05-03 11:08:48 +01:00
i915_gpu_error.c drm/i915/execlists: Pack the count into the low bits of the port.request 2017-05-17 13:38:06 +01:00
i915_guc_reg.h
i915_guc_submission.c drm/i915/guc: Fix doorbell id selection 2017-05-31 10:34:03 +03:00
i915_ioc32.c
i915_irq.c drm/i915/cnp: Introduce Cannonpoint PCH. 2017-06-02 13:56:19 -07: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-05-30 09:59:00 +03:00
i915_perf.c drm/i915/perf: rate limit spurious oa report notice 2017-05-13 11:03:43 +01:00
i915_pvinfo.h
i915_reg.h drm/i915/cnp: add CNP gmbus support 2017-06-02 13:59:32 -07:00
i915_selftest.h
i915_suspend.c
i915_sw_fence.c drm/i915: Import the kfence selftests for i915_sw_fence 2017-05-17 13:38:02 +01:00
i915_sw_fence.h drm/i915: Remove kref from i915_sw_fence 2017-05-17 13:38:01 +01:00
i915_syncmap.c drm/i915: Squash repeated awaits on the same fence 2017-05-03 11:08:48 +01:00
i915_syncmap.h drm/i915: Squash repeated awaits on the same fence 2017-05-03 11:08:48 +01:00
i915_sysfs.c drm/i915: Do not leak dev_priv->l3_parity.remap_info[] 2017-05-02 12:09:13 +03:00
i915_trace_points.c
i915_trace.h drm/i915: Add g4x watermark tracepoint 2017-05-10 16:48:32 +03:00
i915_utils.h drm/i915: Split execlist priority queue into rbtree + linked list 2017-05-17 13:38:09 +01:00
i915_vgpu.c drm/i915: return the correct usable aperture size under gvt environment 2017-06-02 14:28:46 +01: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
intel_acpi.c
intel_atomic_plane.c Merge tag 'drm-intel-next-2017-05-29' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-05-30 15:25:28 +10:00
intel_atomic.c drm/i915: Convert intel_sdvo connector properties to atomic. 2017-05-30 10:33:28 +02:00
intel_audio.c drm/i915: Reorganize intel_lpe_audio_notify() arguments 2017-05-03 16:20:48 +03: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
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/cnp: Get/set proper Raw clock frequency on CNP. 2017-06-02 13:57:21 -07: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/i915: Convert intel_crt connector properties to atomic. 2017-04-12 10:53:22 +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/ddi: Avoid long delays during system suspend / eDP disabling 2017-06-01 15:07:22 +03:00
intel_device_info.c drm/i915: Add support for sprites on g4x 2017-05-10 16:48:32 +03:00
intel_display.c drm/i915: Workaround VLV/CHV DSI scanline counter hardware fail 2017-06-06 17:58:42 +03:00
intel_dp_aux_backlight.c drm/i915: Drop AUX backlight enable check for backlight control 2017-05-26 15:02:14 +03:00
intel_dp_link_training.c drm/i915: Implement Link Rate fallback on Link training failure 2017-04-13 21:57:37 +03:00
intel_dp_mst.c Merge tag 'drm-intel-next-2017-05-29' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-05-30 15:25:28 +10:00
intel_dp.c drm/i915/cnp: Panel Power sequence changes for CNP PCH. 2017-06-02 13:59:41 -07:00
intel_dpio_phy.c
intel_dpll_mgr.c
intel_dpll_mgr.h
intel_drv.h drm/i915/skl+: consider max supported plane pixel rate while scaling 2017-06-01 09:48:19 +02: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/glk: Calculate high/low switch count for GLK 2017-05-15 18:29:46 +03:00
intel_dsi.c drm/i915: Convert DSI connector properties to atomic. 2017-05-30 10:33:25 +02: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: Convert intel DVO connector to atomic 2017-04-12 10:53:29 +02:00
intel_engine_cs.c drm/i915: Check the ring is empty when declaring the engines are idle 2017-06-01 14:22:16 +01:00
intel_fbc.c Merge tag 'drm-intel-next-2017-05-29' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-05-30 15:25:28 +10:00
intel_fbdev.c drm: Add DRM_MODE_ROTATE_ and DRM_MODE_REFLECT_ to UAPI 2017-05-22 09:49:48 +02:00
intel_fifo_underrun.c drm/i915: Add FIFO underrun tracepoints 2017-03-03 16:50:11 +02:00
intel_frontbuffer.c
intel_frontbuffer.h
intel_guc_ct.c drm/i915/guc: Introduce buffer based cmd transport 2017-05-26 13:26:53 +01:00
intel_guc_ct.h drm/i915/guc: Introduce buffer based cmd transport 2017-05-26 13:26:53 +01:00
intel_guc_fwif.h drm/i915/guc: Introduce buffer based cmd transport 2017-05-26 13:26:53 +01:00
intel_guc_loader.c drm/i915/guc: write wopcm related register once during uc init 2017-04-13 14:01:01 +03:00
intel_guc_log.c drm/i915: Treat WC a separate cache domain 2017-04-12 12:35:17 +01:00
intel_gvt.c drm/i915/gvt: Return -EIO if host GuC submission is enabled when loading GVT-g 2017-05-30 16:00:07 +03:00
intel_gvt.h drm/i915/gvt: Add gvt options sanitize function 2017-05-30 15:59:47 +03:00
intel_hangcheck.c drm/i915: Avoid format string expansion from engine names 2017-04-19 15:49:27 +03:00
intel_hdmi.c drm/i915/cnp: add CNP gmbus support 2017-06-02 13:59:32 -07: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: Update GLK HuC version 2017-05-22 09:50:03 +03:00
intel_i2c.c drm/i915/cnp: add CNP gmbus support 2017-06-02 13:59:32 -07:00
intel_lpe_audio.c drm/i915: Fix runtime PM for LPE audio 2017-05-15 14:44:11 +03:00
intel_lrc.c drm/i915/execlists: Reduce lock contention between schedule/submit_request 2017-05-17 13:38:13 +01:00
intel_lrc.h drm/i915: Sanitize engine context sizes 2017-04-28 12:11:59 +03:00
intel_lspcon.c
intel_lvds.c drm/i915: Convert LVDS connector properties to atomic. 2017-05-30 10:33:25 +02:00
intel_mocs.c
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/cnp: Backlight support for CNP. 2017-06-02 13:58:02 -07:00
intel_pipe_crc.c drm/i915: use memdup_user_nul 2017-05-08 09:28:39 +02:00
intel_pm.c drm/i915/glk: Fix dotclock calculation in skl_check_pipe_max_pixel_rate 2017-06-01 12:53:12 +02:00
intel_psr.c drm/i915/psr: disable psr2 for resolution greater than 32X20 2017-05-30 10:11:41 -07:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c drm/i915: Micro-optimise hotpath through intel_ring_begin() 2017-05-04 15:40:38 +01:00
intel_ringbuffer.h drm/i915: Split execlist priority queue into rbtree + linked list 2017-05-17 13:38:09 +01: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: Convert intel_sdvo connector properties to atomic. 2017-05-30 10:33:28 +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-06 17:58:42 +03:00
intel_tv.c drm/i915: Convert intel_tv connector properties to atomic, v5. 2017-04-12 10:53:22 +02:00
intel_uc.c drm/i915/guc: capture GuC logs if FW fails to load 2017-05-26 13:59:56 +01:00
intel_uc.h drm/i915/guc: capture GuC logs if FW fails to load 2017-05-26 13:59:56 +01:00
intel_uncore.c drm/i915: Remove decoupled MMIO code 2017-05-30 09:59:41 +03:00
intel_uncore.h drm/i915: Keep the forcewake timer alive for 1ms past the most recent use 2017-05-26 15:58:21 +01:00
intel_vbt_defs.h
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 Merge tag 'drm-intel-next-2017-05-29' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-05-30 15:25:28 +10:00
Makefile drm/i915/guc: Introduce buffer based cmd transport 2017-05-26 13:26:53 +01:00