1*b843c749SSergey Zigachev /* Copyright 2012-15 Advanced Micro Devices, Inc. 2*b843c749SSergey Zigachev * 3*b843c749SSergey Zigachev * Permission is hereby granted, free of charge, to any person obtaining a 4*b843c749SSergey Zigachev * copy of this software and associated documentation files (the "Software"), 5*b843c749SSergey Zigachev * to deal in the Software without restriction, including without limitation 6*b843c749SSergey Zigachev * the rights to use, copy, modify, merge, publish, distribute, sublicense, 7*b843c749SSergey Zigachev * and/or sell copies of the Software, and to permit persons to whom the 8*b843c749SSergey Zigachev * Software is furnished to do so, subject to the following conditions: 9*b843c749SSergey Zigachev * 10*b843c749SSergey Zigachev * The above copyright notice and this permission notice shall be included in 11*b843c749SSergey Zigachev * all copies or substantial portions of the Software. 12*b843c749SSergey Zigachev * 13*b843c749SSergey Zigachev * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14*b843c749SSergey Zigachev * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15*b843c749SSergey Zigachev * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 16*b843c749SSergey Zigachev * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 17*b843c749SSergey Zigachev * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 18*b843c749SSergey Zigachev * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 19*b843c749SSergey Zigachev * OTHER DEALINGS IN THE SOFTWARE. 20*b843c749SSergey Zigachev * 21*b843c749SSergey Zigachev * Authors: AMD 22*b843c749SSergey Zigachev * 23*b843c749SSergey Zigachev */ 24*b843c749SSergey Zigachev 25*b843c749SSergey Zigachev #ifndef __DC_OPP_DCN10_H__ 26*b843c749SSergey Zigachev #define __DC_OPP_DCN10_H__ 27*b843c749SSergey Zigachev 28*b843c749SSergey Zigachev #include "opp.h" 29*b843c749SSergey Zigachev 30*b843c749SSergey Zigachev #define TO_DCN10_OPP(opp)\ 31*b843c749SSergey Zigachev container_of(opp, struct dcn10_opp, base) 32*b843c749SSergey Zigachev 33*b843c749SSergey Zigachev #define OPP_SF(reg_name, field_name, post_fix)\ 34*b843c749SSergey Zigachev .field_name = reg_name ## __ ## field_name ## post_fix 35*b843c749SSergey Zigachev 36*b843c749SSergey Zigachev #define OPP_REG_LIST_DCN(id) \ 37*b843c749SSergey Zigachev SRI(FMT_BIT_DEPTH_CONTROL, FMT, id), \ 38*b843c749SSergey Zigachev SRI(FMT_CONTROL, FMT, id), \ 39*b843c749SSergey Zigachev SRI(FMT_DITHER_RAND_R_SEED, FMT, id), \ 40*b843c749SSergey Zigachev SRI(FMT_DITHER_RAND_G_SEED, FMT, id), \ 41*b843c749SSergey Zigachev SRI(FMT_DITHER_RAND_B_SEED, FMT, id), \ 42*b843c749SSergey Zigachev SRI(FMT_CLAMP_CNTL, FMT, id), \ 43*b843c749SSergey Zigachev SRI(FMT_DYNAMIC_EXP_CNTL, FMT, id), \ 44*b843c749SSergey Zigachev SRI(FMT_MAP420_MEMORY_CONTROL, FMT, id), \ 45*b843c749SSergey Zigachev SRI(OPPBUF_CONTROL, OPPBUF, id),\ 46*b843c749SSergey Zigachev SRI(OPPBUF_3D_PARAMETERS_0, OPPBUF, id), \ 47*b843c749SSergey Zigachev SRI(OPPBUF_3D_PARAMETERS_1, OPPBUF, id), \ 48*b843c749SSergey Zigachev SRI(OPP_PIPE_CONTROL, OPP_PIPE, id) 49*b843c749SSergey Zigachev 50*b843c749SSergey Zigachev #define OPP_REG_LIST_DCN10(id) \ 51*b843c749SSergey Zigachev OPP_REG_LIST_DCN(id) 52*b843c749SSergey Zigachev 53*b843c749SSergey Zigachev #define OPP_COMMON_REG_VARIABLE_LIST \ 54*b843c749SSergey Zigachev uint32_t FMT_BIT_DEPTH_CONTROL; \ 55*b843c749SSergey Zigachev uint32_t FMT_CONTROL; \ 56*b843c749SSergey Zigachev uint32_t FMT_DITHER_RAND_R_SEED; \ 57*b843c749SSergey Zigachev uint32_t FMT_DITHER_RAND_G_SEED; \ 58*b843c749SSergey Zigachev uint32_t FMT_DITHER_RAND_B_SEED; \ 59*b843c749SSergey Zigachev uint32_t FMT_CLAMP_CNTL; \ 60*b843c749SSergey Zigachev uint32_t FMT_DYNAMIC_EXP_CNTL; \ 61*b843c749SSergey Zigachev uint32_t FMT_MAP420_MEMORY_CONTROL; \ 62*b843c749SSergey Zigachev uint32_t OPPBUF_CONTROL; \ 63*b843c749SSergey Zigachev uint32_t OPPBUF_CONTROL1; \ 64*b843c749SSergey Zigachev uint32_t OPPBUF_3D_PARAMETERS_0; \ 65*b843c749SSergey Zigachev uint32_t OPPBUF_3D_PARAMETERS_1; \ 66*b843c749SSergey Zigachev uint32_t OPP_PIPE_CONTROL 67*b843c749SSergey Zigachev 68*b843c749SSergey Zigachev #define OPP_MASK_SH_LIST_DCN(mask_sh) \ 69*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_EN, mask_sh), \ 70*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_DEPTH, mask_sh), \ 71*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_MODE, mask_sh), \ 72*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_SPATIAL_DITHER_EN, mask_sh), \ 73*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_SPATIAL_DITHER_MODE, mask_sh), \ 74*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_SPATIAL_DITHER_DEPTH, mask_sh), \ 75*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_TEMPORAL_DITHER_EN, mask_sh), \ 76*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_HIGHPASS_RANDOM_ENABLE, mask_sh), \ 77*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_FRAME_RANDOM_ENABLE, mask_sh), \ 78*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_RGB_RANDOM_ENABLE, mask_sh), \ 79*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_CONTROL, FMT_SPATIAL_DITHER_FRAME_COUNTER_MAX, mask_sh), \ 80*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_CONTROL, FMT_SPATIAL_DITHER_FRAME_COUNTER_BIT_SWAP, mask_sh), \ 81*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_CONTROL, FMT_PIXEL_ENCODING, mask_sh), \ 82*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_CONTROL, FMT_STEREOSYNC_OVERRIDE, mask_sh), \ 83*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_DITHER_RAND_R_SEED, FMT_RAND_R_SEED, mask_sh), \ 84*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_DITHER_RAND_G_SEED, FMT_RAND_G_SEED, mask_sh), \ 85*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_DITHER_RAND_B_SEED, FMT_RAND_B_SEED, mask_sh), \ 86*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_CLAMP_CNTL, FMT_CLAMP_DATA_EN, mask_sh), \ 87*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_CLAMP_CNTL, FMT_CLAMP_COLOR_FORMAT, mask_sh), \ 88*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_DYNAMIC_EXP_CNTL, FMT_DYNAMIC_EXP_EN, mask_sh), \ 89*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_DYNAMIC_EXP_CNTL, FMT_DYNAMIC_EXP_MODE, mask_sh), \ 90*b843c749SSergey Zigachev OPP_SF(FMT0_FMT_MAP420_MEMORY_CONTROL, FMT_MAP420MEM_PWR_FORCE, mask_sh), \ 91*b843c749SSergey Zigachev OPP_SF(OPPBUF0_OPPBUF_CONTROL, OPPBUF_ACTIVE_WIDTH, mask_sh),\ 92*b843c749SSergey Zigachev OPP_SF(OPPBUF0_OPPBUF_CONTROL, OPPBUF_PIXEL_REPETITION, mask_sh),\ 93*b843c749SSergey Zigachev OPP_SF(OPPBUF0_OPPBUF_3D_PARAMETERS_0, OPPBUF_3D_VACT_SPACE1_SIZE, mask_sh), \ 94*b843c749SSergey Zigachev OPP_SF(OPPBUF0_OPPBUF_3D_PARAMETERS_0, OPPBUF_3D_VACT_SPACE2_SIZE, mask_sh), \ 95*b843c749SSergey Zigachev OPP_SF(OPP_PIPE0_OPP_PIPE_CONTROL, OPP_PIPE_CLOCK_EN, mask_sh) 96*b843c749SSergey Zigachev 97*b843c749SSergey Zigachev #define OPP_MASK_SH_LIST_DCN10(mask_sh) \ 98*b843c749SSergey Zigachev OPP_MASK_SH_LIST_DCN(mask_sh), \ 99*b843c749SSergey Zigachev OPP_SF(OPPBUF0_OPPBUF_CONTROL, OPPBUF_DISPLAY_SEGMENTATION, mask_sh),\ 100*b843c749SSergey Zigachev OPP_SF(OPPBUF0_OPPBUF_CONTROL, OPPBUF_OVERLAP_PIXEL_NUM, mask_sh) 101*b843c749SSergey Zigachev 102*b843c749SSergey Zigachev #define OPP_DCN10_REG_FIELD_LIST(type) \ 103*b843c749SSergey Zigachev type FMT_TRUNCATE_EN; \ 104*b843c749SSergey Zigachev type FMT_TRUNCATE_DEPTH; \ 105*b843c749SSergey Zigachev type FMT_TRUNCATE_MODE; \ 106*b843c749SSergey Zigachev type FMT_SPATIAL_DITHER_EN; \ 107*b843c749SSergey Zigachev type FMT_SPATIAL_DITHER_MODE; \ 108*b843c749SSergey Zigachev type FMT_SPATIAL_DITHER_DEPTH; \ 109*b843c749SSergey Zigachev type FMT_TEMPORAL_DITHER_EN; \ 110*b843c749SSergey Zigachev type FMT_HIGHPASS_RANDOM_ENABLE; \ 111*b843c749SSergey Zigachev type FMT_FRAME_RANDOM_ENABLE; \ 112*b843c749SSergey Zigachev type FMT_RGB_RANDOM_ENABLE; \ 113*b843c749SSergey Zigachev type FMT_SPATIAL_DITHER_FRAME_COUNTER_MAX; \ 114*b843c749SSergey Zigachev type FMT_SPATIAL_DITHER_FRAME_COUNTER_BIT_SWAP; \ 115*b843c749SSergey Zigachev type FMT_RAND_R_SEED; \ 116*b843c749SSergey Zigachev type FMT_RAND_G_SEED; \ 117*b843c749SSergey Zigachev type FMT_RAND_B_SEED; \ 118*b843c749SSergey Zigachev type FMT_PIXEL_ENCODING; \ 119*b843c749SSergey Zigachev type FMT_CLAMP_DATA_EN; \ 120*b843c749SSergey Zigachev type FMT_CLAMP_COLOR_FORMAT; \ 121*b843c749SSergey Zigachev type FMT_DYNAMIC_EXP_EN; \ 122*b843c749SSergey Zigachev type FMT_DYNAMIC_EXP_MODE; \ 123*b843c749SSergey Zigachev type FMT_MAP420MEM_PWR_FORCE; \ 124*b843c749SSergey Zigachev type FMT_STEREOSYNC_OVERRIDE; \ 125*b843c749SSergey Zigachev type OPPBUF_ACTIVE_WIDTH;\ 126*b843c749SSergey Zigachev type OPPBUF_PIXEL_REPETITION;\ 127*b843c749SSergey Zigachev type OPPBUF_DISPLAY_SEGMENTATION;\ 128*b843c749SSergey Zigachev type OPPBUF_OVERLAP_PIXEL_NUM;\ 129*b843c749SSergey Zigachev type OPPBUF_NUM_SEGMENT_PADDED_PIXELS; \ 130*b843c749SSergey Zigachev type OPPBUF_3D_VACT_SPACE1_SIZE; \ 131*b843c749SSergey Zigachev type OPPBUF_3D_VACT_SPACE2_SIZE; \ 132*b843c749SSergey Zigachev type OPP_PIPE_CLOCK_EN 133*b843c749SSergey Zigachev 134*b843c749SSergey Zigachev struct dcn10_opp_registers { 135*b843c749SSergey Zigachev OPP_COMMON_REG_VARIABLE_LIST; 136*b843c749SSergey Zigachev }; 137*b843c749SSergey Zigachev 138*b843c749SSergey Zigachev struct dcn10_opp_shift { 139*b843c749SSergey Zigachev OPP_DCN10_REG_FIELD_LIST(uint8_t); 140*b843c749SSergey Zigachev }; 141*b843c749SSergey Zigachev 142*b843c749SSergey Zigachev struct dcn10_opp_mask { 143*b843c749SSergey Zigachev OPP_DCN10_REG_FIELD_LIST(uint32_t); 144*b843c749SSergey Zigachev }; 145*b843c749SSergey Zigachev 146*b843c749SSergey Zigachev struct dcn10_opp { 147*b843c749SSergey Zigachev struct output_pixel_processor base; 148*b843c749SSergey Zigachev 149*b843c749SSergey Zigachev const struct dcn10_opp_registers *regs; 150*b843c749SSergey Zigachev const struct dcn10_opp_shift *opp_shift; 151*b843c749SSergey Zigachev const struct dcn10_opp_mask *opp_mask; 152*b843c749SSergey Zigachev 153*b843c749SSergey Zigachev bool is_write_to_ram_a_safe; 154*b843c749SSergey Zigachev }; 155*b843c749SSergey Zigachev 156*b843c749SSergey Zigachev void dcn10_opp_construct(struct dcn10_opp *oppn10, 157*b843c749SSergey Zigachev struct dc_context *ctx, 158*b843c749SSergey Zigachev uint32_t inst, 159*b843c749SSergey Zigachev const struct dcn10_opp_registers *regs, 160*b843c749SSergey Zigachev const struct dcn10_opp_shift *opp_shift, 161*b843c749SSergey Zigachev const struct dcn10_opp_mask *opp_mask); 162*b843c749SSergey Zigachev 163*b843c749SSergey Zigachev void opp1_set_dyn_expansion( 164*b843c749SSergey Zigachev struct output_pixel_processor *opp, 165*b843c749SSergey Zigachev enum dc_color_space color_sp, 166*b843c749SSergey Zigachev enum dc_color_depth color_dpth, 167*b843c749SSergey Zigachev enum signal_type signal); 168*b843c749SSergey Zigachev 169*b843c749SSergey Zigachev void opp1_program_fmt( 170*b843c749SSergey Zigachev struct output_pixel_processor *opp, 171*b843c749SSergey Zigachev struct bit_depth_reduction_params *fmt_bit_depth, 172*b843c749SSergey Zigachev struct clamping_and_pixel_encoding_params *clamping); 173*b843c749SSergey Zigachev 174*b843c749SSergey Zigachev void opp1_program_bit_depth_reduction( 175*b843c749SSergey Zigachev struct output_pixel_processor *opp, 176*b843c749SSergey Zigachev const struct bit_depth_reduction_params *params); 177*b843c749SSergey Zigachev 178*b843c749SSergey Zigachev void opp1_program_stereo( 179*b843c749SSergey Zigachev struct output_pixel_processor *opp, 180*b843c749SSergey Zigachev bool enable, 181*b843c749SSergey Zigachev const struct dc_crtc_timing *timing); 182*b843c749SSergey Zigachev 183*b843c749SSergey Zigachev void opp1_pipe_clock_control(struct output_pixel_processor *opp, bool enable); 184*b843c749SSergey Zigachev 185*b843c749SSergey Zigachev void opp1_destroy(struct output_pixel_processor **opp); 186*b843c749SSergey Zigachev 187*b843c749SSergey Zigachev #endif 188