drm/amd/display: Add support for 2nd sharpening range

[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>
This commit is contained in:
Samson Tam 2025-05-09 11:19:28 -04:00 committed by Alex Deucher
parent a4d04bc90d
commit dbb767be86
3 changed files with 37 additions and 9 deletions

View 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 {

View 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)

View 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 */