Commit 196a6aa7 authored by Alex Hung's avatar Alex Hung Committed by Alex Deucher
Browse files

drm/amd/display: Enable DEGAMMA and reject COLOR_PIPELINE+DEGAMMA_LUT

[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: 18a4127e ("drm/amd/display: Disable CRTC degamma when color pipeline is enabled")
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4963


Reviewed-by: default avatarMelissa Wen <mwen@igalia.com>
Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 43175f61
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -765,13 +765,13 @@ 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;

+8 −0
Original line number Diff line number Diff line
@@ -1257,6 +1257,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;