diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_fbc.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_fbc.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c index 6a7ad3ed1463..3836a1c79714 100644 --- a/drivers/gpu/drm/i915/intel_fbc.c +++ b/drivers/gpu/drm/i915/intel_fbc.c | |||
@@ -1230,12 +1230,29 @@ static int intel_sanitize_fbc_option(struct drm_i915_private *dev_priv) | |||
1230 | if (i915.enable_fbc >= 0) | 1230 | if (i915.enable_fbc >= 0) |
1231 | return !!i915.enable_fbc; | 1231 | return !!i915.enable_fbc; |
1232 | 1232 | ||
1233 | if (!HAS_FBC(dev_priv)) | ||
1234 | return 0; | ||
1235 | |||
1233 | if (IS_BROADWELL(dev_priv)) | 1236 | if (IS_BROADWELL(dev_priv)) |
1234 | return 1; | 1237 | return 1; |
1235 | 1238 | ||
1236 | return 0; | 1239 | return 0; |
1237 | } | 1240 | } |
1238 | 1241 | ||
1242 | static bool need_fbc_vtd_wa(struct drm_i915_private *dev_priv) | ||
1243 | { | ||
1244 | #ifdef CONFIG_INTEL_IOMMU | ||
1245 | /* WaFbcTurnOffFbcWhenHyperVisorIsUsed:skl,bxt */ | ||
1246 | if (intel_iommu_gfx_mapped && | ||
1247 | (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))) { | ||
1248 | DRM_INFO("Disabling framebuffer compression (FBC) to prevent screen flicker with VT-d enabled\n"); | ||
1249 | return true; | ||
1250 | } | ||
1251 | #endif | ||
1252 | |||
1253 | return false; | ||
1254 | } | ||
1255 | |||
1239 | /** | 1256 | /** |
1240 | * intel_fbc_init - Initialize FBC | 1257 | * intel_fbc_init - Initialize FBC |
1241 | * @dev_priv: the i915 device | 1258 | * @dev_priv: the i915 device |
@@ -1253,6 +1270,9 @@ void intel_fbc_init(struct drm_i915_private *dev_priv) | |||
1253 | fbc->active = false; | 1270 | fbc->active = false; |
1254 | fbc->work.scheduled = false; | 1271 | fbc->work.scheduled = false; |
1255 | 1272 | ||
1273 | if (need_fbc_vtd_wa(dev_priv)) | ||
1274 | mkwrite_device_info(dev_priv)->has_fbc = false; | ||
1275 | |||
1256 | i915.enable_fbc = intel_sanitize_fbc_option(dev_priv); | 1276 | i915.enable_fbc = intel_sanitize_fbc_option(dev_priv); |
1257 | DRM_DEBUG_KMS("Sanitized enable_fbc value: %d\n", i915.enable_fbc); | 1277 | DRM_DEBUG_KMS("Sanitized enable_fbc value: %d\n", i915.enable_fbc); |
1258 | 1278 | ||