]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Add debug option to override EASF scaler taps
authorSamson Tam <Samson.Tam@amd.com>
Thu, 25 Sep 2025 19:01:23 +0000 (15:01 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 20 Oct 2025 22:19:27 +0000 (18:19 -0400)
[Why & How]
Add new option override_easf to use in_taps instead of internal
 taps policy for debugging

Reviewed-by: Alvin Lee <alvin.lee2@amd.com>
Signed-off-by: Samson Tam <Samson.Tam@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dc_spl_translate.c
drivers/gpu/drm/amd/display/dc/sspl/dc_spl.c
drivers/gpu/drm/amd/display/dc/sspl/dc_spl_types.h

index 55704d4457ef145b572aac7cbcc292e0d4045c4e..37d1a79e8241e0c5e9ca3bfc6764a46dd0d799b5 100644 (file)
@@ -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;
index b1fb0f8a253a5f2750c83454b0f00c94379d9f1f..7a839984dbc0066d5f3ffd5cc1ae48a2bf77e598 100644 (file)
@@ -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*/
index 23d254dea18f2410b4259088233f33140126dd21..20e4e52a77ac706287119e6fea2b5cf9a40e01fe 100644 (file)
@@ -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;