Thank you for your contribution! Sashiko AI review found 1 potential issue(s) 
to consider:
- [Medium] Setting `ignore_damage_clips` silently drops damage updates instead 
of forcing a full update when MPO is requested.
--

--- Patch [1]: Patch "drm/amd/display: Handle struct 
drm_plane_state.ignore_damage_clips" has been added to the 6.12-stable tree ---
commit f3d595b0a2d71acfd337d504cdb933e78875455e
Author: [email protected] <[email protected]>

drm/amd/display: Handle struct drm_plane_state.ignore_damage_clips

The mode-setting pipeline can disable damage clippings for a commit by
setting ignore_damage_clips in struct drm_plane_state. This commit
updates the DCN code to do a full update if this flag is set.

> 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 8d97f17ffe662..2f00287d2c2ae 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
[ ... ]
> @@ -5718,8 +5718,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);
> +     }

[Severity: Medium]
When ignore_damage_clips is true, num_clips remains 0. Does this silently
drop damage updates instead of forcing a full update when MPO is requested?

Further down in fill_dc_dirty_rects(), if dm_crtc_state->mpo_requested is
true and both the framebuffer ID and bounding box are unchanged (e.g.,
frontbuffer rendering or property-only updates):

        if (num_clips) {
                for (; i < num_clips; clips++)
                        fill_dc_dirty_rect(new_plane_state->plane,
                                           &dirty_rects[i], clips->x1,
                                           clips->y1, clips->x2 - clips->x1,
                                           clips->y2 - clips->y1, &i, false);
        } else if (fb_changed && !bb_changed) {
                fill_dc_dirty_rect(new_plane_state->plane, &dirty_rects[i],
                                   new_plane_state->crtc_x,
                                   new_plane_state->crtc_y,
                                   new_plane_state->crtc_w,
                                   new_plane_state->crtc_h, &i, false);
        }

        flip_addrs->dirty_rect_count = i;
        return;

If fb_changed and bb_changed are false, i remains 0. With num_clips also 0,
flip_addrs->dirty_rect_count becomes 0. The update appears to be dropped
entirely rather than falling back to a full update via the ffu path.

>  
>       if (num_clips && (!amdgpu_damage_clips || (amdgpu_damage_clips < 0 &&
>                                                  is_psr_su)))

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/2026072919-worshiper-candied-889c@gregkh?part=1

Reply via email to