From: Samson Tam <samson....@amd.com>

[Why & How]
Add support for 2nd sharpening range for cases where we want
override existing DCN sharpening range

Reviewed-by: Ilya Bakoulin <ilya.bakou...@amd.com>
Signed-off-by: Samson Tam <samson....@amd.com>
Signed-off-by: Wayne Lin <wayne....@amd.com>
---
 drivers/gpu/drm/amd/display/dc/dc.h           |  6 ++++++
 .../gpu/drm/amd/display/dc/dc_spl_translate.c | 19 +++++++++--------
 .../dc/resource/dcn401/dcn401_resource.c      | 21 +++++++++++++++++++
 3 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
b/drivers/gpu/drm/amd/display/dc/dc.h
index a63f7fe277fa..6b0471f635f2 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -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 {
diff --git a/drivers/gpu/drm/amd/display/dc/dc_spl_translate.c 
b/drivers/gpu/drm/amd/display/dc/dc_spl_translate.c
index e3a8283b4098..7f57661433eb 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_spl_translate.c
+++ b/drivers/gpu/drm/amd/display/dc/dc_spl_translate.c
@@ -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)
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c 
b/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c
index f420c4dafa03..fbb6db1baaad 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c
@@ -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 */
-- 
2.43.0

Reply via email to