On 2024-09-11 09:06, sunpeng...@amd.com wrote:
> From: Leo Li <sunpeng...@amd.com>
> 
> [Why]
> 
> DC has a special commit path for native cursor, which use the built-in
> cursor pipe within DCN planes. This update path does not require all
> enabled planes to be added to the list of surface updates sent to DC.
> 
> This is not the case for overlay cursor; it uses the same path as MPO
> commits. This update path requires all enabled planes to be added to the
> list of surface updates sent to DC. Otherwise, DC will disable planes
> not inside the list.
> 
> [How]
> 
> If overlay cursor is needed, add all planes on the same CRTC as this
> cursor to the atomic state. This is already done for non-cursor planes
> (MPO), just before the added lines.
> 
> Fixes: 1b04dcca4fb1 ("drm/amd/display: Introduce overlay cursor mode")
> Closes: 
> https://lore.kernel.org/lkml/f68020a3-c413-482d-beb2-5432d98a1...@amd.com
> Signed-off-by: Leo Li <sunpeng...@amd.com>
> Tested-by: Mikhail Gavrilov <mikhail.v.gavri...@gmail.com>

Reviewed-by: Harry Wentland <harry.wentl...@amd.com>

Harry

> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> 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 a3edaf658ae00..6b5baa3e20c49 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -11427,6 +11427,17 @@ static int amdgpu_dm_atomic_check(struct drm_device 
> *dev,
>                       drm_dbg(dev, "Failed to determine cursor mode\n");
>                       goto fail;
>               }
> +
> +             /*
> +              * If overlay cursor is needed, DC cannot go through the
> +              * native cursor update path. All enabled planes on the CRTC
> +              * need to be added for DC to not disable a plane by mistake
> +              */
> +             if (dm_new_crtc_state->cursor_mode == DM_CURSOR_OVERLAY_MODE) {
> +                     ret = drm_atomic_add_affected_planes(state, crtc);
> +                     if (ret)
> +                             goto fail;
> +             }
>       }
>  
>       /* Remove exiting planes if they are modified */

Reply via email to