@@ -949,6 +949,9 @@ static void dpp401_dscl_set_isharp_filter(
949
949
{
950
950
int level ;
951
951
uint32_t filter_data ;
952
+ if (filter == NULL )
953
+ return ;
954
+
952
955
REG_UPDATE (ISHARP_DELTA_CTRL ,
953
956
ISHARP_DELTA_LUT_HOST_SELECT , 0 );
954
957
for (level = 0 ; level < NUM_LEVELS ; level ++ ) {
@@ -972,41 +975,121 @@ static void dpp401_dscl_program_isharp(struct dpp *dpp_base,
972
975
const struct scaler_data * scl_data )
973
976
{
974
977
struct dcn401_dpp * dpp = TO_DCN401_DPP (dpp_base );
975
- const struct dscl_prog_data * data ;
976
-
977
- if (memcmp (& dpp -> scl_data , scl_data , sizeof (* scl_data )) == 0 )
978
- return ;
979
978
980
979
PERF_TRACE ();
981
- dpp -> scl_data = * scl_data ;
982
- data = & scl_data -> dscl_prog_data ;
983
-
984
- REG_SET (ISHARP_MODE , 0 , ISHARP_EN , data -> isharp_en );
985
-
986
- REG_SET (ISHARP_MODE , 0 , ISHARP_NOISEDET_EN , data -> isharp_noise_det .enable );
987
- REG_SET (ISHARP_MODE , 0 , ISHARP_NOISEDET_MODE , data -> isharp_noise_det .mode );
988
- REG_SET (ISHARP_NOISEDET_THRESHOLD , 0 , ISHARP_NOISEDET_UTHRE , data -> isharp_noise_det .uthreshold );
989
- REG_SET (ISHARP_NOISEDET_THRESHOLD , 0 , ISHARP_NOISEDET_DTHRE , data -> isharp_noise_det .dthreshold );
990
- REG_SET (ISHARP_MODE , 0 , ISHARP_NOISEDET_MODE , data -> isharp_noise_det .mode );
991
- REG_SET (ISHARP_NOISEDET_THRESHOLD , 0 , ISHARP_NOISEDET_UTHRE , data -> isharp_noise_det .uthreshold );
992
- REG_SET (ISHARP_NOISEDET_THRESHOLD , 0 , ISHARP_NOISEDET_DTHRE , data -> isharp_noise_det .dthreshold );
993
- REG_SET (ISHARP_NOISE_GAIN_PWL , 0 , ISHARP_NOISEDET_PWL_START_IN , data -> isharp_noise_det .pwl_start_in );
994
- REG_SET (ISHARP_NOISE_GAIN_PWL , 0 , ISHARP_NOISEDET_PWL_END_IN , data -> isharp_noise_det .pwl_end_in );
995
- REG_SET (ISHARP_NOISE_GAIN_PWL , 0 , ISHARP_NOISEDET_PWL_SLOPE , data -> isharp_noise_det .pwl_slope );
996
-
997
- REG_SET (ISHARP_MODE , 0 , ISHARP_LBA_MODE , data -> isharp_lba .mode );
998
- // TODO: ISHARP_LBA: IN_SEG, BASE_SEG, SLOPE_SEG
999
- REG_SET (ISHARP_MODE , 0 , ISHARP_FMT_MODE , data -> isharp_fmt .mode );
1000
- REG_SET (ISHARP_MODE , 0 , ISHARP_FMT_NORM , data -> isharp_fmt .norm );
1001
-
1002
- dpp401_dscl_set_isharp_filter (dpp , data -> isharp_delta );
1003
-
1004
- REG_SET (ISHARP_NLDELTA_SOFT_CLIP , 0 , ISHARP_NLDELTA_SCLIP_EN_P , data -> isharp_nldelta_sclip .enable_p );
1005
- REG_SET (ISHARP_NLDELTA_SOFT_CLIP , 0 , ISHARP_NLDELTA_SCLIP_PIVOT_P , data -> isharp_nldelta_sclip .pivot_p );
1006
- REG_SET (ISHARP_NLDELTA_SOFT_CLIP , 0 , ISHARP_NLDELTA_SCLIP_SLOPE_P , data -> isharp_nldelta_sclip .slope_p );
1007
- REG_SET (ISHARP_NLDELTA_SOFT_CLIP , 0 , ISHARP_NLDELTA_SCLIP_EN_N , data -> isharp_nldelta_sclip .enable_n );
1008
- REG_SET (ISHARP_NLDELTA_SOFT_CLIP , 0 , ISHARP_NLDELTA_SCLIP_PIVOT_N , data -> isharp_nldelta_sclip .pivot_n );
1009
- REG_SET (ISHARP_NLDELTA_SOFT_CLIP , 0 , ISHARP_NLDELTA_SCLIP_SLOPE_N , data -> isharp_nldelta_sclip .slope_n );
980
+ /* ISHARP_EN */
981
+ REG_UPDATE (ISHARP_MODE ,
982
+ ISHARP_EN , scl_data -> dscl_prog_data .isharp_en );
983
+ /* ISHARP_NOISEDET_EN */
984
+ REG_UPDATE (ISHARP_MODE ,
985
+ ISHARP_NOISEDET_EN , scl_data -> dscl_prog_data .isharp_noise_det .enable );
986
+ /* ISHARP_NOISEDET_MODE */
987
+ REG_UPDATE (ISHARP_MODE ,
988
+ ISHARP_NOISEDET_MODE , scl_data -> dscl_prog_data .isharp_noise_det .mode );
989
+ /* ISHARP_NOISEDET_UTHRE */
990
+ REG_UPDATE (ISHARP_NOISEDET_THRESHOLD ,
991
+ ISHARP_NOISEDET_UTHRE , scl_data -> dscl_prog_data .isharp_noise_det .uthreshold );
992
+ /* ISHARP_NOISEDET_DTHRE */
993
+ REG_UPDATE (ISHARP_NOISEDET_THRESHOLD ,
994
+ ISHARP_NOISEDET_DTHRE , scl_data -> dscl_prog_data .isharp_noise_det .dthreshold );
995
+ REG_UPDATE (ISHARP_MODE ,
996
+ ISHARP_NOISEDET_MODE , scl_data -> dscl_prog_data .isharp_noise_det .mode );
997
+ /* ISHARP_NOISEDET_UTHRE */
998
+ REG_UPDATE (ISHARP_NOISEDET_THRESHOLD ,
999
+ ISHARP_NOISEDET_UTHRE , scl_data -> dscl_prog_data .isharp_noise_det .uthreshold );
1000
+ /* ISHARP_NOISEDET_DTHRE */
1001
+ REG_UPDATE (ISHARP_NOISEDET_THRESHOLD ,
1002
+ ISHARP_NOISEDET_DTHRE , scl_data -> dscl_prog_data .isharp_noise_det .dthreshold );
1003
+ /* ISHARP_NOISEDET_PWL_START_IN */
1004
+ REG_UPDATE (ISHARP_NOISE_GAIN_PWL ,
1005
+ ISHARP_NOISEDET_PWL_START_IN , scl_data -> dscl_prog_data .isharp_noise_det .pwl_start_in );
1006
+ /* ISHARP_NOISEDET_PWL_END_IN */
1007
+ REG_UPDATE (ISHARP_NOISE_GAIN_PWL ,
1008
+ ISHARP_NOISEDET_PWL_END_IN , scl_data -> dscl_prog_data .isharp_noise_det .pwl_end_in );
1009
+ /* ISHARP_NOISEDET_PWL_SLOPE */
1010
+ REG_UPDATE (ISHARP_NOISE_GAIN_PWL ,
1011
+ ISHARP_NOISEDET_PWL_SLOPE , scl_data -> dscl_prog_data .isharp_noise_det .pwl_slope );
1012
+ /* ISHARP_LBA_MODE */
1013
+ REG_UPDATE (ISHARP_MODE ,
1014
+ ISHARP_LBA_MODE , scl_data -> dscl_prog_data .isharp_lba .mode );
1015
+ /* ISHARP_LBA: IN_SEG, BASE_SEG, SLOPE_SEG */
1016
+ REG_UPDATE (ISHARP_LBA_PWL_SEG0 ,
1017
+ ISHARP_LBA_PWL_IN_SEG0 , scl_data -> dscl_prog_data .isharp_lba .in_seg [0 ]);
1018
+ REG_UPDATE (ISHARP_LBA_PWL_SEG0 ,
1019
+ ISHARP_LBA_PWL_BASE_SEG0 , scl_data -> dscl_prog_data .isharp_lba .base_seg [0 ]);
1020
+ REG_UPDATE (ISHARP_LBA_PWL_SEG0 ,
1021
+ ISHARP_LBA_PWL_SLOPE_SEG0 , scl_data -> dscl_prog_data .isharp_lba .slope_seg [0 ]);
1022
+ REG_UPDATE (ISHARP_LBA_PWL_SEG1 ,
1023
+ ISHARP_LBA_PWL_IN_SEG1 , scl_data -> dscl_prog_data .isharp_lba .in_seg [1 ]);
1024
+ REG_UPDATE (ISHARP_LBA_PWL_SEG1 ,
1025
+ ISHARP_LBA_PWL_BASE_SEG1 , scl_data -> dscl_prog_data .isharp_lba .base_seg [1 ]);
1026
+ REG_UPDATE (ISHARP_LBA_PWL_SEG1 ,
1027
+ ISHARP_LBA_PWL_SLOPE_SEG1 , scl_data -> dscl_prog_data .isharp_lba .slope_seg [1 ]);
1028
+ REG_UPDATE (ISHARP_LBA_PWL_SEG2 ,
1029
+ ISHARP_LBA_PWL_IN_SEG2 , scl_data -> dscl_prog_data .isharp_lba .in_seg [2 ]);
1030
+ REG_UPDATE (ISHARP_LBA_PWL_SEG2 ,
1031
+ ISHARP_LBA_PWL_BASE_SEG2 , scl_data -> dscl_prog_data .isharp_lba .base_seg [2 ]);
1032
+ REG_UPDATE (ISHARP_LBA_PWL_SEG2 ,
1033
+ ISHARP_LBA_PWL_SLOPE_SEG2 , scl_data -> dscl_prog_data .isharp_lba .slope_seg [2 ]);
1034
+ REG_UPDATE (ISHARP_LBA_PWL_SEG3 ,
1035
+ ISHARP_LBA_PWL_IN_SEG3 , scl_data -> dscl_prog_data .isharp_lba .in_seg [3 ]);
1036
+ REG_UPDATE (ISHARP_LBA_PWL_SEG3 ,
1037
+ ISHARP_LBA_PWL_BASE_SEG3 , scl_data -> dscl_prog_data .isharp_lba .base_seg [3 ]);
1038
+ REG_UPDATE (ISHARP_LBA_PWL_SEG3 ,
1039
+ ISHARP_LBA_PWL_SLOPE_SEG3 , scl_data -> dscl_prog_data .isharp_lba .slope_seg [3 ]);
1040
+ REG_UPDATE (ISHARP_LBA_PWL_SEG4 ,
1041
+ ISHARP_LBA_PWL_IN_SEG4 , scl_data -> dscl_prog_data .isharp_lba .in_seg [4 ]);
1042
+ REG_UPDATE (ISHARP_LBA_PWL_SEG4 ,
1043
+ ISHARP_LBA_PWL_BASE_SEG4 , scl_data -> dscl_prog_data .isharp_lba .base_seg [4 ]);
1044
+ REG_UPDATE (ISHARP_LBA_PWL_SEG4 ,
1045
+ ISHARP_LBA_PWL_SLOPE_SEG4 , scl_data -> dscl_prog_data .isharp_lba .slope_seg [4 ]);
1046
+ REG_UPDATE (ISHARP_LBA_PWL_SEG5 ,
1047
+ ISHARP_LBA_PWL_IN_SEG5 , scl_data -> dscl_prog_data .isharp_lba .in_seg [5 ]);
1048
+ REG_UPDATE (ISHARP_LBA_PWL_SEG5 ,
1049
+ ISHARP_LBA_PWL_BASE_SEG5 , scl_data -> dscl_prog_data .isharp_lba .base_seg [5 ]);
1050
+
1051
+ /* ISHARP_FMT_MODE */
1052
+ REG_UPDATE (ISHARP_MODE ,
1053
+ ISHARP_FMT_MODE , scl_data -> dscl_prog_data .isharp_fmt .mode );
1054
+ /* ISHARP_FMT_NORM */
1055
+ REG_UPDATE (ISHARP_MODE ,
1056
+ ISHARP_FMT_NORM , scl_data -> dscl_prog_data .isharp_fmt .norm );
1057
+ /* ISHARP_DELTA_LUT */
1058
+ dpp401_dscl_set_isharp_filter (dpp , scl_data -> dscl_prog_data .isharp_delta );
1059
+ /* ISHARP_NLDELTA_SCLIP_EN_P */
1060
+ REG_UPDATE (ISHARP_NLDELTA_SOFT_CLIP ,
1061
+ ISHARP_NLDELTA_SCLIP_EN_P , scl_data -> dscl_prog_data .isharp_nldelta_sclip .enable_p );
1062
+ /* ISHARP_NLDELTA_SCLIP_PIVOT_P */
1063
+ REG_UPDATE (ISHARP_NLDELTA_SOFT_CLIP ,
1064
+ ISHARP_NLDELTA_SCLIP_PIVOT_P , scl_data -> dscl_prog_data .isharp_nldelta_sclip .pivot_p );
1065
+ /* ISHARP_NLDELTA_SCLIP_SLOPE_P */
1066
+ REG_UPDATE (ISHARP_NLDELTA_SOFT_CLIP ,
1067
+ ISHARP_NLDELTA_SCLIP_SLOPE_P , scl_data -> dscl_prog_data .isharp_nldelta_sclip .slope_p );
1068
+ /* ISHARP_NLDELTA_SCLIP_EN_N */
1069
+ REG_UPDATE (ISHARP_NLDELTA_SOFT_CLIP ,
1070
+ ISHARP_NLDELTA_SCLIP_EN_N , scl_data -> dscl_prog_data .isharp_nldelta_sclip .enable_n );
1071
+ /* ISHARP_NLDELTA_SCLIP_PIVOT_N */
1072
+ REG_UPDATE (ISHARP_NLDELTA_SOFT_CLIP ,
1073
+ ISHARP_NLDELTA_SCLIP_PIVOT_N , scl_data -> dscl_prog_data .isharp_nldelta_sclip .pivot_n );
1074
+ /* ISHARP_NLDELTA_SCLIP_SLOPE_N */
1075
+ REG_UPDATE (ISHARP_NLDELTA_SOFT_CLIP ,
1076
+ ISHARP_NLDELTA_SCLIP_SLOPE_N , scl_data -> dscl_prog_data .isharp_nldelta_sclip .slope_n );
1077
+
1078
+ /* Blur and Scale Coefficients - SCL_COEF_RAM_TAP_SELECT */
1079
+ if (scl_data -> dscl_prog_data .isharp_en ) {
1080
+ if (scl_data -> dscl_prog_data .filter_blur_scale_v ) {
1081
+ dpp401_dscl_set_scaler_filter (
1082
+ dpp , scl_data -> taps .v_taps ,
1083
+ SCL_COEF_VERTICAL_BLUR_SCALE ,
1084
+ scl_data -> dscl_prog_data .filter_blur_scale_v );
1085
+ }
1086
+ if (scl_data -> dscl_prog_data .filter_blur_scale_h ) {
1087
+ dpp401_dscl_set_scaler_filter (
1088
+ dpp , scl_data -> taps .h_taps ,
1089
+ SCL_COEF_HORIZONTAL_BLUR_SCALE ,
1090
+ scl_data -> dscl_prog_data .filter_blur_scale_h );
1091
+ }
1092
+ }
1010
1093
PERF_TRACE ();
1011
1094
} // dpp401_dscl_program_isharp
1012
1095
/**
0 commit comments