On 2026-02-27 14:26, Alex Hung wrote:
> [WHAT]
> New ASIC's 3D LUT is indicated by mpc.preblend.
> 
> Fixes: 0de2b1afea8d ("drm/amd/display: add 3D LUT colorop")
> Signed-off-by: Alex Hung <[email protected]>

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

Harry

> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c   | 6 ++++--
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c | 3 ++-
>  2 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
> index 2ba98f384685..cd1e58b8defc 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
> @@ -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) {
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c
> index f25c0ede7199..d59ba82d3d7c 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c
> @@ -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]) {

Reply via email to