On 2026-02-27 14:30, Alex Hung wrote:
> [WHAT]
> Create DEGAMMA properties even if color pipeline is enabled, and enforce
> the mutual exclusion in atomic check by rejecting any commit that
> attempts to enable both COLOR_PIPELINE on the plane and DEGAMMA_LUT on
> the CRTC simultaneously.
> 
> Fixes: 18a4127e9315 ("drm/amd/display: Disable CRTC degamma when color 
> pipeline is enabled")
> Signed-off-by: Alex Hung <[email protected]>

Reviewed-by: Harry Wentland <[email protected]>

Harry

> ---
>  .../drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c   | 16 ++++++++--------
>  .../drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c  |  8 ++++++++
>  2 files changed, 16 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> index 130190e8a1b2..304437c2284d 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> @@ -765,15 +765,15 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager 
> *dm,
>       dm->adev->mode_info.crtcs[crtc_index] = acrtc;
>  
>       /* Don't enable DRM CRTC degamma property for
> -      * 1. Degamma is replaced by color pipeline.
> -      * 2. DCE since it doesn't support programmable degamma anywhere.
> -      * 3. DCN401 since pre-blending degamma LUT doesn't apply to cursor.
> +      * 1. DCE since it doesn't support programmable degamma anywhere.
> +      * 2. DCN401 since pre-blending degamma LUT doesn't apply to cursor.
> +      * Note: DEGAMMA properties are created even if the primary plane has 
> the
> +      * COLOR_PIPELINE property. User space can use either the DEGAMMA 
> properties
> +      * or the COLOR_PIPELINE property. An atomic commit which attempts to 
> enable
> +      * both is rejected.
>        */
> -     if (plane->color_pipeline_property)
> -             has_degamma = false;
> -     else
> -             has_degamma = dm->adev->dm.dc->caps.color.dpp.dcn_arch &&
> -                           dm->adev->dm.dc->ctx->dce_version != 
> DCN_VERSION_4_01;
> +     has_degamma = dm->adev->dm.dc->caps.color.dpp.dcn_arch &&
> +                   dm->adev->dm.dc->ctx->dce_version != DCN_VERSION_4_01;
>  
>       drm_crtc_enable_color_mgmt(&acrtc->base, has_degamma ? 
> MAX_COLOR_LUT_ENTRIES : 0,
>                                  true, MAX_COLOR_LUT_ENTRIES);
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> index 70587e5a8d46..127207e18dcb 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> @@ -1256,6 +1256,14 @@ static int amdgpu_dm_plane_atomic_check(struct 
> drm_plane *plane,
>       if (ret)
>               return ret;
>  
> +     /* Reject commits that attempt to use both COLOR_PIPELINE and CRTC 
> DEGAMMA_LUT */
> +     if (new_plane_state->color_pipeline && new_crtc_state->degamma_lut) {
> +             drm_dbg_atomic(plane->dev,
> +                            "[PLANE:%d:%s] COLOR_PIPELINE and CRTC 
> DEGAMMA_LUT cannot be enabled simultaneously\n",
> +                            plane->base.id, plane->name);
> +             return -EINVAL;
> +     }
> +
>       ret = amdgpu_dm_plane_fill_dc_scaling_info(adev, new_plane_state, 
> &scaling_info);
>       if (ret)
>               return ret;

Reply via email to