Patrik Jakobsson 9a2cca
From 4ff4ebac3f1378f4ba6e11fe5ad4a4ac590bb8a4 Mon Sep 17 00:00:00 2001
Patrik Jakobsson 9a2cca
From: =?UTF-8?q?Jouni=20H=C3=B6gander?= <jouni.hogander@intel.com>
Patrik Jakobsson 9a2cca
Date: Mon, 24 Oct 2022 08:46:49 +0300
Patrik Jakobsson 9a2cca
Subject: drm/i915/psr: Send update also on invalidate
Patrik Jakobsson 9a2cca
MIME-Version: 1.0
Patrik Jakobsson 9a2cca
Content-Type: text/plain; charset=UTF-8
Patrik Jakobsson 9a2cca
Content-Transfer-Encoding: 8bit
Patrik Jakobsson bd4acf
Alt-commit: d755f89220a2b49bc90b7b520bb6edeb4adb5f01
Patrik Jakobsson 9a2cca
Git-commit: 4ff4ebac3f1378f4ba6e11fe5ad4a4ac590bb8a4
Patrik Jakobsson 9a2cca
Patch-mainline: v6.1-rc5
Patrik Jakobsson 9a2cca
References: git-fixes
Patrik Jakobsson 9a2cca
Patrik Jakobsson 9a2cca
Currently we are observing mouse cursor stuttering when using
Patrik Jakobsson 9a2cca
xrandr --scaling=1.2x1.2. X scaling/transformation seems to be
Patrik Jakobsson 9a2cca
doing fronbuffer rendering. When moving mouse cursor X seems to
Patrik Jakobsson 9a2cca
perform several invalidates and only one DirtyFB. I.e. it seems
Patrik Jakobsson 9a2cca
to be assuming updates are sent to panel while drawing is done.
Patrik Jakobsson 9a2cca
Patrik Jakobsson 9a2cca
Earlier we were disabling PSR in frontbuffer invalidate call back
Patrik Jakobsson 9a2cca
(when drawing in X started). PSR was re-enabled in frontbuffer
Patrik Jakobsson 9a2cca
flush callback (dirtyfb ioctl). This was working fine with X
Patrik Jakobsson 9a2cca
scaling/transformation. Now we are just enabling continuous full
Patrik Jakobsson 9a2cca
frame (cff) in PSR invalidate callback. Enabling cff doesn't
Patrik Jakobsson 9a2cca
trigger any updates. It just configures PSR to send full frame
Patrik Jakobsson 9a2cca
when updates are sent. I.e. there are no updates on screen before
Patrik Jakobsson 9a2cca
PSR flush callback is made. X seems to be doing several updates
Patrik Jakobsson 9a2cca
in frontbuffer before doing dirtyfb ioctl.
Patrik Jakobsson 9a2cca
Patrik Jakobsson 9a2cca
Fix this by sending single update on every invalidate callback.
Patrik Jakobsson 9a2cca
Patrik Jakobsson 9a2cca
Cc: José Roberto de Souza <jose.souza@intel.com>
Patrik Jakobsson 9a2cca
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Patrik Jakobsson 9a2cca
Cc: Mika Kahola <mika.kahola@intel.com>
Patrik Jakobsson 9a2cca
Patrik Jakobsson 9a2cca
Fixes: 805f04d42a6b ("drm/i915/display/psr: Use continuos full frame to handle frontbuffer invalidations")
Patrik Jakobsson 9a2cca
Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/6679
Patrik Jakobsson 9a2cca
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Patrik Jakobsson 9a2cca
Reported-by: Brian J. Tarricone <brian@tarricone.org>
Patrik Jakobsson 9a2cca
Tested-by: Brian J. Tarricone <brian@tarricone.org>
Patrik Jakobsson 9a2cca
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
Patrik Jakobsson 9a2cca
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Patrik Jakobsson 9a2cca
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Patrik Jakobsson 9a2cca
Link: https://patchwork.freedesktop.org/patch/msgid/20221024054649.31299-1-jouni.hogander@intel.com
Patrik Jakobsson 9a2cca
(cherry picked from commit d755f89220a2b49bc90b7b520bb6edeb4adb5f01)
Patrik Jakobsson 9a2cca
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Patrik Jakobsson 9a2cca
Acked-by: Patrik Jakobsson <pjakobsson@suse.de>
Patrik Jakobsson 9a2cca
---
Patrik Jakobsson 9a2cca
 drivers/gpu/drm/i915/display/intel_psr.c | 5 ++++-
Patrik Jakobsson 9a2cca
 1 file changed, 4 insertions(+), 1 deletion(-)
Patrik Jakobsson 9a2cca
Patrik Jakobsson 9a2cca
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
Patrik Jakobsson 9a2cca
index d4cce627d7a8..15c3e448aa0e 100644
Patrik Jakobsson 9a2cca
--- a/drivers/gpu/drm/i915/display/intel_psr.c
Patrik Jakobsson 9a2cca
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
Patrik Jakobsson 9a2cca
@@ -2201,8 +2201,11 @@ static void _psr_invalidate_handle(struct intel_dp *intel_dp)
Patrik Jakobsson 9a2cca
 	if (intel_dp->psr.psr2_sel_fetch_enabled) {
Patrik Jakobsson 9a2cca
 		u32 val;
Patrik Jakobsson 9a2cca
 
Patrik Jakobsson 9a2cca
-		if (intel_dp->psr.psr2_sel_fetch_cff_enabled)
Patrik Jakobsson 9a2cca
+		if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
Patrik Jakobsson 9a2cca
+			/* Send one update otherwise lag is observed in screen */
Patrik Jakobsson 9a2cca
+			intel_de_write(dev_priv, CURSURFLIVE(intel_dp->psr.pipe), 0);
Patrik Jakobsson 9a2cca
 			return;
Patrik Jakobsson 9a2cca
+		}
Patrik Jakobsson 9a2cca
 
Patrik Jakobsson 9a2cca
 		val = man_trk_ctl_enable_bit_get(dev_priv) |
Patrik Jakobsson 9a2cca
 		      man_trk_ctl_partial_frame_bit_get(dev_priv) |
Patrik Jakobsson 9a2cca
-- 
Patrik Jakobsson 9a2cca
2.39.0
Patrik Jakobsson 9a2cca