]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Use mpc.preblend flag to indicate 3D LUT
authorAlex Hung <alex.hung@amd.com>
Fri, 27 Feb 2026 19:26:04 +0000 (12:26 -0700)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 2 Mar 2026 22:12:58 +0000 (17:12 -0500)
[WHAT]
New ASIC's 3D LUT is indicated by mpc.preblend.

Fixes: 0de2b1afea8d ("drm/amd/display: add 3D LUT colorop")
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>
(cherry picked from commit 43175f6164d32cb96362d16e357689f74298145c)

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c

index 2ba98f384685b404b9f97823520e697e8afbf55b..cd1e58b8defcb243e99bd3dd23408c5aa26bb51c 100644 (file)
@@ -1706,6 +1706,7 @@ __set_dm_plane_colorop_3dlut(struct drm_plane_state *plane_state,
        struct dc_transfer_func *tf = &dc_plane_state->in_shaper_func;
        struct drm_atomic_state *state = plane_state->state;
        const struct amdgpu_device *adev = drm_to_adev(colorop->dev);
+       bool has_3dlut = adev->dm.dc->caps.color.dpp.hw_3d_lut || adev->dm.dc->caps.color.mpc.preblend;
        const struct drm_device *dev = colorop->dev;
        const struct drm_color_lut32 *lut3d;
        uint32_t lut3d_size;
@@ -1722,7 +1723,7 @@ __set_dm_plane_colorop_3dlut(struct drm_plane_state *plane_state,
        }
 
        if (colorop_state && !colorop_state->bypass && colorop->type == DRM_COLOROP_3D_LUT) {
-               if (!adev->dm.dc->caps.color.dpp.hw_3d_lut) {
+               if (!has_3dlut) {
                        drm_dbg(dev, "3D LUT is not supported by hardware\n");
                        return -EINVAL;
                }
@@ -1875,6 +1876,7 @@ amdgpu_dm_plane_set_colorop_properties(struct drm_plane_state *plane_state,
        struct drm_colorop *colorop = plane_state->color_pipeline;
        struct drm_device *dev = plane_state->plane->dev;
        struct amdgpu_device *adev = drm_to_adev(dev);
+       bool has_3dlut = adev->dm.dc->caps.color.dpp.hw_3d_lut || adev->dm.dc->caps.color.mpc.preblend;
        int ret;
 
        /* 1D Curve - DEGAM TF */
@@ -1907,7 +1909,7 @@ amdgpu_dm_plane_set_colorop_properties(struct drm_plane_state *plane_state,
        if (ret)
                return ret;
 
-       if (adev->dm.dc->caps.color.dpp.hw_3d_lut) {
+       if (has_3dlut) {
                /* 1D Curve & LUT - SHAPER TF & LUT */
                colorop = colorop->next;
                if (!colorop) {
index f25c0ede719908a636ab629458c25fbe9a397506..d59ba82d3d7cac25e29e61bf8bbe08a3fcff73ce 100644 (file)
@@ -60,6 +60,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
        struct drm_colorop *ops[MAX_COLOR_PIPELINE_OPS];
        struct drm_device *dev = plane->dev;
        struct amdgpu_device *adev = drm_to_adev(dev);
+       bool has_3dlut = adev->dm.dc->caps.color.dpp.hw_3d_lut || adev->dm.dc->caps.color.mpc.preblend;
        int ret;
        int i = 0;
 
@@ -112,7 +113,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
 
        i++;
 
-       if (adev->dm.dc->caps.color.dpp.hw_3d_lut) {
+       if (has_3dlut) {
                /* 1D curve - SHAPER TF */
                ops[i] = kzalloc_obj(*ops[0]);
                if (!ops[i]) {