[J/OEM-5.14] [PATCH 1/1] UBUNTU: SAUCE: drm/i915/display/psr: Fix flicker on TGL + AUO panel

Kai-Heng Feng kai.heng.feng at canonical.com
Tue Jun 28 12:15:53 UTC 2022


BugLink: https://bugs.launchpad.net/bugs/1980087

Enabling PSR2 selective fetch regressed ADL + BOE panel, so it's more
plausible to only enable the feature on TGL + specific AUO panel.

Signed-off-by: Kai-Heng Feng <kai.heng.feng at canonical.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c  |  2 +-
 drivers/gpu/drm/i915/display/intel_dp.h  |  2 ++
 drivers/gpu/drm/i915/display/intel_psr.c | 11 +++++++++++
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index bc3c057544666..73cf4d01daa95 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -4034,7 +4034,7 @@ bool intel_digital_port_connected(struct intel_encoder *encoder)
 	return is_connected;
 }
 
-static struct edid *
+struct edid *
 intel_dp_get_edid(struct intel_dp *intel_dp)
 {
 	struct intel_connector *intel_connector = intel_dp->attached_connector;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index 2121aaa9b8db0..0746dc7f7ac4b 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -107,6 +107,8 @@ void intel_read_dp_sdp(struct intel_encoder *encoder,
 		       unsigned int type);
 bool intel_digital_port_connected(struct intel_encoder *encoder);
 
+struct edid *intel_dp_get_edid(struct intel_dp *intel_dp);
+
 static inline unsigned int intel_dp_unused_lane_mask(int lane_count)
 {
 	return ~((1 << lane_count) - 1) & 0xf;
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 29a514fbfa4de..4558c393bd61a 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -759,8 +759,19 @@ static bool intel_psr2_sel_fetch_config_valid(struct intel_dp *intel_dp,
 	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
 	struct intel_plane_state *plane_state;
 	struct intel_plane *plane;
+	struct edid *edid;
 	int i;
 
+	edid = intel_dp_get_edid(intel_dp);
+
+	if (edid->mfg_id[0] == 0x06 && edid->mfg_id[1] == 0xaf &&
+	    edid->prod_code[0] == 0x8c && edid->prod_code[1] == 0xcd &&
+	    IS_TIGERLAKE(dev_priv)) {
+		drm_info_once(&dev_priv->drm,
+			      "PSR2 sel fetch enabled for TGL + AUO panel\n");
+		return crtc_state->enable_psr2_sel_fetch = true;
+	}
+
 	if (!dev_priv->params.enable_psr2_sel_fetch &&
 	    intel_dp->psr.debug != I915_PSR_DEBUG_ENABLE_SEL_FETCH) {
 		drm_dbg_kms(&dev_priv->drm,
-- 
2.36.1




More information about the kernel-team mailing list