mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 14:42:08 +02:00
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: 18a4127e93 ("drm/amd/display: Disable CRTC degamma when color pipeline is enabled")
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4963
Reviewed-by: Melissa Wen <mwen@igalia.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
43175f6164
commit
196a6aa727
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user