Skip to content

Commit 4ff4eba

Browse files
hogandertursulin
authored andcommitted
drm/i915/psr: Send update also on invalidate
Currently we are observing mouse cursor stuttering when using xrandr --scaling=1.2x1.2. X scaling/transformation seems to be doing fronbuffer rendering. When moving mouse cursor X seems to perform several invalidates and only one DirtyFB. I.e. it seems to be assuming updates are sent to panel while drawing is done. Earlier we were disabling PSR in frontbuffer invalidate call back (when drawing in X started). PSR was re-enabled in frontbuffer flush callback (dirtyfb ioctl). This was working fine with X scaling/transformation. Now we are just enabling continuous full frame (cff) in PSR invalidate callback. Enabling cff doesn't trigger any updates. It just configures PSR to send full frame when updates are sent. I.e. there are no updates on screen before PSR flush callback is made. X seems to be doing several updates in frontbuffer before doing dirtyfb ioctl. Fix this by sending single update on every invalidate callback. Cc: José Roberto de Souza <[email protected]> Cc: Ville Syrjälä <[email protected]> Cc: Mika Kahola <[email protected]> Fixes: 805f04d ("drm/i915/display/psr: Use continuos full frame to handle frontbuffer invalidations") Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/6679 Signed-off-by: Jouni Högander <[email protected]> Reported-by: Brian J. Tarricone <[email protected]> Tested-by: Brian J. Tarricone <[email protected]> Reviewed-by: Mika Kahola <[email protected]> Reviewed-by: José Roberto de Souza <[email protected]> Signed-off-by: José Roberto de Souza <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] (cherry picked from commit d755f89) Signed-off-by: Tvrtko Ursulin <[email protected]>
1 parent f90daa9 commit 4ff4eba

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

drivers/gpu/drm/i915/display/intel_psr.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2201,8 +2201,11 @@ static void _psr_invalidate_handle(struct intel_dp *intel_dp)
22012201
if (intel_dp->psr.psr2_sel_fetch_enabled) {
22022202
u32 val;
22032203

2204-
if (intel_dp->psr.psr2_sel_fetch_cff_enabled)
2204+
if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
2205+
/* Send one update otherwise lag is observed in screen */
2206+
intel_de_write(dev_priv, CURSURFLIVE(intel_dp->psr.pipe), 0);
22052207
return;
2208+
}
22062209

22072210
val = man_trk_ctl_enable_bit_get(dev_priv) |
22082211
man_trk_ctl_partial_frame_bit_get(dev_priv) |

0 commit comments

Comments
 (0)