[ 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

Reply via email to