Re: [PATCH 01/82] drm/amd/display: Fall back to overlay cursor on dcn4x when top plane doesn't fill CRTC
Michel Dänzer <[email protected]>
| Newsgroups | org.freedesktop.lists.amd-gfx |
|---|---|
| Message-ID | <[email protected]> |
[ Adding Timur ] On 8/18/26 22:14, [email protected] wrote: > From: James Lin <[email protected]> > > [why] > amdgpu_dm_crtc_get_cursor_mode() returns DM_CURSOR_NATIVE_MODE early and > unconditionally for dcn4.x. That early return was added because these > ASICs no longer have the cursor-on-scaled-plane or cursor-on-yuv-plane > restrictions of older DCN, so native cursor is fine in those cases. > However, it also bypasses the "does the top plane fill the CRTC?" (hole) > evaluation further down. When the top/primary plane does not cover the > whole CRTC, the cursor must fall back to an overlay plane so it is > composited over the uncovered region; keeping the native cursor there > produces an incorrect result. As a consequence > igt@amdgpu/amd_cursor_overlay@non-full, which verifies exactly this > native->overlay fallback, fails on dcn42. > > [how] > Change unconditional early return with a skip_fmt_scale_restrictions flag. > For dcn4.x keep skipping the YUV / active-color-pipeline / different-scale > overlay triggers (genuinely unnecessary on this hardware), but fall > through to the existing entire_crtc_covered check so a top plane that does > not fill the CRTC still selects DM_CURSOR_OVERLAY_MODE. Native mode is > still chosen when the plane covers the whole CRTC. > > Update the amdgpu_dm_cursor KUnit tests accordingly: exercise the dcn4x > path with a full atomic state fixture (full coverage -> native) and add a > dcn4x hole case (top plane does not fill the CRTC -> overlay). > > Reviewed-by: Tom Chung <[email protected]> > Signed-off-by: James Lin <[email protected]> > Signed-off-by: Ivan Lipski <[email protected]> > --- > .../amd/display/amdgpu_dm/amdgpu_dm_cursor.c | 28 ++++++++-------- > .../amdgpu_dm/tests/amdgpu_dm_cursor_test.c | 32 +++++++++++++------ > 2 files changed, 38 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.c > index 9534848ed240c..c41fce07b8fa8 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.c > [...] > @@ -300,15 +297,17 @@ int amdgpu_dm_crtc_get_cursor_mode(struct amdgpu_device *adev, > */ > if (amdgpu_ip_version(adev, DCE_HWIP, 0) == IP_VERSION(4, 0, 1) || > amdgpu_ip_version(adev, DCE_HWIP, 0) == IP_VERSION(4, 2, 0) || > -#if defined(CONFIG_DRM_AMD_DC_DCN6_0) > amdgpu_ip_version(adev, DCE_HWIP, 0) == IP_VERSION(4, 2, 1) || > amdgpu_ip_version(adev, DCE_HWIP, 0) == IP_VERSION(6, 0, 0) || > -#else > - amdgpu_ip_version(adev, DCE_HWIP, 0) == IP_VERSION(4, 2, 1) || > -#endif > !dm_crtc_state->base.enable) { > - *cursor_mode = DM_CURSOR_NATIVE_MODE; > - return 0; > + /* > + * Newer DCN has no cursor-on-scaled/yuv-plane restriction, so > + * skip those overlay triggers below. A plane that does not fill > + * the CRTC still needs overlay mode so the cursor renders over > + * the hole, so fall through to the coverage check instead of > + * unconditionally forcing native mode here. > + */ > + skip_fmt_scale_restrictions = true; > } Timur, looks like this might break your fix in cea54c52d82d ("drm/amd/display: Set native cursor mode for disabled CRTCs") again. Maybe the CRTC disabled case should be handled separately from the DCE cases after all. -- Earthling Michel Dänzer \ GNOME / Xwayland / Mesa developer https://redhat.com \ Libre software enthusiast