[Intel-gfx] [PATCH] drm/i915/display: Avoid PSR and FBC features concurently.

Jason Le jason.v.le at intel.com
Mon Jun 8 06:56:35 UTC 2020


Issue: Enble both PSR and FBC caused some fickers on some eDP panels (eg. Panel GIS
13.5" QHD Glare NE135FBM-N41/NC135GFL02).  Disbling either PSR or FBC
will solve this flicker issue.

Both PSR and FBC features save power when render is not busy. When PSR is
active, saving power achieved  by source turning off source transmitter and main link,
putting memory on self-refresh mode. Therefore with PSR enabled,
FBC role is minimized since PSR power saving already covers most what
FBC does.  Disabling FBC in case to avoid conflict between PSR and FBC
which causes display anomaly in some scenarios.

Tests:
Booted system with PSR enabled, verified FBC disabled.
Disabled PSR with disabled (i915.enable_psr=0), verified FBC enabled.
---
 drivers/gpu/drm/i915/display/intel_fbc.c | 6 ++++++
 drivers/gpu/drm/i915/display/intel_psr.c | 4 +++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
index 1c26673acb2d..52bc7483adb5 100644
--- a/drivers/gpu/drm/i915/display/intel_fbc.c
+++ b/drivers/gpu/drm/i915/display/intel_fbc.c
@@ -1419,6 +1419,12 @@ void intel_fbc_init(struct drm_i915_private *dev_priv)
 	drm_dbg_kms(&dev_priv->drm, "Sanitized enable_fbc value: %d\n",
 		    i915_modparams.enable_fbc);
 
+	if (i915_modparams.enable_psr) {
+               i915_modparams.enable_fbc = 0;
+                DRM_DEBUG_KMS("PSR enabled. FBC no longer needed.  Disable FBC. \n");
+	}
+
+
 	if (!HAS_FBC(dev_priv)) {
 		fbc->no_fbc_reason = "unsupported by this chipset";
 		return;
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index b7a2c102648a..25accfdd5ad3 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1439,8 +1439,10 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
 	if (!HAS_PSR(dev_priv))
 		return;
 
-	if (!dev_priv->psr.sink_support)
+	if (!dev_priv->psr.sink_support) {
+		i915_modparams.enable_psr = 0;
 		return;
+	}
 
 	if (IS_HASWELL(dev_priv))
 		/*
-- 
2.17.1



More information about the Intel-gfx mailing list