diff mbox series

drm/amd/display: fix cursor-plane-only atomic commits not triggering pageflips

Message ID 20231207182532.19416-1-xaver.hugl@gmail.com (mailing list archive)
State New, archived
Headers show
Series drm/amd/display: fix cursor-plane-only atomic commits not triggering pageflips | expand

Commit Message

Xaver Hugl Dec. 7, 2023, 6:25 p.m. UTC
With VRR, every atomic commit affecting a given display must trigger
a new scanout cycle, so that userspace is able to control the refresh
rate of the display. Before this commit, this was not the case for
atomic commits that only contain cursor plane properties.

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3034
Cc: stable@vger.kernel.org

Signed-off-by: Xaver Hugl <xaver.hugl@gmail.com>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Xaver Hugl Dec. 7, 2023, 7:30 p.m. UTC | #1
Sorry, it looks like I sent this too soon. I tested the patch on a
second PC and it doesn't fix the issue there.


Am Do., 7. Dez. 2023 um 19:25 Uhr schrieb Xaver Hugl <xaver.hugl@gmail.com>:
>
> With VRR, every atomic commit affecting a given display must trigger
> a new scanout cycle, so that userspace is able to control the refresh
> rate of the display. Before this commit, this was not the case for
> atomic commits that only contain cursor plane properties.
>
> Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3034
> Cc: stable@vger.kernel.org
>
> Signed-off-by: Xaver Hugl <xaver.hugl@gmail.com>
> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index b452796fc6d3..b379c859fbef 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -8149,9 +8149,15 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
>                 /* Cursor plane is handled after stream updates */
>                 if (plane->type == DRM_PLANE_TYPE_CURSOR) {
>                         if ((fb && crtc == pcrtc) ||
> -                           (old_plane_state->fb && old_plane_state->crtc == pcrtc))
> +                           (old_plane_state->fb && old_plane_state->crtc == pcrtc)) {
>                                 cursor_update = true;
> -
> +                               /*
> +                                * With atomic modesetting, cursor changes must
> +                                * also trigger a new refresh period with vrr
> +                                */
> +                               if (!state->legacy_cursor_update)
> +                                       pflip_present = true;
> +                       }
>                         continue;
>                 }
>
> --
> 2.43.0
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index b452796fc6d3..b379c859fbef 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8149,9 +8149,15 @@  static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
 		/* Cursor plane is handled after stream updates */
 		if (plane->type == DRM_PLANE_TYPE_CURSOR) {
 			if ((fb && crtc == pcrtc) ||
-			    (old_plane_state->fb && old_plane_state->crtc == pcrtc))
+			    (old_plane_state->fb && old_plane_state->crtc == pcrtc)) {
 				cursor_update = true;
-
+				/*
+				 * With atomic modesetting, cursor changes must
+				 * also trigger a new refresh period with vrr
+				 */
+				if (!state->legacy_cursor_update)
+					pflip_present = true;
+			}
 			continue;
 		}