linux/drivers/gpu/drm/i915
Chris Wilson 5bab6f60cb drm/i915: Serialise updates to GGTT with access through GGTT on Braswell
When accessing through the GTT from one CPU whilst concurrently updating
the GGTT PTEs in another thread, the hardware likes to return random
data. As we have strong serialisation prevent us from modifying the PTE
of an active GTT mmapping, we have to conclude that it whilst modifying
other PTE's that error occurs. (I have not looked for any pattern such
as modifying PTE within the same page or cacheline as active PTE -
though checking whether revoking neighbouring objects should be enough
to test that theory.) The corruption also seems restricted to Braswell
and disappears with maxcpus=0. This patch stops all access through the
GTT by other CPUs when we update any PTE by stopping the machine around
the GGTT update.

Note that splitting up the 64 bit write into two 32 bit writes was
tried and found to fail too.

Testcase: igt/gem_concurrent_blit
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89079
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
[danvet: Add note about 2x 32bits failing too.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2015-11-17 17:36:01 +01:00
..
dvo_ch7xxx.c drm/i915: Constify adjusted_mode 2015-09-30 10:20:11 +02:00
dvo_ch7017.c drm/i915: Constify adjusted_mode 2015-09-30 10:20:11 +02:00
dvo_ivch.c drm/i915: Constify adjusted_mode 2015-09-30 10:20:11 +02:00
dvo_ns2501.c drm/i915: Constify adjusted_mode 2015-09-30 10:20:11 +02:00
dvo_sil164.c drm/i915: Constify adjusted_mode 2015-09-30 10:20:11 +02:00
dvo_tfp410.c drm/i915: Constify adjusted_mode 2015-09-30 10:20:11 +02:00
dvo.h drm/i915: Constify adjusted_mode 2015-09-30 10:20:11 +02:00
i915_cmd_parser.c drm/i915: Add GEN7_GPGPU_DISPATCHDIMX/Y/Z to the register whitelist 2015-10-06 10:40:22 +02:00
i915_debugfs.c drm/i915: Add dev_priv->psr_mmio_base 2015-11-16 16:01:30 +02:00
i915_dma.c drm/i915/gen9: Use dev_priv in csr functions 2015-11-12 17:22:52 +02:00
i915_drv.c drm/i915/gen9: flush DMC fw loading work during system suspend 2015-11-12 17:31:10 +02:00
i915_drv.h drm/i915: Add dev_priv->psr_mmio_base 2015-11-16 16:01:30 +02:00
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Report context GTT size 2015-10-19 12:16:46 +02:00
i915_gem_debug.c drm/i915: Implement inter-engine read-read optimisations 2015-05-21 15:11:42 +02:00
i915_gem_dmabuf.c drm/i915: remove unused has_dma_mapping flag 2015-07-13 22:42:41 +02:00
i915_gem_evict.c drm/i915: Remove dead i915_gem_evict_everything() 2015-10-07 16:05:40 +02:00
i915_gem_execbuffer.c drm/i915: Kill DRI1 cliprects 2015-10-07 16:05:41 +02:00
i915_gem_fence.c drm/i915: Parametrize fence registers 2015-09-30 10:20:03 +02:00
i915_gem_gtt.c drm/i915: Serialise updates to GGTT with access through GGTT on Braswell 2015-11-17 17:36:01 +01:00
i915_gem_gtt.h drm/i915: prevent out of range pt in the PDE macros (take 3) 2015-10-06 14:15:29 +02:00
i915_gem_render_state.c drm/i915: Add provision to extend Golden context batch 2015-07-21 09:30:57 +02:00
i915_gem_render_state.h drm/i915: Add provision to extend Golden context batch 2015-07-21 09:30:57 +02:00
i915_gem_shrinker.c drm/i915: Avoid GPU stalls from kswapd 2015-10-07 16:05:41 +02:00
i915_gem_stolen.c drm/i915/kbl: Introduce Kabylake platform defition. 2015-10-28 21:35:38 +02:00
i915_gem_tiling.c Merge tag 'drm-intel-fixes-2015-08-14' into drm-intel-next-fixes 2015-08-14 18:11:30 +02:00
i915_gem_userptr.c drm/i915: Use a task to cancel the userptr on invalidate_range 2015-10-06 14:15:30 +02:00
i915_gem.c drm/i915: Remove redundant check in i915_gem_obj_to_vma 2015-11-12 16:16:40 +02:00
i915_gpu_error.c drm/i915: Add dmc firmware load state and version to error state 2015-11-09 19:16:34 +02:00
i915_guc_reg.h drm/i915/guc: Add GuC css header parser 2015-10-21 14:31:34 +02:00
i915_guc_submission.c drm/i915/guc: Add GuC css header parser 2015-10-21 14:31:34 +02:00
i915_ioc32.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
i915_irq.c drm/i915: Turn __raw_i915_read8() & co. in to inline functions 2015-10-26 16:28:04 +02:00
i915_params.c drm/i915/gen8: Flip the 48b switch 2015-10-19 11:43:48 +02:00
i915_reg.h drm/i915: Add dev_priv->psr_mmio_base 2015-11-16 16:01:30 +02:00
i915_suspend.c drm/i915: Parametrize and fix SWF registers 2015-10-13 13:20:38 +02:00
i915_sysfs.c drm/i915/bxt: fix RC6 residency time calculation 2015-09-30 17:15:13 +02:00
i915_trace_points.c
i915_trace.h drm/i915: Add a tracepoint for the shrinker 2015-10-07 16:05:38 +02:00
i915_vgpu.c drm/i915: Turn __raw_i915_read8() & co. in to inline functions 2015-10-26 16:28:04 +02:00
i915_vgpu.h drm/i915: Update PV INFO page definition for Intel GVT-g 2015-09-02 11:46:12 +02:00
intel_acpi.c drm/i915: Drop unnecessary #include <linux/vga_switcheroo.h> 2015-10-13 10:18:38 +02:00
intel_atomic_plane.c drm/i915: Wait for object idle without locks in atomic_commit, v2. 2015-11-02 15:50:31 +01:00
intel_atomic.c drm/i915: Make wait_for_flips interruptible. 2015-11-02 15:50:17 +01:00
intel_audio.c drm/i915/kbl: Introduce Kabylake platform defition. 2015-10-28 21:35:38 +02:00
intel_bios.c i915: switch from acpi_os_ioremap to memremap 2015-10-13 10:22:45 +02:00
intel_bios.h drm/i915: Ignore "digital output" and "not HDMI output" bits for eDP detection 2015-09-23 16:58:29 +02:00
intel_crt.c drm/i915: s/_FDI_RXA_.../FDI_RX_...(PIPE_A)/ 2015-09-30 17:15:11 +02:00
intel_csr.c drm/i915/gen9: Use flush_work to synchronize with dmc loader 2015-11-12 17:30:25 +02:00
intel_ddi.c drm/i915/skl: Update DDI translation tables for SKL 2015-11-13 13:25:59 +02:00
intel_display.c drm/i915: Check for CPT and not !IBX in ironlake_disable_pch_transcoder() 2015-11-10 16:23:22 +02:00
intel_dp_link_training.c drm/i915: Make intel_dp_source_supports_hbr2() take an intel_dp pointer 2015-11-05 15:14:56 +02:00
intel_dp_mst.c drm/i915: Setup DDI clk for MST on SKL 2015-11-10 22:30:42 +02:00
intel_dp.c drm/i915: force link training when requested by Sink 2015-11-17 16:09:45 +01:00
intel_drv.h drm/i915: Store aux data reg offsets in intel_dp->aux_ch_data_reg[] 2015-11-16 16:01:06 +02:00
intel_dsi_panel_vbt.c drm/i915: s/dpio_lock/sb_lock/ 2015-05-28 11:13:51 +02:00
intel_dsi_pll.c drm/i915/bxt: vlv_dsi_reset_clocks() can be static 2015-10-06 10:57:06 +02:00
intel_dsi.c drm/i915/bxt: get DSI pixelclock 2015-10-02 14:45:51 +02:00
intel_dsi.h drm/i915/bxt: get DSI pixelclock 2015-10-02 14:45:51 +02:00
intel_dvo.c drm/i915: Constify adjusted_mode 2015-09-30 10:20:11 +02:00
intel_fbc.c drm/i915: remove in_dbg_master check from intel_fbc.c 2015-11-10 11:00:58 +01:00
intel_fbdev.c drm/i915: Move the fbdev async_schedule() into intel_fbdev.c 2015-11-11 13:35:14 +02:00
intel_fifo_underrun.c drm/i915: Check for FIFO underruns after modeset on IVB/HSW and CPT/PPT 2015-11-10 16:23:17 +02:00
intel_frontbuffer.c drm/i915: fix FBC frontbuffer tracking flushing code 2015-08-05 09:59:44 +02:00
intel_guc_fwif.h drm/i915/guc: Add GuC css header parser 2015-10-21 14:31:34 +02:00
intel_guc_loader.c drm/i915: Shut up GuC errors when it's disabled 2015-10-31 09:26:19 +01:00
intel_guc.h drm/i915/guc: Add GuC css header parser 2015-10-21 14:31:34 +02:00
intel_hdmi.c drm/i915: Disable FIFO underrun reporting around IBX transcoder B workaround 2015-11-10 16:23:28 +02:00
intel_hotplug.c Revert "drm/i915: Call encoder hotplug for init and resume cases" 2015-10-08 21:51:57 +02:00
intel_i2c.c drm/i915/kbl: Introduce Kabylake platform defition. 2015-10-28 21:35:38 +02:00
intel_lrc.c drm/i915: make A0 wa's applied to A1 2015-10-29 15:39:15 +02:00
intel_lrc.h drm/i915: Parametrize LRC registers 2015-09-23 17:13:01 +02:00
intel_lvds.c drm/i915: Clean up LVDS register handling harder 2015-11-11 17:45:31 +02:00
intel_mocs.c drm/i915/kbl: Introduce Kabylake platform defition. 2015-10-28 21:35:38 +02:00
intel_mocs.h drm/i915: Added Programming of the MOCS 2015-07-14 17:13:14 +02:00
intel_modes.c drm/i915: Add HDMI aspect ratio property for SDVO 2015-09-30 10:20:12 +02:00
intel_opregion.c drm/i915: Don't complain about lack of ACPI video bios 2015-10-31 09:26:20 +01:00
intel_overlay.c drm/i915: Wait for object idle without locks in atomic_commit, v2. 2015-11-02 15:50:31 +01:00
intel_panel.c i915: switch from acpi_os_ioremap to memremap 2015-10-13 10:22:45 +02:00
intel_pm.c drm/i915/skl: Correct other-pipe watermark update condition check (v2) 2015-11-17 15:18:25 +01:00
intel_psr.c drm/i915: Model PSR AUX register selection more like the normal AUX code 2015-11-16 16:01:31 +02: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: make A0 wa's applied to A1 2015-10-29 15:39:15 +02:00
intel_ringbuffer.h drm/i915: Recover all available ringbuffer space following reset 2015-10-28 17:10:31 +00:00
intel_runtime_pm.c drm/i915/skl: Removed assert for csr-fw-loading check during disabling dc6 2015-11-12 17:32:06 +02:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Disable FIFO underrun reporting around IBX transcoder B workaround 2015-11-10 16:23:28 +02:00
intel_sideband.c drm/i915: s/dpio_lock/sb_lock/ 2015-05-28 11:13:51 +02:00
intel_sprite.c drm/i915: Avoid pointer arithmetic in calculating plane surface offset 2015-11-09 20:00:11 +02:00
intel_tv.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next 2015-09-30 08:47:41 +02:00
intel_uncore.c drm/i915: Add NEEDS_FORCEWAKE() checks for vlv/chv 2015-10-26 16:28:46 +02:00
Kconfig drm/i915: Serialise updates to GGTT with access through GGTT on Braswell 2015-11-17 17:36:01 +01:00
Makefile drm/i915: Move generic link training code to a separate file 2015-11-05 15:14:56 +02:00