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;