The mode-setting pipeline can disabled damage clippings for a commit
by setting ignore_damage_clips in struct drm_plane_state. The commit
will then do a full display update.

Test the flag in DCN code and do a full update in DCN code if it has
been set.

Commit 35ed38d58257 ("drm: Allow drivers to indicate the damage helpers
to ignore damage clips") introduced ignore_damage_clips to selectively
ignore damage clipping in certain framebuffer changes. This driver does
not do that, but DRM's damage iterator will soon rely on the flag.
Therefore supporting it here as well make sense for consistency.

Signed-off-by: Thomas Zimmermann <[email protected]>
Fixes: 35ed38d58257 ("drm: Allow drivers to indicate the damage helpers to 
ignore damage clips")
Cc: Javier Martinez Canillas <[email protected]>
Cc: Thomas Zimmermann <[email protected]>
Cc: Zack Rusin <[email protected]>
Cc: [email protected]
Cc: <[email protected]> # v6.8+
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 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 0e20194e6662..4cbb27f65a0b 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -6614,8 +6614,8 @@ static void fill_dc_dirty_rects(struct drm_plane *plane,
 {
        struct dm_crtc_state *dm_crtc_state = to_dm_crtc_state(crtc_state);
        struct rect *dirty_rects = flip_addrs->dirty_rects;
-       u32 num_clips;
-       struct drm_mode_rect *clips;
+       u32 num_clips = 0;
+       struct drm_mode_rect *clips = NULL;
        bool bb_changed;
        bool fb_changed;
        u32 i = 0;
@@ -6631,8 +6631,10 @@ static void fill_dc_dirty_rects(struct drm_plane *plane,
        if (new_plane_state->rotation != DRM_MODE_ROTATE_0)
                goto ffu;
 
-       num_clips = drm_plane_get_damage_clips_count(new_plane_state);
-       clips = drm_plane_get_damage_clips(new_plane_state);
+       if (!new_plane_state->ignore_damage_clips) {
+               num_clips = drm_plane_get_damage_clips_count(new_plane_state);
+               clips = drm_plane_get_damage_clips(new_plane_state);
+       }
 
        if (num_clips && (!amdgpu_damage_clips || (amdgpu_damage_clips < 0 &&
                                                   is_psr_su)))
-- 
2.54.0

Reply via email to