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
