[PATCH 2/7] drm/amd/display: Reset plane when tiling flags change
Wu, Hersen
hersenxs.wu at amd.com
Thu Jul 30 20:50:42 UTC 2020
[AMD Official Use Only - Internal Distribution Only]
Reviewed-by: Hersen Wu <hersenxs.wu at amd.com>
-----Original Message-----
From: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
Sent: Thursday, July 30, 2020 4:37 PM
To: amd-gfx at lists.freedesktop.org; dri-devel at lists.freedesktop.org
Cc: Kazlauskas, Nicholas <Nicholas.Kazlauskas at amd.com>; Lakha, Bhawanpreet <Bhawanpreet.Lakha at amd.com>; Siqueira, Rodrigo <Rodrigo.Siqueira at amd.com>; Wu, Hersen <hersenxs.wu at amd.com>
Subject: [PATCH 2/7] drm/amd/display: Reset plane when tiling flags change
[Why]
Enabling or disable DCC or switching between tiled and linear formats can require bandwidth updates.
They're currently skipping all DC validation by being treated as purely surface updates.
[How]
Treat tiling_flag changes (which encode DCC state) as a condition for resetting the plane.
Cc: Bhawanpreet Lakha <Bhawanpreet.Lakha at amd.com>
Cc: Rodrigo Siqueira <Rodrigo.Siqueira at amd.com>
Cc: Hersen Wu <hersenxs.wu at amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
---
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 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 7cc5ab90ce13..bf1881bd492c 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8332,6 +8332,8 @@ static bool should_reset_plane(struct drm_atomic_state *state,
* TODO: Come up with a more elegant solution for this.
*/
for_each_oldnew_plane_in_state(state, other, old_other_state, new_other_state, i) {
+ struct dm_plane_state *old_dm_plane_state, *new_dm_plane_state;
+
if (other->type == DRM_PLANE_TYPE_CURSOR)
continue;
@@ -8342,9 +8344,20 @@ static bool should_reset_plane(struct drm_atomic_state *state,
if (old_other_state->crtc != new_other_state->crtc)
return true;
- /* TODO: Remove this once we can handle fast format changes. */
- if (old_other_state->fb && new_other_state->fb &&
- old_other_state->fb->format != new_other_state->fb->format)
+ /* Framebuffer checks fall at the end. */
+ if (!old_other_state->fb || !new_other_state->fb)
+ continue;
+
+ /* Pixel format changes can require bandwidth updates. */
+ if (old_other_state->fb->format != new_other_state->fb->format)
+ return true;
+
+ old_dm_plane_state = to_dm_plane_state(old_other_state);
+ new_dm_plane_state = to_dm_plane_state(new_other_state);
+
+ /* Tiling and DCC changes also require bandwidth updates. */
+ if (old_dm_plane_state->tiling_flags !=
+ new_dm_plane_state->tiling_flags)
return true;
}
--
2.25.1
More information about the amd-gfx
mailing list