Thank you for your contribution! Sashiko AI review found 1 potential issue(s) 
to consider:
- [High] In the MPO (Multi-Plane Overlay) path, setting `ignore_damage_clips` 
fails to trigger a full update if the framebuffer and bounding box haven't 
changed, resulting in a dropped display update.
--

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

This commit updates the DCN driver code to support the ignore_damage_clips
flag from drm_plane_state. By bypassing damage clip retrieval when this flag
is set, the driver is intended to perform a full display update instead of a
partial one.

> 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 7fe40bbba2658..97e14e02bf8c0 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

[ ... ]

> @@ -6229,8 +6229,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: High]
When ignore_damage_clips is true, num_clips remains 0. Does this cause an
issue for the MPO (Multi-Plane Overlay) path further down in this function?

Looking at the MPO path later in fill_dc_dirty_rects():

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c:fill_dc_dirty_rects() {
    ...
    fb_changed = old_plane_state->fb->base.id !=
                 new_plane_state->fb->base.id;
    bb_changed = (old_plane_state->crtc_x != new_plane_state->crtc_x ||
                  old_plane_state->crtc_y != new_plane_state->crtc_y ||
                  ...);
    ...
    if (num_clips) {
        for (; i < num_clips; clips++)
            ...
    } else if (fb_changed && !bb_changed) {
        fill_dc_dirty_rect(new_plane_state->plane, &dirty_rects[i],
            ...
    }

    flip_addrs->dirty_rect_count = i;
    return;
}

If dm_crtc_state->mpo_requested is true, and both fb_changed and bb_changed
are false, the code bypasses the goto ffu (Full Frame Update) logic used by
the non-MPO path.

Since num_clips is 0, the MPO logic will not add any dirty rects, resulting in
flip_addrs->dirty_rect_count being 0. 

Instead of forcing a full display update when ignore_damage_clips is set, 
could this silently drop the display update entirely?

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

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/2026072928-caring-papaya-ed97@gregkh?part=1

Reply via email to