linux/drivers/gpu/drm/i915
Chris Wilson c76ce038e3 drm/i915: Update rules for reading cache lines through the LLC
The LLC is a fun device. The cache is a distinct functional block within
the SA that arbitrates access from both the CPU and GPU cores. As such
all writes to memory land first in the LLC before further action is
taken. For example, an uncached write from either the CPU or GPU will
then proceed to memory and evict the cacheline from the LLC. This means that
a read from the LLC always returns the correct information even if the PTE
bit in the GPU differs from the PAT bit in the CPU. For the older
snooping architecture on non-LLC, the fundamental principle still holds
except that some coordination is required between the CPU and GPU to
explicitly perform the snooping (which is handled by our request
tracking).

The upshot of this is that we know that we can issue a read from either
LLC devices or snoopable memory and trust the contents of the cache -
i.e. we can forgo a clflush before a read in these circumstances.
Writing to memory from the CPU is a little more tricky as we have to
consider that the scanout does not read from the CPU cache at all, but
from main memory. So we have to currently treat all requests to write to
uncached memory as having to be flushed to main memory for coherency
with all consumers.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2013-08-10 11:19:50 +02:00
..
dvo.h Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2012-10-03 23:29:23 -07:00
dvo_ch7xxx.c drm/i915: dvo_ch7xxx: fix vsync polarity setting 2013-07-25 16:10:22 +02:00
dvo_ch7017.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ivch.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ns2501.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_sil164.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_tfp410.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
i915_debugfs.c drm/i915: List objects allocated from stolen memory in debugfs 2013-08-08 14:11:15 +02:00
i915_dma.c drm/i915: Create an init vm 2013-08-05 19:04:07 +02:00
i915_drv.c drm/i915: Colocate all GT access routines in the same file 2013-07-25 15:21:50 +02:00
i915_drv.h drm/i915: Make i915_hangcheck_elapsed() static 2013-08-09 10:45:57 +02:00
i915_gem.c drm/i915: Update rules for reading cache lines through the LLC 2013-08-10 11:19:50 +02:00
i915_gem_context.c drm/i915: mm_list is per VMA 2013-08-08 14:06:58 +02:00
i915_gem_debug.c drm/i915: Fix #endif comment 2013-08-09 10:45:52 +02:00
i915_gem_dmabuf.c drm/i915: fix dmabuf vmap support 2013-05-01 16:09:31 +10:00
i915_gem_evict.c drm/i915: mm_list is per VMA 2013-08-08 14:06:58 +02:00
i915_gem_execbuffer.c drm/i915: mm_list is per VMA 2013-08-08 14:06:58 +02:00
i915_gem_gtt.c drm/i915: Rename I915_CACHE_MLC_LLC to L3_LLC for Ivybridge 2013-08-06 16:35:30 +02:00
i915_gem_stolen.c drm/i915: mm_list is per VMA 2013-08-08 14:06:58 +02:00
i915_gem_tiling.c drm/i915: plumb VM into bind/unbind code 2013-08-08 14:04:20 +02:00
i915_gpu_error.c drm/i915: Update error capture for VMs 2013-08-08 14:08:37 +02:00
i915_ioc32.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
i915_irq.c drm/i915: Make i915_hangcheck_elapsed() static 2013-08-09 10:45:57 +02:00
i915_reg.h drm/i915: Use the watermark latency values from dev_priv for ILK/SNB/IVB too 2013-08-05 19:04:17 +02:00
i915_suspend.c Linux 3.10 2013-07-18 12:03:29 +02:00
i915_sysfs.c drm/i915: add error_state sysfs entry 2013-07-01 19:39:31 +02:00
i915_trace.h drm/i915: plumb VM into bind/unbind code 2013-08-08 14:04:20 +02:00
i915_trace_points.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
i915_ums.c drm/i915: scrap register address storage 2013-06-10 19:54:14 +02:00
intel_acpi.c i915: fix ACPI _DSM warning 2013-08-05 19:04:05 +02:00
intel_bios.c drm/i915: Organize VBT stuff inside drm_i915_private 2013-05-10 21:56:46 +02:00
intel_bios.h drm/i915: set CPT FDI RX polarity bits based on VBT 2013-04-18 09:43:31 +02:00
intel_crt.c drm/i915/crt: use native encoder->mode_set callback 2013-08-04 21:25:23 +02:00
intel_ddi.c drm/i915: remove use_fdi_mode argument from intel_prepare_ddi_buffers 2013-08-06 08:33:40 +02:00
intel_display.c drm/i915: expose HDMI connectors on port C on BYT 2013-08-09 19:02:27 +02:00
intel_dp.c drm/i915: rearrange vlv dp enable and pre_enable callbacks 2013-08-05 19:04:03 +02:00
intel_drv.h drm/i915: Make intel_set_mode() static 2013-08-09 10:46:15 +02:00
intel_dvo.c drm/i915/dvo: use native encoder ->mode_set callback 2013-08-04 21:25:21 +02:00
intel_fb.c drm/i915: Export intel_framebuffer_fini 2013-08-06 20:08:50 +02:00
intel_hdmi.c drm/i915/hmdi: Rename set_infoframe() to write_infoframe() 2013-08-08 14:04:51 +02:00
intel_i2c.c drm/i915: avoid premature DP AUX timeouts 2013-05-22 13:51:26 +02:00
intel_lvds.c drm/i915/lvds: use the native encoder ->mode_set callback 2013-08-04 21:25:25 +02:00
intel_modes.c drm/i915: Add "Automatic" mode for the "Broadcast RGB" property 2013-01-20 13:09:44 +01:00
intel_opregion.c drm/i915: tune down DIDL warning about too many outputs 2013-07-01 11:14:42 +02:00
intel_overlay.c drm/i915: Add VM to pin 2013-08-05 19:04:09 +02:00
intel_panel.c drm/i915: clean up crtc timings computation 2013-08-04 21:25:27 +02:00
intel_pm.c drm/i915: Fix FB WM for HSW 2013-08-09 20:27:43 +02:00
intel_ringbuffer.c drm/i915: Add VM to pin 2013-08-05 19:04:09 +02:00
intel_ringbuffer.h drm/i915: unify ring irq refcounts (again) 2013-07-11 14:36:49 +02:00
intel_sdvo.c drm/i915/sdvo: Port the infoframe code to the shared infrastructure 2013-08-08 14:04:49 +02:00
intel_sdvo_regs.h drm/i915: clear the entire sdvo infoframe buffer 2012-10-24 15:12:48 +02:00
intel_sideband.c drm/i915: change VLV IOSF sideband accessors to not return error code 2013-05-23 23:25:42 +02:00
intel_sprite.c drm/i915: Always call intel_update_sprite_watermarks() when disabling a plane 2013-08-08 14:11:15 +02:00
intel_tv.c drm/i915/tv: Use native encoder->mode_set callback 2013-08-04 21:25:22 +02:00
intel_uncore.c drm/i915: Convert the register access tracepoint to be conditional 2013-07-25 15:22:07 +02:00
Makefile drm/i915: Colocate all GT access routines in the same file 2013-07-25 15:21:50 +02:00