From: Samson Tam <[email protected]>

[Why & How]
Add new option override_easf to use in_taps instead of internal
 taps policy for debugging

Reviewed-by: Alvin Lee <[email protected]>
Signed-off-by: Samson Tam <[email protected]>
Signed-off-by: Aurabindo Pillai <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/dc_spl_translate.c |  2 ++
 drivers/gpu/drm/amd/display/dc/sspl/dc_spl.c      | 15 +++++++++++++++
 .../gpu/drm/amd/display/dc/sspl/dc_spl_types.h    |  1 +
 3 files changed, 18 insertions(+)

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 55704d4457ef..37d1a79e8241 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_spl_translate.c
+++ b/drivers/gpu/drm/amd/display/dc/dc_spl_translate.c
@@ -147,6 +147,8 @@ void translate_SPL_in_params_from_pipe_ctx(struct pipe_ctx 
*pipe_ctx, struct spl
                spl_in->prefer_easf = false;
        else if (pipe_ctx->stream->ctx->dc->debug.force_easf == 2)
                spl_in->disable_easf = true;
+       else if (pipe_ctx->stream->ctx->dc->debug.force_easf == 3)
+               spl_in->override_easf = true;
        /* Translate adaptive sharpening preference */
        unsigned int sharpness_setting = 
pipe_ctx->stream->ctx->dc->debug.force_sharpness;
        unsigned int force_sharpness_level = 
pipe_ctx->stream->ctx->dc->debug.force_sharpness_level;
diff --git a/drivers/gpu/drm/amd/display/dc/sspl/dc_spl.c 
b/drivers/gpu/drm/amd/display/dc/sspl/dc_spl.c
index b1fb0f8a253a..7a839984dbc0 100644
--- a/drivers/gpu/drm/amd/display/dc/sspl/dc_spl.c
+++ b/drivers/gpu/drm/amd/display/dc/sspl/dc_spl.c
@@ -1018,6 +1018,21 @@ static bool spl_get_optimal_number_of_taps(
                        spl_scratch->scl_data.taps.h_taps_c = 6;
                        spl_scratch->scl_data.taps.v_taps_c = 6;
                }
+
+               /* Override mode: keep EASF enabled but use input taps if valid 
*/
+               if (spl_in->override_easf) {
+                       spl_scratch->scl_data.taps.h_taps = (in_taps->h_taps != 
0) ? in_taps->h_taps : spl_scratch->scl_data.taps.h_taps;
+                       spl_scratch->scl_data.taps.v_taps = (in_taps->v_taps != 
0) ? in_taps->v_taps : spl_scratch->scl_data.taps.v_taps;
+                       spl_scratch->scl_data.taps.h_taps_c = 
(in_taps->h_taps_c != 0) ? in_taps->h_taps_c : 
spl_scratch->scl_data.taps.h_taps_c;
+                       spl_scratch->scl_data.taps.v_taps_c = 
(in_taps->v_taps_c != 0) ? in_taps->v_taps_c : 
spl_scratch->scl_data.taps.v_taps_c;
+
+                       if ((spl_scratch->scl_data.taps.h_taps > 6) || 
(spl_scratch->scl_data.taps.v_taps > 6))
+                               skip_easf = true;
+                       if ((spl_scratch->scl_data.taps.h_taps > 1) && 
(spl_scratch->scl_data.taps.h_taps % 2))
+                               spl_scratch->scl_data.taps.h_taps--;
+                       if ((spl_scratch->scl_data.taps.h_taps_c > 1) && 
(spl_scratch->scl_data.taps.h_taps_c % 2))
+                               spl_scratch->scl_data.taps.h_taps_c--;
+               }
        }
 
        /*Ensure we can support the requested number of vtaps*/
diff --git a/drivers/gpu/drm/amd/display/dc/sspl/dc_spl_types.h 
b/drivers/gpu/drm/amd/display/dc/sspl/dc_spl_types.h
index 23d254dea18f..20e4e52a77ac 100644
--- a/drivers/gpu/drm/amd/display/dc/sspl/dc_spl_types.h
+++ b/drivers/gpu/drm/amd/display/dc/sspl/dc_spl_types.h
@@ -545,6 +545,7 @@ struct spl_in       {
        enum linear_light_scaling lls_pref;     //      Linear Light Scaling
        bool prefer_easf;
        bool disable_easf;
+       bool override_easf; /* If true, keep EASF enabled but use provided 
in_taps */
        struct spl_debug debug;
        bool is_fullscreen;
        bool is_hdr_on;
-- 
2.51.0

Reply via email to