FAILED: patch "[PATCH] drm/i915/fbc: FBC causes display flicker when VT-d is enabled" failed to apply to 4.7-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.7-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
0a491b96aa59a7232f6c1a81414aa57fb8de8594Mon Sep 17 00:00:00 2001
From: Chris Wilson <[email protected]>
Date: Thu, 4 Aug 2016 08:43:53 +0100
Subject: [PATCH] drm/i915/fbc: FBC causes display flicker when VT-d is enabled
on Skylake
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Erratum SKL075: Display Flicker May Occur When Both VT-d And FBC Are Enabled
"Display flickering may occur when both FBC (Frame Buffer Compression) and VT - d (Intel® Virtualization Technology for Directed I/O) are enabled and in use by the display controller."
Ville found the w/a name in the database:
WaFbcTurnOffFbcWhenHyperVisorIsUsed:skl,bxt and also dug out that it affects Broxton.
v2: Log when the quirk is applied.
v3: Ensure i915.enable_fbc is false when !HAS_FBC()
v4: Fix function name after rebase
v5: Add Broxton to the workaround
Note for backporting to stable, we need to add
#define mkwrite_device_info(ptr) \
((struct intel_device_info *)INTEL_INFO(ptr))
drivers/gpu/drm/i915/intel_fbc.c +20 -0
@@ -1230,12 +1230,29 @@ static int intel_sanitize_fbc_option(struct drm_i915_private *dev_priv)if (i915.enable_fbc >=0 )return !!i915.enable_fbc; +if (!HAS_FBC (dev_priv)) +return 0 ; +if (IS_BROADWELL (dev_priv))return 1 ;return 0 ; } +static bool need_fbc_vtd_wa (struct drm_i915_private *dev_priv) +{ +#ifdef CONFIG_INTEL_IOMMU +/* WaFbcTurnOffFbcWhenHyperVisorIsUsed:skl,bxt */ +if (intel_iommu_gfx_mapped && + (IS_SKYLAKE (dev_priv) ||IS_BROXTON (dev_priv))) { +DRM_INFO ("Disabling framebuffer compression (FBC) to prevent screen flicker with VT-d enabled\n" ); +return true; + } +#endif + +return false; +} +/** * intel_fbc_init - Initialize FBC * @dev_priv: the i915 device
@@ -1253,6 +1270,9 @@ void intel_fbc_init(struct drm_i915_private *dev_priv) fbc->active = false; fbc->work.scheduled = false; +if (need_fbc_vtd_wa (dev_priv)) +mkwrite_device_info (dev_priv)->has_fbc = false; + i915.enable_fbc =intel_sanitize_fbc_option (dev_priv);DRM_DEBUG_KMS ("Sanitized enable_fbc value: %d\n" , i915.enable_fbc);