]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Add support for 2nd sharpening range
authorSamson Tam <Samson.Tam@amd.com>
Fri, 9 May 2025 15:19:28 +0000 (11:19 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 3 Jun 2025 19:35:56 +0000 (15:35 -0400)
[Why & How]
Add support for 2nd sharpening range for cases where we want
override existing DCN sharpening range

Reviewed-by: Ilya Bakoulin <ilya.bakoulin@amd.com>
Signed-off-by: Samson Tam <Samson.Tam@amd.com>
Signed-off-by: Wayne Lin <wayne.lin@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/dc_spl_translate.c
drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c

index a63f7fe277fa2d756a95839fb8fc71a8eee2a3ff..6b0471f635f2415dad6355112985acb84d45de97 100644 (file)
@@ -46,6 +46,8 @@
 
 #include "dmub/inc/dmub_cmd.h"
 
+#include "sspl/dc_spl_types.h"
+
 struct abm_save_restore;
 
 /* forward declaration */
@@ -512,6 +514,8 @@ struct dc_config {
        bool set_pipe_unlock_order;
        bool enable_dpia_pre_training;
        bool unify_link_enc_assignment;
+       struct spl_sharpness_range dcn_sharpness_range;
+       struct spl_sharpness_range dcn_override_sharpness_range;
 };
 
 enum visual_confirm {
@@ -1420,6 +1424,8 @@ struct dc_plane_state {
        int sharpness_level;
        enum linear_light_scaling linear_light_scaling;
        unsigned int sdr_white_level_nits;
+       struct spl_sharpness_range sharpness_range;
+       enum sharpness_range_source sharpness_source;
 };
 
 struct dc_plane_info {
index e3a8283b4098c7cbe3c506286f23b5b6b2658255..7f57661433eb57ff0d05a3ee020e89b1fca8693f 100644 (file)
@@ -156,15 +156,16 @@ void translate_SPL_in_params_from_pipe_ctx(struct pipe_ctx *pipe_ctx, struct spl
                spl_in->adaptive_sharpness.enable = true;
                spl_in->adaptive_sharpness.sharpness_level = 0;
        } else if (sharpness_setting == SHARPNESS_CUSTOM) {
-               spl_in->adaptive_sharpness.sharpness_range.sdr_rgb_min = 0;
-               spl_in->adaptive_sharpness.sharpness_range.sdr_rgb_max = 1750;
-               spl_in->adaptive_sharpness.sharpness_range.sdr_rgb_mid = 750;
-               spl_in->adaptive_sharpness.sharpness_range.sdr_yuv_min = 0;
-               spl_in->adaptive_sharpness.sharpness_range.sdr_yuv_max = 3500;
-               spl_in->adaptive_sharpness.sharpness_range.sdr_yuv_mid = 1500;
-               spl_in->adaptive_sharpness.sharpness_range.hdr_rgb_min = 0;
-               spl_in->adaptive_sharpness.sharpness_range.hdr_rgb_max = 2750;
-               spl_in->adaptive_sharpness.sharpness_range.hdr_rgb_mid = 1500;
+               /* SAT: read harpness_range from dc_plane_state */
+               spl_in->adaptive_sharpness.sharpness_range.sdr_rgb_min = plane_state->sharpness_range.sdr_rgb_min;
+               spl_in->adaptive_sharpness.sharpness_range.sdr_rgb_max = plane_state->sharpness_range.sdr_rgb_max;
+               spl_in->adaptive_sharpness.sharpness_range.sdr_rgb_mid = plane_state->sharpness_range.sdr_rgb_mid;
+               spl_in->adaptive_sharpness.sharpness_range.sdr_yuv_min = plane_state->sharpness_range.sdr_yuv_min;
+               spl_in->adaptive_sharpness.sharpness_range.sdr_yuv_max = plane_state->sharpness_range.sdr_yuv_max;
+               spl_in->adaptive_sharpness.sharpness_range.sdr_yuv_mid = plane_state->sharpness_range.sdr_yuv_mid;
+               spl_in->adaptive_sharpness.sharpness_range.hdr_rgb_min = plane_state->sharpness_range.hdr_rgb_min;
+               spl_in->adaptive_sharpness.sharpness_range.hdr_rgb_max = plane_state->sharpness_range.hdr_rgb_max;
+               spl_in->adaptive_sharpness.sharpness_range.hdr_rgb_mid = plane_state->sharpness_range.hdr_rgb_mid;
 
                if (force_sharpness_level > 0) {
                        if (force_sharpness_level > 10)
index f420c4dafa03c42afe410e125f2efad4a0a28428..fbb6db1baaadfc182250767c8b084286c7c63901 100644 (file)
@@ -1959,6 +1959,27 @@ static bool dcn401_resource_construct(
        dc->caps.color.mpc.ocsc = 1;
        dc->config.use_spl = true;
        dc->config.prefer_easf = true;
+
+       dc->config.dcn_sharpness_range.sdr_rgb_min = 0;
+       dc->config.dcn_sharpness_range.sdr_rgb_max = 1750;
+       dc->config.dcn_sharpness_range.sdr_rgb_mid = 750;
+       dc->config.dcn_sharpness_range.sdr_yuv_min = 0;
+       dc->config.dcn_sharpness_range.sdr_yuv_max = 3500;
+       dc->config.dcn_sharpness_range.sdr_yuv_mid = 1500;
+       dc->config.dcn_sharpness_range.hdr_rgb_min = 0;
+       dc->config.dcn_sharpness_range.hdr_rgb_max = 2750;
+       dc->config.dcn_sharpness_range.hdr_rgb_mid = 1500;
+
+       dc->config.dcn_override_sharpness_range.sdr_rgb_min = 0;
+       dc->config.dcn_override_sharpness_range.sdr_rgb_max = 3250;
+       dc->config.dcn_override_sharpness_range.sdr_rgb_mid = 1250;
+       dc->config.dcn_override_sharpness_range.sdr_yuv_min = 0;
+       dc->config.dcn_override_sharpness_range.sdr_yuv_max = 3500;
+       dc->config.dcn_override_sharpness_range.sdr_yuv_mid = 1500;
+       dc->config.dcn_override_sharpness_range.hdr_rgb_min = 0;
+       dc->config.dcn_override_sharpness_range.hdr_rgb_max = 2750;
+       dc->config.dcn_override_sharpness_range.hdr_rgb_mid = 1500;
+
        dc->config.dc_mode_clk_limit_support = true;
        dc->config.enable_windowed_mpo_odm = true;
        dc->config.set_pipe_unlock_order = true; /* Need to ensure DET gets freed before allocating */