]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/i915: Disable snooping (userptr, set-cache-level) on gen4
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 6 Sep 2017 19:24:24 +0000 (20:24 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 7 Sep 2017 09:41:19 +0000 (10:41 +0100)
The original gen4 has an issue where writes (both render and blt) into
snoopable pages are lost. We've previously worked around this in
userspace (ddx, igt) by simply not requesting snoopable buffers, but upon
rediscovering this problem for a third time, make the kernel reject such
requests with -ENODEV.

This disables snooping on userspace buffers for i965g and i965gm (original
gen4) machines.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20170906192424.26970-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_pci.c
drivers/gpu/drm/i915/intel_device_info.c

index 881b5d6708aa5ec3c89b8da08a510c8670d81254..e95baf3c4314ec63dc66c1fdf336e8606329c416 100644 (file)
@@ -168,6 +168,7 @@ static const struct intel_device_info intel_i965g_info __initconst = {
        .platform = INTEL_I965G,
        .has_overlay = 1,
        .hws_needs_physical = 1,
+       .has_snoop = false,
 };
 
 static const struct intel_device_info intel_i965gm_info __initconst = {
@@ -177,6 +178,7 @@ static const struct intel_device_info intel_i965gm_info __initconst = {
        .has_overlay = 1,
        .supports_tv = 1,
        .hws_needs_physical = 1,
+       .has_snoop = false,
 };
 
 static const struct intel_device_info intel_g45_info __initconst = {
index b17f7045c8f846d1493c08e392c811a0e2088ae6..43831b09b47a0c88b03d02e89e8f749983bb753d 100644 (file)
@@ -412,8 +412,6 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
        else if (INTEL_INFO(dev_priv)->gen >= 9)
                gen9_sseu_info_init(dev_priv);
 
-       WARN_ON(info->has_snoop != !info->has_llc);
-
        DRM_DEBUG_DRIVER("slice mask: %04x\n", info->sseu.slice_mask);
        DRM_DEBUG_DRIVER("slice total: %u\n", hweight8(info->sseu.slice_mask));
        DRM_DEBUG_DRIVER("subslice total: %u\n",