Commit 0c8025e6 authored by Alex Hung's avatar Alex Hung Committed by Simon Ser
Browse files

drm/amd/display: Ensure 3D LUT for color pipeline



Check dpp.hw_3d_lut before creating shaper tf/lut and 3dlut colorops in
colorpipeline and handling these colorops.

Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarSimon Ser <contact@emersion.fr>
Link: https://patch.msgid.link/20251115000237.3561250-49-alex.hung@amd.com
parent d1aa2a26
Loading
Loading
Loading
Loading
+25 −22
Original line number Diff line number Diff line
@@ -1868,6 +1868,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);
	int ret;

	/* 1D Curve - DEGAM TF */
@@ -1900,6 +1901,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) {
		/* 1D Curve & LUT - SHAPER TF & LUT */
		colorop = colorop->next;
		if (!colorop) {
@@ -1926,6 +1928,7 @@ amdgpu_dm_plane_set_colorop_properties(struct drm_plane_state *plane_state,
		ret = __set_dm_plane_colorop_3dlut(plane_state, dc_plane_state, colorop);
		if (ret)
			return ret;
	}

	/* 1D Curve & LUT - BLND TF & LUT */
	colorop = colorop->next;
+53 −49
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@

#include "amdgpu.h"
#include "amdgpu_dm_colorop.h"
#include "dc.h"

const u64 amdgpu_dm_supported_degam_tfs =
	BIT(DRM_COLOROP_1D_CURVE_SRGB_EOTF) |
@@ -55,6 +56,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);
	int ret;
	int i = 0;

@@ -108,6 +110,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) {
		/* 1D curve - SHAPER TF */
		ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);
		if (!ops[i]) {
@@ -126,7 +129,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
		i++;

		/* 1D LUT - SHAPER LUT */
	ops[i] = kzalloc(sizeof(struct drm_colorop), GFP_KERNEL);
		ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);
		if (!ops[i]) {
			ret = -ENOMEM;
			goto cleanup;
@@ -143,7 +146,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
		i++;

		/* 3D LUT */
	ops[i] = kzalloc(sizeof(struct drm_colorop), GFP_KERNEL);
		ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);
		if (!ops[i]) {
			ret = -ENOMEM;
			goto cleanup;
@@ -158,6 +161,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
		drm_colorop_set_next_property(ops[i-1], ops[i]);

		i++;
	}

	/* 1D curve - BLND TF */
	ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);