Skip to content

Commit c5b1a06

Browse files
leo-sunli1alexdeucher
authored andcommitted
drm/amd/display: Do not reset planes based on crtc zpos_changed
[Why] drm_normalize_zpos will set the crtc_state->zpos_changed to 1 if any of it's assigned planes changes zpos, or is removed/added from it. To have amdgpu_dm request a plane reset on this is too broad. For example, if only the cursor plane was moved from one crtc to another, the crtc's zpos_changed will be set to true. But that does not mean that the underlying primary plane requires a reset. [How] Narrow it down so that only the plane that has a change in zpos will require a reset. As a future TODO, we can further optimize this by only requiring a reset on z-order change. Z-order is different from z-pos, since a zpos change doesn't necessarily mean the z-ordering changed, and DC should only require a reset if the z-ordering changed. For example, the following zpos update does not change z-ordering: Plane A: zpos 2 -> 3 Plane B: zpos 1 -> 2 => Plane A is still on top of plane B: no reset needed Whereas this one does change z-ordering: Plane A: zpos 2 -> 1 Plane B: zpos 1 -> 2 => Plane A changed from on top, to below plane B: reset needed Fixes: 38e0c3d ("drm/amd/display: Move PRIMARY plane zpos higher") Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3569 Signed-off-by: Leo Li <[email protected]> Reviewed-by: Harry Wentland <[email protected]> Signed-off-by: Alex Deucher <[email protected]> (cherry picked from commit 578aab4)
1 parent e835d51 commit c5b1a06

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10571,7 +10571,7 @@ static bool should_reset_plane(struct drm_atomic_state *state,
1057110571
* TODO: We can likely skip bandwidth validation if the only thing that
1057210572
* changed about the plane was it'z z-ordering.
1057310573
*/
10574-
if (new_crtc_state->zpos_changed)
10574+
if (old_plane_state->normalized_zpos != new_plane_state->normalized_zpos)
1057510575
return true;
1057610576

1057710577
if (drm_atomic_crtc_needs_modeset(new_crtc_state))

0 commit comments

Comments
 (0)