@@ -957,6 +957,7 @@ static void dpp401_dscl_set_isharp_filter(
957957 */
958958static void dpp401_dscl_program_isharp (struct dpp * dpp_base ,
959959 const struct scaler_data * scl_data ,
960+ bool program_isharp_1dlut ,
960961 bool * bs_coeffs_updated )
961962{
962963 struct dcn401_dpp * dpp = TO_DCN401_DPP (dpp_base );
@@ -1015,7 +1016,8 @@ static void dpp401_dscl_program_isharp(struct dpp *dpp_base,
10151016 ISHARP_LBA_PWL_BASE_SEG5 , scl_data -> dscl_prog_data .isharp_lba .base_seg [5 ]);
10161017
10171018 /* ISHARP_DELTA_LUT */
1018- dpp401_dscl_set_isharp_filter (dpp , scl_data -> dscl_prog_data .isharp_delta );
1019+ if (!program_isharp_1dlut )
1020+ dpp401_dscl_set_isharp_filter (dpp , scl_data -> dscl_prog_data .isharp_delta );
10191021
10201022 /* ISHARP_NLDELTA_SOFT_CLIP */
10211023 REG_SET_6 (ISHARP_NLDELTA_SOFT_CLIP , 0 ,
@@ -1071,13 +1073,29 @@ void dpp401_dscl_set_scaler_manual_scale(struct dpp *dpp_base,
10711073 dpp_base , scl_data , dpp_base -> ctx -> dc -> debug .always_scale );
10721074 bool ycbcr = scl_data -> format >= PIXEL_FORMAT_VIDEO_BEGIN
10731075 && scl_data -> format <= PIXEL_FORMAT_VIDEO_END ;
1076+ bool program_isharp_1dlut = false;
10741077 bool bs_coeffs_updated = false;
10751078
1079+
10761080 if (memcmp (& dpp -> scl_data , scl_data , sizeof (* scl_data )) == 0 )
10771081 return ;
10781082
10791083 PERF_TRACE ();
10801084
1085+ /* If only sharpness has changed, then only update 1dlut, then return */
1086+ if (scl_data -> dscl_prog_data .isharp_en &&
1087+ (dpp -> scl_data .dscl_prog_data .sharpness_level
1088+ != scl_data -> dscl_prog_data .sharpness_level )) {
1089+ /* ISHARP_DELTA_LUT */
1090+ dpp401_dscl_set_isharp_filter (dpp , scl_data -> dscl_prog_data .isharp_delta );
1091+ dpp -> scl_data .dscl_prog_data .sharpness_level = scl_data -> dscl_prog_data .sharpness_level ;
1092+ dpp -> scl_data .dscl_prog_data .isharp_delta = scl_data -> dscl_prog_data .isharp_delta ;
1093+
1094+ if (memcmp (& dpp -> scl_data , scl_data , sizeof (* scl_data )) == 0 )
1095+ return ;
1096+ program_isharp_1dlut = true;
1097+ }
1098+
10811099 dpp -> scl_data = * scl_data ;
10821100
10831101 if ((dpp -> base .ctx -> dc -> config .use_spl ) && (!dpp -> base .ctx -> dc -> debug .disable_spl )) {
@@ -1131,7 +1149,7 @@ void dpp401_dscl_set_scaler_manual_scale(struct dpp *dpp_base,
11311149 if (dscl_mode == DSCL_MODE_SCALING_444_BYPASS ) {
11321150 if (dpp -> base .ctx -> dc -> config .prefer_easf )
11331151 dpp401_dscl_disable_easf (dpp_base , scl_data );
1134- dpp401_dscl_program_isharp (dpp_base , scl_data , & bs_coeffs_updated );
1152+ dpp401_dscl_program_isharp (dpp_base , scl_data , program_isharp_1dlut , & bs_coeffs_updated );
11351153 return ;
11361154 }
11371155
@@ -1165,7 +1183,7 @@ void dpp401_dscl_set_scaler_manual_scale(struct dpp *dpp_base,
11651183 * WB scaler coeffs and toggle coeff RAM together
11661184 */
11671185 //if (dpp->base.ctx->dc->config.prefer_easf)
1168- dpp401_dscl_program_isharp (dpp_base , scl_data , & bs_coeffs_updated );
1186+ dpp401_dscl_program_isharp (dpp_base , scl_data , program_isharp_1dlut , & bs_coeffs_updated );
11691187
11701188 dpp401_dscl_set_scl_filter (dpp , scl_data , ycbcr , bs_coeffs_updated );
11711189 /* Edge adaptive scaler function configuration */
0 commit comments