Home | History | Annotate | Line # | Download | only in dcn20
      1 /*	$NetBSD: dcn20_dsc.h,v 1.2 2021/12/18 23:45:03 riastradh Exp $	*/
      2 
      3 /* Copyright 2017 Advanced Micro Devices, Inc.
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a
      6  * copy of this software and associated documentation files (the "Software"),
      7  * to deal in the Software without restriction, including without limitation
      8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      9  * and/or sell copies of the Software, and to permit persons to whom the
     10  * Software is furnished to do so, subject to the following conditions:
     11  *
     12  * The above copyright notice and this permission notice shall be included in
     13  * all copies or substantial portions of the Software.
     14  *
     15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     18  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
     19  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     20  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     21  * OTHER DEALINGS IN THE SOFTWARE.
     22  *
     23  * Authors: AMD
     24  *
     25  */
     26 #ifndef __DCN20_DSC_H__
     27 #define __DCN20_DSC_H__
     28 
     29 #include "dsc.h"
     30 #include "dsc/dscc_types.h"
     31 #include <drm/drm_dsc.h>
     32 
     33 #define TO_DCN20_DSC(dsc)\
     34 	container_of(dsc, struct dcn20_dsc, base)
     35 
     36 #define DSC_REG_LIST_DCN20(id) \
     37 	SRI(DSC_TOP_CONTROL, DSC_TOP, id),\
     38 	SRI(DSC_DEBUG_CONTROL, DSC_TOP, id),\
     39 	SRI(DSCC_CONFIG0, DSCC, id),\
     40 	SRI(DSCC_CONFIG1, DSCC, id),\
     41 	SRI(DSCC_STATUS, DSCC, id),\
     42 	SRI(DSCC_INTERRUPT_CONTROL_STATUS, DSCC, id),\
     43 	SRI(DSCC_PPS_CONFIG0, DSCC, id),\
     44 	SRI(DSCC_PPS_CONFIG1, DSCC, id),\
     45 	SRI(DSCC_PPS_CONFIG2, DSCC, id),\
     46 	SRI(DSCC_PPS_CONFIG3, DSCC, id),\
     47 	SRI(DSCC_PPS_CONFIG4, DSCC, id),\
     48 	SRI(DSCC_PPS_CONFIG5, DSCC, id),\
     49 	SRI(DSCC_PPS_CONFIG6, DSCC, id),\
     50 	SRI(DSCC_PPS_CONFIG7, DSCC, id),\
     51 	SRI(DSCC_PPS_CONFIG8, DSCC, id),\
     52 	SRI(DSCC_PPS_CONFIG9, DSCC, id),\
     53 	SRI(DSCC_PPS_CONFIG10, DSCC, id),\
     54 	SRI(DSCC_PPS_CONFIG11, DSCC, id),\
     55 	SRI(DSCC_PPS_CONFIG12, DSCC, id),\
     56 	SRI(DSCC_PPS_CONFIG13, DSCC, id),\
     57 	SRI(DSCC_PPS_CONFIG14, DSCC, id),\
     58 	SRI(DSCC_PPS_CONFIG15, DSCC, id),\
     59 	SRI(DSCC_PPS_CONFIG16, DSCC, id),\
     60 	SRI(DSCC_PPS_CONFIG17, DSCC, id),\
     61 	SRI(DSCC_PPS_CONFIG18, DSCC, id),\
     62 	SRI(DSCC_PPS_CONFIG19, DSCC, id),\
     63 	SRI(DSCC_PPS_CONFIG20, DSCC, id),\
     64 	SRI(DSCC_PPS_CONFIG21, DSCC, id),\
     65 	SRI(DSCC_PPS_CONFIG22, DSCC, id),\
     66 	SRI(DSCC_MEM_POWER_CONTROL, DSCC, id),\
     67 	SRI(DSCC_R_Y_SQUARED_ERROR_LOWER, DSCC, id),\
     68 	SRI(DSCC_R_Y_SQUARED_ERROR_UPPER, DSCC, id),\
     69 	SRI(DSCC_G_CB_SQUARED_ERROR_LOWER, DSCC, id),\
     70 	SRI(DSCC_G_CB_SQUARED_ERROR_UPPER, DSCC, id),\
     71 	SRI(DSCC_B_CR_SQUARED_ERROR_LOWER, DSCC, id),\
     72 	SRI(DSCC_B_CR_SQUARED_ERROR_UPPER, DSCC, id),\
     73 	SRI(DSCC_MAX_ABS_ERROR0, DSCC, id),\
     74 	SRI(DSCC_MAX_ABS_ERROR1, DSCC, id),\
     75 	SRI(DSCC_RATE_BUFFER0_MAX_FULLNESS_LEVEL, DSCC, id),\
     76 	SRI(DSCC_RATE_BUFFER1_MAX_FULLNESS_LEVEL, DSCC, id),\
     77 	SRI(DSCC_RATE_BUFFER2_MAX_FULLNESS_LEVEL, DSCC, id),\
     78 	SRI(DSCC_RATE_BUFFER3_MAX_FULLNESS_LEVEL, DSCC, id),\
     79 	SRI(DSCC_RATE_CONTROL_BUFFER0_MAX_FULLNESS_LEVEL, DSCC, id),\
     80 	SRI(DSCC_RATE_CONTROL_BUFFER1_MAX_FULLNESS_LEVEL, DSCC, id),\
     81 	SRI(DSCC_RATE_CONTROL_BUFFER2_MAX_FULLNESS_LEVEL, DSCC, id),\
     82 	SRI(DSCC_RATE_CONTROL_BUFFER3_MAX_FULLNESS_LEVEL, DSCC, id),\
     83 	SRI(DSCC_TEST_DEBUG_BUS_ROTATE, DSCC, id),\
     84 	SRI(DSCCIF_CONFIG0, DSCCIF, id),\
     85 	SRI(DSCCIF_CONFIG1, DSCCIF, id),\
     86 	SRI(DSCRM_DSC_FORWARD_CONFIG, DSCRM, id)
     87 
     88 
     89 #define DSC_SF(reg_name, field_name, post_fix)\
     90 	.field_name = reg_name ## __ ## field_name ## post_fix
     91 
     92 //Used in resolving the corner case with duplicate field name
     93 #define DSC2_SF(reg_name, field_name, post_fix)\
     94 	.field_name = reg_name ## _ ## field_name ## post_fix
     95 
     96 #define DSC_REG_LIST_SH_MASK_DCN20(mask_sh)\
     97 	DSC_SF(DSC_TOP0_DSC_TOP_CONTROL, DSC_CLOCK_EN, mask_sh), \
     98 	DSC_SF(DSC_TOP0_DSC_TOP_CONTROL, DSC_DISPCLK_R_GATE_DIS, mask_sh), \
     99 	DSC_SF(DSC_TOP0_DSC_TOP_CONTROL, DSC_DSCCLK_R_GATE_DIS, mask_sh), \
    100 	DSC_SF(DSC_TOP0_DSC_DEBUG_CONTROL, DSC_DBG_EN, mask_sh), \
    101 	DSC_SF(DSC_TOP0_DSC_DEBUG_CONTROL, DSC_TEST_CLOCK_MUX_SEL, mask_sh), \
    102 	DSC_SF(DSCC0_DSCC_CONFIG0, ICH_RESET_AT_END_OF_LINE, mask_sh), \
    103 	DSC_SF(DSCC0_DSCC_CONFIG0, NUMBER_OF_SLICES_PER_LINE, mask_sh), \
    104 	DSC_SF(DSCC0_DSCC_CONFIG0, ALTERNATE_ICH_ENCODING_EN, mask_sh), \
    105 	DSC_SF(DSCC0_DSCC_CONFIG0, NUMBER_OF_SLICES_IN_VERTICAL_DIRECTION, mask_sh), \
    106 	DSC_SF(DSCC0_DSCC_CONFIG1, DSCC_RATE_CONTROL_BUFFER_MODEL_SIZE, mask_sh), \
    107 	/*DSC_SF(DSCC0_DSCC_CONFIG1, DSCC_DISABLE_ICH, mask_sh),*/ \
    108 	DSC_SF(DSCC0_DSCC_STATUS, DSCC_DOUBLE_BUFFER_REG_UPDATE_PENDING, mask_sh), \
    109 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER0_OVERFLOW_OCCURRED, mask_sh), \
    110 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER1_OVERFLOW_OCCURRED, mask_sh), \
    111 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER2_OVERFLOW_OCCURRED, mask_sh), \
    112 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER3_OVERFLOW_OCCURRED, mask_sh), \
    113 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER0_UNDERFLOW_OCCURRED, mask_sh), \
    114 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER1_UNDERFLOW_OCCURRED, mask_sh), \
    115 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER2_UNDERFLOW_OCCURRED, mask_sh), \
    116 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER3_UNDERFLOW_OCCURRED, mask_sh), \
    117 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_CONTROL_BUFFER_MODEL0_OVERFLOW_OCCURRED, mask_sh), \
    118 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_CONTROL_BUFFER_MODEL1_OVERFLOW_OCCURRED, mask_sh), \
    119 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_CONTROL_BUFFER_MODEL2_OVERFLOW_OCCURRED, mask_sh), \
    120 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_CONTROL_BUFFER_MODEL3_OVERFLOW_OCCURRED, mask_sh), \
    121 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER0_OVERFLOW_OCCURRED_INT_EN, mask_sh), \
    122 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER1_OVERFLOW_OCCURRED_INT_EN, mask_sh), \
    123 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER2_OVERFLOW_OCCURRED_INT_EN, mask_sh), \
    124 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER3_OVERFLOW_OCCURRED_INT_EN, mask_sh), \
    125 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER0_UNDERFLOW_OCCURRED_INT_EN, mask_sh), \
    126 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER1_UNDERFLOW_OCCURRED_INT_EN, mask_sh), \
    127 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER2_UNDERFLOW_OCCURRED_INT_EN, mask_sh), \
    128 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_BUFFER3_UNDERFLOW_OCCURRED_INT_EN, mask_sh), \
    129 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_CONTROL_BUFFER_MODEL0_OVERFLOW_OCCURRED_INT_EN, mask_sh), \
    130 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_CONTROL_BUFFER_MODEL1_OVERFLOW_OCCURRED_INT_EN, mask_sh), \
    131 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_CONTROL_BUFFER_MODEL2_OVERFLOW_OCCURRED_INT_EN, mask_sh), \
    132 	DSC_SF(DSCC0_DSCC_INTERRUPT_CONTROL_STATUS, DSCC_RATE_CONTROL_BUFFER_MODEL3_OVERFLOW_OCCURRED_INT_EN, mask_sh), \
    133 	DSC_SF(DSCC0_DSCC_PPS_CONFIG0, DSC_VERSION_MINOR, mask_sh), \
    134 	DSC_SF(DSCC0_DSCC_PPS_CONFIG0, DSC_VERSION_MAJOR, mask_sh), \
    135 	DSC_SF(DSCC0_DSCC_PPS_CONFIG0, PPS_IDENTIFIER, mask_sh), \
    136 	DSC_SF(DSCC0_DSCC_PPS_CONFIG0, LINEBUF_DEPTH, mask_sh), \
    137 	DSC2_SF(DSCC0, DSCC_PPS_CONFIG0__BITS_PER_COMPONENT, mask_sh), \
    138 	DSC_SF(DSCC0_DSCC_PPS_CONFIG1, BITS_PER_PIXEL, mask_sh), \
    139 	DSC_SF(DSCC0_DSCC_PPS_CONFIG1, VBR_ENABLE, mask_sh), \
    140 	DSC_SF(DSCC0_DSCC_PPS_CONFIG1, SIMPLE_422, mask_sh), \
    141 	DSC_SF(DSCC0_DSCC_PPS_CONFIG1, CONVERT_RGB, mask_sh), \
    142 	DSC_SF(DSCC0_DSCC_PPS_CONFIG1, BLOCK_PRED_ENABLE, mask_sh), \
    143 	DSC_SF(DSCC0_DSCC_PPS_CONFIG1, NATIVE_422, mask_sh), \
    144 	DSC_SF(DSCC0_DSCC_PPS_CONFIG1, NATIVE_420, mask_sh), \
    145 	DSC_SF(DSCC0_DSCC_PPS_CONFIG1, CHUNK_SIZE, mask_sh), \
    146 	DSC_SF(DSCC0_DSCC_PPS_CONFIG2, PIC_WIDTH, mask_sh), \
    147 	DSC_SF(DSCC0_DSCC_PPS_CONFIG2, PIC_HEIGHT, mask_sh), \
    148 	DSC_SF(DSCC0_DSCC_PPS_CONFIG3, SLICE_WIDTH, mask_sh), \
    149 	DSC_SF(DSCC0_DSCC_PPS_CONFIG3, SLICE_HEIGHT, mask_sh), \
    150 	DSC_SF(DSCC0_DSCC_PPS_CONFIG4, INITIAL_XMIT_DELAY, mask_sh), \
    151 	DSC_SF(DSCC0_DSCC_PPS_CONFIG4, INITIAL_DEC_DELAY, mask_sh), \
    152 	DSC_SF(DSCC0_DSCC_PPS_CONFIG5, INITIAL_SCALE_VALUE, mask_sh), \
    153 	DSC_SF(DSCC0_DSCC_PPS_CONFIG5, SCALE_INCREMENT_INTERVAL, mask_sh), \
    154 	DSC_SF(DSCC0_DSCC_PPS_CONFIG6, SCALE_DECREMENT_INTERVAL, mask_sh), \
    155 	DSC_SF(DSCC0_DSCC_PPS_CONFIG6, FIRST_LINE_BPG_OFFSET, mask_sh), \
    156 	DSC_SF(DSCC0_DSCC_PPS_CONFIG6, SECOND_LINE_BPG_OFFSET, mask_sh), \
    157 	DSC_SF(DSCC0_DSCC_PPS_CONFIG7, NFL_BPG_OFFSET, mask_sh), \
    158 	DSC_SF(DSCC0_DSCC_PPS_CONFIG7, SLICE_BPG_OFFSET, mask_sh), \
    159 	DSC_SF(DSCC0_DSCC_PPS_CONFIG8, NSL_BPG_OFFSET, mask_sh), \
    160 	DSC_SF(DSCC0_DSCC_PPS_CONFIG8, SECOND_LINE_OFFSET_ADJ, mask_sh), \
    161 	DSC_SF(DSCC0_DSCC_PPS_CONFIG9, INITIAL_OFFSET, mask_sh), \
    162 	DSC_SF(DSCC0_DSCC_PPS_CONFIG9, FINAL_OFFSET, mask_sh), \
    163 	DSC_SF(DSCC0_DSCC_PPS_CONFIG10, FLATNESS_MIN_QP, mask_sh), \
    164 	DSC_SF(DSCC0_DSCC_PPS_CONFIG10, FLATNESS_MAX_QP, mask_sh), \
    165 	DSC_SF(DSCC0_DSCC_PPS_CONFIG10, RC_MODEL_SIZE, mask_sh), \
    166 	DSC_SF(DSCC0_DSCC_PPS_CONFIG11, RC_EDGE_FACTOR, mask_sh), \
    167 	DSC_SF(DSCC0_DSCC_PPS_CONFIG11, RC_QUANT_INCR_LIMIT0, mask_sh), \
    168 	DSC_SF(DSCC0_DSCC_PPS_CONFIG11, RC_QUANT_INCR_LIMIT1, mask_sh), \
    169 	DSC_SF(DSCC0_DSCC_PPS_CONFIG11, RC_TGT_OFFSET_LO, mask_sh), \
    170 	DSC_SF(DSCC0_DSCC_PPS_CONFIG11, RC_TGT_OFFSET_HI, mask_sh), \
    171 	DSC_SF(DSCC0_DSCC_PPS_CONFIG12, RC_BUF_THRESH0, mask_sh), \
    172 	DSC_SF(DSCC0_DSCC_PPS_CONFIG12, RC_BUF_THRESH1, mask_sh), \
    173 	DSC_SF(DSCC0_DSCC_PPS_CONFIG12, RC_BUF_THRESH2, mask_sh), \
    174 	DSC_SF(DSCC0_DSCC_PPS_CONFIG12, RC_BUF_THRESH3, mask_sh), \
    175 	DSC_SF(DSCC0_DSCC_PPS_CONFIG13, RC_BUF_THRESH4, mask_sh), \
    176 	DSC_SF(DSCC0_DSCC_PPS_CONFIG13, RC_BUF_THRESH5, mask_sh), \
    177 	DSC_SF(DSCC0_DSCC_PPS_CONFIG13, RC_BUF_THRESH6, mask_sh), \
    178 	DSC_SF(DSCC0_DSCC_PPS_CONFIG13, RC_BUF_THRESH7, mask_sh), \
    179 	DSC_SF(DSCC0_DSCC_PPS_CONFIG14, RC_BUF_THRESH8, mask_sh), \
    180 	DSC_SF(DSCC0_DSCC_PPS_CONFIG14, RC_BUF_THRESH9, mask_sh), \
    181 	DSC_SF(DSCC0_DSCC_PPS_CONFIG14, RC_BUF_THRESH10, mask_sh), \
    182 	DSC_SF(DSCC0_DSCC_PPS_CONFIG14, RC_BUF_THRESH11, mask_sh), \
    183 	DSC_SF(DSCC0_DSCC_PPS_CONFIG15, RC_BUF_THRESH12, mask_sh), \
    184 	DSC_SF(DSCC0_DSCC_PPS_CONFIG15, RC_BUF_THRESH13, mask_sh), \
    185 	DSC_SF(DSCC0_DSCC_PPS_CONFIG15, RANGE_MIN_QP0, mask_sh), \
    186 	DSC_SF(DSCC0_DSCC_PPS_CONFIG15, RANGE_MAX_QP0, mask_sh), \
    187 	DSC_SF(DSCC0_DSCC_PPS_CONFIG15, RANGE_BPG_OFFSET0, mask_sh), \
    188 	DSC_SF(DSCC0_DSCC_PPS_CONFIG16, RANGE_MIN_QP1, mask_sh), \
    189 	DSC_SF(DSCC0_DSCC_PPS_CONFIG16, RANGE_MAX_QP1, mask_sh), \
    190 	DSC_SF(DSCC0_DSCC_PPS_CONFIG16, RANGE_BPG_OFFSET1, mask_sh), \
    191 	DSC_SF(DSCC0_DSCC_PPS_CONFIG16, RANGE_MIN_QP2, mask_sh), \
    192 	DSC_SF(DSCC0_DSCC_PPS_CONFIG16, RANGE_MAX_QP2, mask_sh), \
    193 	DSC_SF(DSCC0_DSCC_PPS_CONFIG16, RANGE_BPG_OFFSET2, mask_sh), \
    194 	DSC_SF(DSCC0_DSCC_PPS_CONFIG17, RANGE_MIN_QP3, mask_sh), \
    195 	DSC_SF(DSCC0_DSCC_PPS_CONFIG17, RANGE_MAX_QP3, mask_sh), \
    196 	DSC_SF(DSCC0_DSCC_PPS_CONFIG17, RANGE_BPG_OFFSET3, mask_sh), \
    197 	DSC_SF(DSCC0_DSCC_PPS_CONFIG17, RANGE_MIN_QP4, mask_sh), \
    198 	DSC_SF(DSCC0_DSCC_PPS_CONFIG17, RANGE_MAX_QP4, mask_sh), \
    199 	DSC_SF(DSCC0_DSCC_PPS_CONFIG17, RANGE_BPG_OFFSET4, mask_sh), \
    200 	DSC_SF(DSCC0_DSCC_PPS_CONFIG18, RANGE_MIN_QP5, mask_sh), \
    201 	DSC_SF(DSCC0_DSCC_PPS_CONFIG18, RANGE_MAX_QP5, mask_sh), \
    202 	DSC_SF(DSCC0_DSCC_PPS_CONFIG18, RANGE_BPG_OFFSET5, mask_sh), \
    203 	DSC_SF(DSCC0_DSCC_PPS_CONFIG18, RANGE_MIN_QP6, mask_sh), \
    204 	DSC_SF(DSCC0_DSCC_PPS_CONFIG18, RANGE_MAX_QP6, mask_sh), \
    205 	DSC_SF(DSCC0_DSCC_PPS_CONFIG18, RANGE_BPG_OFFSET6, mask_sh), \
    206 	DSC_SF(DSCC0_DSCC_PPS_CONFIG19, RANGE_MIN_QP7, mask_sh), \
    207 	DSC_SF(DSCC0_DSCC_PPS_CONFIG19, RANGE_MAX_QP7, mask_sh), \
    208 	DSC_SF(DSCC0_DSCC_PPS_CONFIG19, RANGE_BPG_OFFSET7, mask_sh), \
    209 	DSC_SF(DSCC0_DSCC_PPS_CONFIG19, RANGE_MIN_QP8, mask_sh), \
    210 	DSC_SF(DSCC0_DSCC_PPS_CONFIG19, RANGE_MAX_QP8, mask_sh), \
    211 	DSC_SF(DSCC0_DSCC_PPS_CONFIG19, RANGE_BPG_OFFSET8, mask_sh), \
    212 	DSC_SF(DSCC0_DSCC_PPS_CONFIG20, RANGE_MIN_QP9, mask_sh), \
    213 	DSC_SF(DSCC0_DSCC_PPS_CONFIG20, RANGE_MAX_QP9, mask_sh), \
    214 	DSC_SF(DSCC0_DSCC_PPS_CONFIG20, RANGE_BPG_OFFSET9, mask_sh), \
    215 	DSC_SF(DSCC0_DSCC_PPS_CONFIG20, RANGE_MIN_QP10, mask_sh), \
    216 	DSC_SF(DSCC0_DSCC_PPS_CONFIG20, RANGE_MAX_QP10, mask_sh), \
    217 	DSC_SF(DSCC0_DSCC_PPS_CONFIG20, RANGE_BPG_OFFSET10, mask_sh), \
    218 	DSC_SF(DSCC0_DSCC_PPS_CONFIG21, RANGE_MIN_QP11, mask_sh), \
    219 	DSC_SF(DSCC0_DSCC_PPS_CONFIG21, RANGE_MAX_QP11, mask_sh), \
    220 	DSC_SF(DSCC0_DSCC_PPS_CONFIG21, RANGE_BPG_OFFSET11, mask_sh), \
    221 	DSC_SF(DSCC0_DSCC_PPS_CONFIG21, RANGE_MIN_QP12, mask_sh), \
    222 	DSC_SF(DSCC0_DSCC_PPS_CONFIG21, RANGE_MAX_QP12, mask_sh), \
    223 	DSC_SF(DSCC0_DSCC_PPS_CONFIG21, RANGE_BPG_OFFSET12, mask_sh), \
    224 	DSC_SF(DSCC0_DSCC_PPS_CONFIG22, RANGE_MIN_QP13, mask_sh), \
    225 	DSC_SF(DSCC0_DSCC_PPS_CONFIG22, RANGE_MAX_QP13, mask_sh), \
    226 	DSC_SF(DSCC0_DSCC_PPS_CONFIG22, RANGE_BPG_OFFSET13, mask_sh), \
    227 	DSC_SF(DSCC0_DSCC_PPS_CONFIG22, RANGE_MIN_QP14, mask_sh), \
    228 	DSC_SF(DSCC0_DSCC_PPS_CONFIG22, RANGE_MAX_QP14, mask_sh), \
    229 	DSC_SF(DSCC0_DSCC_PPS_CONFIG22, RANGE_BPG_OFFSET14, mask_sh), \
    230 	DSC_SF(DSCC0_DSCC_MEM_POWER_CONTROL, DSCC_DEFAULT_MEM_LOW_POWER_STATE, mask_sh), \
    231 	DSC_SF(DSCC0_DSCC_MEM_POWER_CONTROL, DSCC_MEM_PWR_FORCE, mask_sh), \
    232 	DSC_SF(DSCC0_DSCC_MEM_POWER_CONTROL, DSCC_MEM_PWR_DIS, mask_sh), \
    233 	DSC_SF(DSCC0_DSCC_MEM_POWER_CONTROL, DSCC_MEM_PWR_STATE, mask_sh), \
    234 	DSC_SF(DSCC0_DSCC_MEM_POWER_CONTROL, DSCC_NATIVE_422_MEM_PWR_FORCE, mask_sh), \
    235 	DSC_SF(DSCC0_DSCC_MEM_POWER_CONTROL, DSCC_NATIVE_422_MEM_PWR_DIS, mask_sh), \
    236 	DSC_SF(DSCC0_DSCC_MEM_POWER_CONTROL, DSCC_NATIVE_422_MEM_PWR_STATE, mask_sh), \
    237 	DSC_SF(DSCC0_DSCC_R_Y_SQUARED_ERROR_LOWER, DSCC_R_Y_SQUARED_ERROR_LOWER, mask_sh), \
    238 	DSC_SF(DSCC0_DSCC_R_Y_SQUARED_ERROR_UPPER, DSCC_R_Y_SQUARED_ERROR_UPPER, mask_sh), \
    239 	DSC_SF(DSCC0_DSCC_G_CB_SQUARED_ERROR_LOWER, DSCC_G_CB_SQUARED_ERROR_LOWER, mask_sh), \
    240 	DSC_SF(DSCC0_DSCC_G_CB_SQUARED_ERROR_UPPER, DSCC_G_CB_SQUARED_ERROR_UPPER, mask_sh), \
    241 	DSC_SF(DSCC0_DSCC_B_CR_SQUARED_ERROR_LOWER, DSCC_B_CR_SQUARED_ERROR_LOWER, mask_sh), \
    242 	DSC_SF(DSCC0_DSCC_B_CR_SQUARED_ERROR_UPPER, DSCC_B_CR_SQUARED_ERROR_UPPER, mask_sh), \
    243 	DSC_SF(DSCC0_DSCC_MAX_ABS_ERROR0, DSCC_R_Y_MAX_ABS_ERROR, mask_sh), \
    244 	DSC_SF(DSCC0_DSCC_MAX_ABS_ERROR0, DSCC_G_CB_MAX_ABS_ERROR, mask_sh), \
    245 	DSC_SF(DSCC0_DSCC_MAX_ABS_ERROR1, DSCC_B_CR_MAX_ABS_ERROR, mask_sh), \
    246 	DSC_SF(DSCC0_DSCC_RATE_BUFFER0_MAX_FULLNESS_LEVEL, DSCC_RATE_BUFFER0_MAX_FULLNESS_LEVEL, mask_sh), \
    247 	DSC_SF(DSCC0_DSCC_RATE_BUFFER1_MAX_FULLNESS_LEVEL, DSCC_RATE_BUFFER1_MAX_FULLNESS_LEVEL, mask_sh), \
    248 	DSC_SF(DSCC0_DSCC_RATE_BUFFER2_MAX_FULLNESS_LEVEL, DSCC_RATE_BUFFER2_MAX_FULLNESS_LEVEL, mask_sh), \
    249 	DSC_SF(DSCC0_DSCC_RATE_BUFFER3_MAX_FULLNESS_LEVEL, DSCC_RATE_BUFFER3_MAX_FULLNESS_LEVEL, mask_sh), \
    250 	DSC_SF(DSCC0_DSCC_RATE_CONTROL_BUFFER0_MAX_FULLNESS_LEVEL, DSCC_RATE_CONTROL_BUFFER0_MAX_FULLNESS_LEVEL, mask_sh), \
    251 	DSC_SF(DSCC0_DSCC_RATE_CONTROL_BUFFER1_MAX_FULLNESS_LEVEL, DSCC_RATE_CONTROL_BUFFER1_MAX_FULLNESS_LEVEL, mask_sh), \
    252 	DSC_SF(DSCC0_DSCC_RATE_CONTROL_BUFFER2_MAX_FULLNESS_LEVEL, DSCC_RATE_CONTROL_BUFFER2_MAX_FULLNESS_LEVEL, mask_sh), \
    253 	DSC_SF(DSCC0_DSCC_RATE_CONTROL_BUFFER3_MAX_FULLNESS_LEVEL, DSCC_RATE_CONTROL_BUFFER3_MAX_FULLNESS_LEVEL, mask_sh), \
    254 	DSC_SF(DSCC0_DSCC_TEST_DEBUG_BUS_ROTATE, DSCC_TEST_DEBUG_BUS0_ROTATE, mask_sh), \
    255 	DSC_SF(DSCC0_DSCC_TEST_DEBUG_BUS_ROTATE, DSCC_TEST_DEBUG_BUS1_ROTATE, mask_sh), \
    256 	DSC_SF(DSCC0_DSCC_TEST_DEBUG_BUS_ROTATE, DSCC_TEST_DEBUG_BUS2_ROTATE, mask_sh), \
    257 	DSC_SF(DSCC0_DSCC_TEST_DEBUG_BUS_ROTATE, DSCC_TEST_DEBUG_BUS3_ROTATE, mask_sh), \
    258 	DSC_SF(DSCCIF0_DSCCIF_CONFIG0, INPUT_INTERFACE_UNDERFLOW_RECOVERY_EN, mask_sh), \
    259 	DSC_SF(DSCCIF0_DSCCIF_CONFIG0, INPUT_INTERFACE_UNDERFLOW_OCCURRED_INT_EN, mask_sh), \
    260 	DSC_SF(DSCCIF0_DSCCIF_CONFIG0, INPUT_INTERFACE_UNDERFLOW_OCCURRED_STATUS, mask_sh), \
    261 	DSC_SF(DSCCIF0_DSCCIF_CONFIG0, INPUT_PIXEL_FORMAT, mask_sh), \
    262 	DSC2_SF(DSCCIF0, DSCCIF_CONFIG0__BITS_PER_COMPONENT, mask_sh), \
    263 	DSC_SF(DSCCIF0_DSCCIF_CONFIG0, DOUBLE_BUFFER_REG_UPDATE_PENDING, mask_sh), \
    264 	DSC_SF(DSCCIF0_DSCCIF_CONFIG1, PIC_WIDTH, mask_sh), \
    265 	DSC_SF(DSCCIF0_DSCCIF_CONFIG1, PIC_HEIGHT, mask_sh), \
    266 	DSC_SF(DSCRM0_DSCRM_DSC_FORWARD_CONFIG, DSCRM_DSC_FORWARD_EN, mask_sh), \
    267 	DSC_SF(DSCRM0_DSCRM_DSC_FORWARD_CONFIG, DSCRM_DSC_OPP_PIPE_SOURCE, mask_sh)
    268 
    269 
    270 
    271 #define DSC_FIELD_LIST_DCN20(type)\
    272 	type DSC_CLOCK_EN; \
    273 	type DSC_DISPCLK_R_GATE_DIS; \
    274 	type DSC_DSCCLK_R_GATE_DIS; \
    275 	type DSC_DBG_EN; \
    276 	type DSC_TEST_CLOCK_MUX_SEL; \
    277 	type ICH_RESET_AT_END_OF_LINE; \
    278 	type NUMBER_OF_SLICES_PER_LINE; \
    279 	type ALTERNATE_ICH_ENCODING_EN; \
    280 	type NUMBER_OF_SLICES_IN_VERTICAL_DIRECTION; \
    281 	type DSCC_RATE_CONTROL_BUFFER_MODEL_SIZE; \
    282 	/*type DSCC_DISABLE_ICH;*/ \
    283 	type DSCC_DOUBLE_BUFFER_REG_UPDATE_PENDING; \
    284 	type DSCC_RATE_BUFFER0_OVERFLOW_OCCURRED; \
    285 	type DSCC_RATE_BUFFER1_OVERFLOW_OCCURRED; \
    286 	type DSCC_RATE_BUFFER2_OVERFLOW_OCCURRED; \
    287 	type DSCC_RATE_BUFFER3_OVERFLOW_OCCURRED; \
    288 	type DSCC_RATE_BUFFER0_UNDERFLOW_OCCURRED; \
    289 	type DSCC_RATE_BUFFER1_UNDERFLOW_OCCURRED; \
    290 	type DSCC_RATE_BUFFER2_UNDERFLOW_OCCURRED; \
    291 	type DSCC_RATE_BUFFER3_UNDERFLOW_OCCURRED; \
    292 	type DSCC_RATE_CONTROL_BUFFER_MODEL0_OVERFLOW_OCCURRED; \
    293 	type DSCC_RATE_CONTROL_BUFFER_MODEL1_OVERFLOW_OCCURRED; \
    294 	type DSCC_RATE_CONTROL_BUFFER_MODEL2_OVERFLOW_OCCURRED; \
    295 	type DSCC_RATE_CONTROL_BUFFER_MODEL3_OVERFLOW_OCCURRED; \
    296 	type DSCC_RATE_BUFFER0_OVERFLOW_OCCURRED_INT_EN; \
    297 	type DSCC_RATE_BUFFER1_OVERFLOW_OCCURRED_INT_EN; \
    298 	type DSCC_RATE_BUFFER2_OVERFLOW_OCCURRED_INT_EN; \
    299 	type DSCC_RATE_BUFFER3_OVERFLOW_OCCURRED_INT_EN; \
    300 	type DSCC_RATE_BUFFER0_UNDERFLOW_OCCURRED_INT_EN; \
    301 	type DSCC_RATE_BUFFER1_UNDERFLOW_OCCURRED_INT_EN; \
    302 	type DSCC_RATE_BUFFER2_UNDERFLOW_OCCURRED_INT_EN; \
    303 	type DSCC_RATE_BUFFER3_UNDERFLOW_OCCURRED_INT_EN; \
    304 	type DSCC_RATE_CONTROL_BUFFER_MODEL0_OVERFLOW_OCCURRED_INT_EN; \
    305 	type DSCC_RATE_CONTROL_BUFFER_MODEL1_OVERFLOW_OCCURRED_INT_EN; \
    306 	type DSCC_RATE_CONTROL_BUFFER_MODEL2_OVERFLOW_OCCURRED_INT_EN; \
    307 	type DSCC_RATE_CONTROL_BUFFER_MODEL3_OVERFLOW_OCCURRED_INT_EN; \
    308 	type DSC_VERSION_MINOR; \
    309 	type DSC_VERSION_MAJOR; \
    310 	type PPS_IDENTIFIER; \
    311 	type LINEBUF_DEPTH; \
    312 	type DSCC_PPS_CONFIG0__BITS_PER_COMPONENT; \
    313 	type BITS_PER_PIXEL; \
    314 	type VBR_ENABLE; \
    315 	type SIMPLE_422; \
    316 	type CONVERT_RGB; \
    317 	type BLOCK_PRED_ENABLE; \
    318 	type NATIVE_422; \
    319 	type NATIVE_420; \
    320 	type CHUNK_SIZE; \
    321 	type PIC_WIDTH; \
    322 	type PIC_HEIGHT; \
    323 	type SLICE_WIDTH; \
    324 	type SLICE_HEIGHT; \
    325 	type INITIAL_XMIT_DELAY; \
    326 	type INITIAL_DEC_DELAY; \
    327 	type INITIAL_SCALE_VALUE; \
    328 	type SCALE_INCREMENT_INTERVAL; \
    329 	type SCALE_DECREMENT_INTERVAL; \
    330 	type FIRST_LINE_BPG_OFFSET; \
    331 	type SECOND_LINE_BPG_OFFSET; \
    332 	type NFL_BPG_OFFSET; \
    333 	type SLICE_BPG_OFFSET; \
    334 	type NSL_BPG_OFFSET; \
    335 	type SECOND_LINE_OFFSET_ADJ; \
    336 	type INITIAL_OFFSET; \
    337 	type FINAL_OFFSET; \
    338 	type FLATNESS_MIN_QP; \
    339 	type FLATNESS_MAX_QP; \
    340 	type RC_MODEL_SIZE; \
    341 	type RC_EDGE_FACTOR; \
    342 	type RC_QUANT_INCR_LIMIT0; \
    343 	type RC_QUANT_INCR_LIMIT1; \
    344 	type RC_TGT_OFFSET_LO; \
    345 	type RC_TGT_OFFSET_HI; \
    346 	type RC_BUF_THRESH0; \
    347 	type RC_BUF_THRESH1; \
    348 	type RC_BUF_THRESH2; \
    349 	type RC_BUF_THRESH3; \
    350 	type RC_BUF_THRESH4; \
    351 	type RC_BUF_THRESH5; \
    352 	type RC_BUF_THRESH6; \
    353 	type RC_BUF_THRESH7; \
    354 	type RC_BUF_THRESH8; \
    355 	type RC_BUF_THRESH9; \
    356 	type RC_BUF_THRESH10; \
    357 	type RC_BUF_THRESH11; \
    358 	type RC_BUF_THRESH12; \
    359 	type RC_BUF_THRESH13; \
    360 	type RANGE_MIN_QP0; \
    361 	type RANGE_MAX_QP0; \
    362 	type RANGE_BPG_OFFSET0; \
    363 	type RANGE_MIN_QP1; \
    364 	type RANGE_MAX_QP1; \
    365 	type RANGE_BPG_OFFSET1; \
    366 	type RANGE_MIN_QP2; \
    367 	type RANGE_MAX_QP2; \
    368 	type RANGE_BPG_OFFSET2; \
    369 	type RANGE_MIN_QP3; \
    370 	type RANGE_MAX_QP3; \
    371 	type RANGE_BPG_OFFSET3; \
    372 	type RANGE_MIN_QP4; \
    373 	type RANGE_MAX_QP4; \
    374 	type RANGE_BPG_OFFSET4; \
    375 	type RANGE_MIN_QP5; \
    376 	type RANGE_MAX_QP5; \
    377 	type RANGE_BPG_OFFSET5; \
    378 	type RANGE_MIN_QP6; \
    379 	type RANGE_MAX_QP6; \
    380 	type RANGE_BPG_OFFSET6; \
    381 	type RANGE_MIN_QP7; \
    382 	type RANGE_MAX_QP7; \
    383 	type RANGE_BPG_OFFSET7; \
    384 	type RANGE_MIN_QP8; \
    385 	type RANGE_MAX_QP8; \
    386 	type RANGE_BPG_OFFSET8; \
    387 	type RANGE_MIN_QP9; \
    388 	type RANGE_MAX_QP9; \
    389 	type RANGE_BPG_OFFSET9; \
    390 	type RANGE_MIN_QP10; \
    391 	type RANGE_MAX_QP10; \
    392 	type RANGE_BPG_OFFSET10; \
    393 	type RANGE_MIN_QP11; \
    394 	type RANGE_MAX_QP11; \
    395 	type RANGE_BPG_OFFSET11; \
    396 	type RANGE_MIN_QP12; \
    397 	type RANGE_MAX_QP12; \
    398 	type RANGE_BPG_OFFSET12; \
    399 	type RANGE_MIN_QP13; \
    400 	type RANGE_MAX_QP13; \
    401 	type RANGE_BPG_OFFSET13; \
    402 	type RANGE_MIN_QP14; \
    403 	type RANGE_MAX_QP14; \
    404 	type RANGE_BPG_OFFSET14; \
    405 	type DSCC_DEFAULT_MEM_LOW_POWER_STATE; \
    406 	type DSCC_MEM_PWR_FORCE; \
    407 	type DSCC_MEM_PWR_DIS; \
    408 	type DSCC_MEM_PWR_STATE; \
    409 	type DSCC_NATIVE_422_MEM_PWR_FORCE; \
    410 	type DSCC_NATIVE_422_MEM_PWR_DIS; \
    411 	type DSCC_NATIVE_422_MEM_PWR_STATE; \
    412 	type DSCC_R_Y_SQUARED_ERROR_LOWER; \
    413 	type DSCC_R_Y_SQUARED_ERROR_UPPER; \
    414 	type DSCC_G_CB_SQUARED_ERROR_LOWER; \
    415 	type DSCC_G_CB_SQUARED_ERROR_UPPER; \
    416 	type DSCC_B_CR_SQUARED_ERROR_LOWER; \
    417 	type DSCC_B_CR_SQUARED_ERROR_UPPER; \
    418 	type DSCC_R_Y_MAX_ABS_ERROR; \
    419 	type DSCC_G_CB_MAX_ABS_ERROR; \
    420 	type DSCC_B_CR_MAX_ABS_ERROR; \
    421 	type DSCC_RATE_BUFFER0_MAX_FULLNESS_LEVEL; \
    422 	type DSCC_RATE_BUFFER1_MAX_FULLNESS_LEVEL; \
    423 	type DSCC_RATE_BUFFER2_MAX_FULLNESS_LEVEL; \
    424 	type DSCC_RATE_BUFFER3_MAX_FULLNESS_LEVEL; \
    425 	type DSCC_RATE_CONTROL_BUFFER0_MAX_FULLNESS_LEVEL; \
    426 	type DSCC_RATE_CONTROL_BUFFER1_MAX_FULLNESS_LEVEL; \
    427 	type DSCC_RATE_CONTROL_BUFFER2_MAX_FULLNESS_LEVEL; \
    428 	type DSCC_RATE_CONTROL_BUFFER3_MAX_FULLNESS_LEVEL; \
    429 	type DSCC_UPDATE_PENDING_STATUS; \
    430 	type DSCC_UPDATE_TAKEN_STATUS; \
    431 	type DSCC_UPDATE_TAKEN_ACK; \
    432 	type DSCC_TEST_DEBUG_BUS0_ROTATE; \
    433 	type DSCC_TEST_DEBUG_BUS1_ROTATE; \
    434 	type DSCC_TEST_DEBUG_BUS2_ROTATE; \
    435 	type DSCC_TEST_DEBUG_BUS3_ROTATE; \
    436 	type DSCC_RATE_BUFFER0_FULLNESS_LEVEL; \
    437 	type DSCC_RATE_BUFFER1_FULLNESS_LEVEL; \
    438 	type DSCC_RATE_BUFFER2_FULLNESS_LEVEL; \
    439 	type DSCC_RATE_BUFFER3_FULLNESS_LEVEL; \
    440 	type DSCC_RATE_CONTROL_BUFFER0_FULLNESS_LEVEL; \
    441 	type DSCC_RATE_CONTROL_BUFFER1_FULLNESS_LEVEL; \
    442 	type DSCC_RATE_CONTROL_BUFFER2_FULLNESS_LEVEL; \
    443 	type DSCC_RATE_CONTROL_BUFFER3_FULLNESS_LEVEL; \
    444 	type DSCC_RATE_BUFFER0_INITIAL_XMIT_DELAY_REACHED; \
    445 	type DSCC_RATE_BUFFER1_INITIAL_XMIT_DELAY_REACHED; \
    446 	type DSCC_RATE_BUFFER2_INITIAL_XMIT_DELAY_REACHED; \
    447 	type DSCC_RATE_BUFFER3_INITIAL_XMIT_DELAY_REACHED; \
    448 	type INPUT_INTERFACE_UNDERFLOW_RECOVERY_EN; \
    449 	type INPUT_INTERFACE_UNDERFLOW_OCCURRED_INT_EN; \
    450 	type INPUT_INTERFACE_UNDERFLOW_OCCURRED_STATUS; \
    451 	type INPUT_PIXEL_FORMAT; \
    452 	type DSCCIF_CONFIG0__BITS_PER_COMPONENT; \
    453 	type DOUBLE_BUFFER_REG_UPDATE_PENDING; \
    454 	type DSCCIF_UPDATE_PENDING_STATUS; \
    455 	type DSCCIF_UPDATE_TAKEN_STATUS; \
    456 	type DSCCIF_UPDATE_TAKEN_ACK; \
    457 	type DSCRM_DSC_FORWARD_EN; \
    458 	type DSCRM_DSC_OPP_PIPE_SOURCE
    459 
    460 
    461 struct dcn20_dsc_registers {
    462 	uint32_t DSC_TOP_CONTROL;
    463 	uint32_t DSC_DEBUG_CONTROL;
    464 	uint32_t DSCC_CONFIG0;
    465 	uint32_t DSCC_CONFIG1;
    466 	uint32_t DSCC_STATUS;
    467 	uint32_t DSCC_INTERRUPT_CONTROL_STATUS;
    468 	uint32_t DSCC_PPS_CONFIG0;
    469 	uint32_t DSCC_PPS_CONFIG1;
    470 	uint32_t DSCC_PPS_CONFIG2;
    471 	uint32_t DSCC_PPS_CONFIG3;
    472 	uint32_t DSCC_PPS_CONFIG4;
    473 	uint32_t DSCC_PPS_CONFIG5;
    474 	uint32_t DSCC_PPS_CONFIG6;
    475 	uint32_t DSCC_PPS_CONFIG7;
    476 	uint32_t DSCC_PPS_CONFIG8;
    477 	uint32_t DSCC_PPS_CONFIG9;
    478 	uint32_t DSCC_PPS_CONFIG10;
    479 	uint32_t DSCC_PPS_CONFIG11;
    480 	uint32_t DSCC_PPS_CONFIG12;
    481 	uint32_t DSCC_PPS_CONFIG13;
    482 	uint32_t DSCC_PPS_CONFIG14;
    483 	uint32_t DSCC_PPS_CONFIG15;
    484 	uint32_t DSCC_PPS_CONFIG16;
    485 	uint32_t DSCC_PPS_CONFIG17;
    486 	uint32_t DSCC_PPS_CONFIG18;
    487 	uint32_t DSCC_PPS_CONFIG19;
    488 	uint32_t DSCC_PPS_CONFIG20;
    489 	uint32_t DSCC_PPS_CONFIG21;
    490 	uint32_t DSCC_PPS_CONFIG22;
    491 	uint32_t DSCC_MEM_POWER_CONTROL;
    492 	uint32_t DSCC_R_Y_SQUARED_ERROR_LOWER;
    493 	uint32_t DSCC_R_Y_SQUARED_ERROR_UPPER;
    494 	uint32_t DSCC_G_CB_SQUARED_ERROR_LOWER;
    495 	uint32_t DSCC_G_CB_SQUARED_ERROR_UPPER;
    496 	uint32_t DSCC_B_CR_SQUARED_ERROR_LOWER;
    497 	uint32_t DSCC_B_CR_SQUARED_ERROR_UPPER;
    498 	uint32_t DSCC_MAX_ABS_ERROR0;
    499 	uint32_t DSCC_MAX_ABS_ERROR1;
    500 	uint32_t DSCC_RATE_BUFFER0_MAX_FULLNESS_LEVEL;
    501 	uint32_t DSCC_RATE_BUFFER1_MAX_FULLNESS_LEVEL;
    502 	uint32_t DSCC_RATE_BUFFER2_MAX_FULLNESS_LEVEL;
    503 	uint32_t DSCC_RATE_BUFFER3_MAX_FULLNESS_LEVEL;
    504 	uint32_t DSCC_RATE_CONTROL_BUFFER0_MAX_FULLNESS_LEVEL;
    505 	uint32_t DSCC_RATE_CONTROL_BUFFER1_MAX_FULLNESS_LEVEL;
    506 	uint32_t DSCC_RATE_CONTROL_BUFFER2_MAX_FULLNESS_LEVEL;
    507 	uint32_t DSCC_RATE_CONTROL_BUFFER3_MAX_FULLNESS_LEVEL;
    508 	uint32_t DSCC_TEST_DEBUG_BUS_ROTATE;
    509 	uint32_t DSCCIF_CONFIG0;
    510 	uint32_t DSCCIF_CONFIG1;
    511 	uint32_t DSCRM_DSC_FORWARD_CONFIG;
    512 };
    513 
    514 
    515 struct dcn20_dsc_shift {
    516 	DSC_FIELD_LIST_DCN20(uint8_t);
    517 };
    518 
    519 struct dcn20_dsc_mask {
    520 	DSC_FIELD_LIST_DCN20(uint32_t);
    521 };
    522 
    523 /* DSCCIF_CONFIG.INPUT_PIXEL_FORMAT values */
    524 enum dsc_pixel_format {
    525 	DSC_PIXFMT_RGB,
    526 	DSC_PIXFMT_YCBCR444,
    527 	DSC_PIXFMT_SIMPLE_YCBCR422,
    528 	DSC_PIXFMT_NATIVE_YCBCR422,
    529 	DSC_PIXFMT_NATIVE_YCBCR420,
    530 	DSC_PIXFMT_UNKNOWN
    531 };
    532 
    533 struct dsc_reg_values {
    534 	/* PPS registers */
    535 	struct drm_dsc_config pps;
    536 
    537 	/* Additional registers */
    538 	uint32_t dsc_clock_enable;
    539 	uint32_t dsc_clock_gating_disable;
    540 	uint32_t underflow_recovery_en;
    541 	uint32_t underflow_occurred_int_en;
    542 	uint32_t underflow_occurred_status;
    543 	enum dsc_pixel_format pixel_format;
    544 	uint32_t ich_reset_at_eol;
    545 	uint32_t alternate_ich_encoding_en;
    546 	uint32_t num_slices_h;
    547 	uint32_t num_slices_v;
    548 	uint32_t rc_buffer_model_size;
    549 	uint32_t disable_ich;
    550 	uint32_t bpp_x32;
    551 	uint32_t dsc_dbg_en;
    552 	uint32_t rc_buffer_model_overflow_int_en[4];
    553 };
    554 
    555 struct dcn20_dsc {
    556 	struct display_stream_compressor base;
    557 	const struct dcn20_dsc_registers *dsc_regs;
    558 	const struct dcn20_dsc_shift *dsc_shift;
    559 	const struct dcn20_dsc_mask *dsc_mask;
    560 
    561 	struct dsc_reg_values reg_vals;
    562 
    563 	int max_image_width;
    564 };
    565 
    566 
    567 void dsc2_construct(struct dcn20_dsc *dsc,
    568 		struct dc_context *ctx,
    569 		int inst,
    570 		const struct dcn20_dsc_registers *dsc_regs,
    571 		const struct dcn20_dsc_shift *dsc_shift,
    572 		const struct dcn20_dsc_mask *dsc_mask);
    573 
    574 #endif
    575 
    576