xref: /rockchip-linux_mpp/mpp/hal/rkdec/inc/vdpu382_com.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2022 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #ifndef __VDPU382_COM_H__
18*437bfbebSnyanmisaka #define __VDPU382_COM_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "mpp_device.h"
21*437bfbebSnyanmisaka #include "mpp_buf_slot.h"
22*437bfbebSnyanmisaka #include "vdpu382.h"
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka #define OFFSET_COMMON_REGS          (8 * sizeof(RK_U32))
25*437bfbebSnyanmisaka #define OFFSET_CODEC_PARAMS_REGS    (64 * sizeof(RK_U32))
26*437bfbebSnyanmisaka #define OFFSET_COMMON_ADDR_REGS     (128 * sizeof(RK_U32))
27*437bfbebSnyanmisaka #define OFFSET_CODEC_ADDR_REGS      (160 * sizeof(RK_U32))
28*437bfbebSnyanmisaka #define OFFSET_POC_HIGHBIT_REGS     (200 * sizeof(RK_U32))
29*437bfbebSnyanmisaka #define OFFSET_INTERRUPT_REGS       (224 * sizeof(RK_U32))
30*437bfbebSnyanmisaka #define OFFSET_STATISTIC_REGS       (256 * sizeof(RK_U32))
31*437bfbebSnyanmisaka 
32*437bfbebSnyanmisaka #define RCB_ALLINE_SIZE             (64)
33*437bfbebSnyanmisaka 
34*437bfbebSnyanmisaka #define MPP_RCB_BYTES(bits)  MPP_ALIGN((bits + 7) / 8, RCB_ALLINE_SIZE)
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka typedef enum Vdpu382_RCB_TYPE_E {
37*437bfbebSnyanmisaka     RCB_DBLK_ROW,
38*437bfbebSnyanmisaka     RCB_INTRA_ROW,
39*437bfbebSnyanmisaka     RCB_TRANSD_ROW,
40*437bfbebSnyanmisaka     RCB_STRMD_ROW,
41*437bfbebSnyanmisaka     RCB_INTER_ROW,
42*437bfbebSnyanmisaka     RCB_SAO_ROW,
43*437bfbebSnyanmisaka     RCB_FBC_ROW,
44*437bfbebSnyanmisaka     RCB_TRANSD_COL,
45*437bfbebSnyanmisaka     RCB_INTER_COL,
46*437bfbebSnyanmisaka     RCB_FILT_COL,
47*437bfbebSnyanmisaka 
48*437bfbebSnyanmisaka     RCB_BUF_COUNT,
49*437bfbebSnyanmisaka } Vdpu382RcbType_e;
50*437bfbebSnyanmisaka 
51*437bfbebSnyanmisaka typedef enum Vdpu382_RCB_SET_MODE_E {
52*437bfbebSnyanmisaka     RCB_SET_BY_SIZE_SORT_MODE,
53*437bfbebSnyanmisaka     RCB_SET_BY_PRIORITY_MODE,
54*437bfbebSnyanmisaka } Vdpu382RcbSetMode_e;
55*437bfbebSnyanmisaka 
56*437bfbebSnyanmisaka /* base: OFFSET_COMMON_REGS */
57*437bfbebSnyanmisaka typedef struct Vdpu382RegCommon_t {
58*437bfbebSnyanmisaka     struct SWREG8_IN_OUT {
59*437bfbebSnyanmisaka         RK_U32      in_endian               : 1;
60*437bfbebSnyanmisaka         RK_U32      in_swap32_e             : 1;
61*437bfbebSnyanmisaka         RK_U32      in_swap64_e             : 1;
62*437bfbebSnyanmisaka         RK_U32      str_endian              : 1;
63*437bfbebSnyanmisaka         RK_U32      str_swap32_e            : 1;
64*437bfbebSnyanmisaka         RK_U32      str_swap64_e            : 1;
65*437bfbebSnyanmisaka         RK_U32      out_endian              : 1;
66*437bfbebSnyanmisaka         RK_U32      out_swap32_e            : 1;
67*437bfbebSnyanmisaka         RK_U32      out_cbcr_swap           : 1;
68*437bfbebSnyanmisaka         RK_U32      out_swap64_e            : 1;
69*437bfbebSnyanmisaka         RK_U32      reserve                 : 22;
70*437bfbebSnyanmisaka     } reg008;
71*437bfbebSnyanmisaka 
72*437bfbebSnyanmisaka     struct SWREG9_DEC_MODE {
73*437bfbebSnyanmisaka         RK_U32      dec_mode                : 10;
74*437bfbebSnyanmisaka         RK_U32      reserve                 : 22;
75*437bfbebSnyanmisaka     } reg009;
76*437bfbebSnyanmisaka 
77*437bfbebSnyanmisaka     struct SWREG10_DEC_E {
78*437bfbebSnyanmisaka         RK_U32      dec_e                   : 1;
79*437bfbebSnyanmisaka         RK_U32      reserve                 : 31;
80*437bfbebSnyanmisaka     } reg010;
81*437bfbebSnyanmisaka 
82*437bfbebSnyanmisaka     struct SWREG11_IMPORTANT_EN {
83*437bfbebSnyanmisaka         RK_U32      reserver                : 1;
84*437bfbebSnyanmisaka         RK_U32      dec_clkgate_e           : 1;
85*437bfbebSnyanmisaka         RK_U32      reserve1                : 2;
86*437bfbebSnyanmisaka 
87*437bfbebSnyanmisaka         RK_U32      dec_irq_dis             : 1;
88*437bfbebSnyanmisaka         RK_U32      dec_line_irq_dis        : 1; //change to reg205[9]
89*437bfbebSnyanmisaka         RK_U32      buf_empty_en            : 1;
90*437bfbebSnyanmisaka         RK_U32      reserve2                : 1;
91*437bfbebSnyanmisaka 
92*437bfbebSnyanmisaka         RK_U32      dec_line_irq_en         : 1;
93*437bfbebSnyanmisaka         RK_U32      reserve3                : 1;
94*437bfbebSnyanmisaka         RK_U32      dec_e_rewrite_valid     : 1;
95*437bfbebSnyanmisaka         RK_U32      reserve4                : 9;
96*437bfbebSnyanmisaka 
97*437bfbebSnyanmisaka         RK_U32      softrst_en_p            : 1;
98*437bfbebSnyanmisaka         RK_U32      reserve5                : 1; //change to reg205[0]
99*437bfbebSnyanmisaka         RK_U32      err_head_fill_e         : 1;
100*437bfbebSnyanmisaka         RK_U32      err_colmv_fill_e        : 1;
101*437bfbebSnyanmisaka         RK_U32      pix_range_detection_e   : 1;
102*437bfbebSnyanmisaka         RK_U32      reserve6                : 3;
103*437bfbebSnyanmisaka         RK_U32      wlast_match_fail        : 1;
104*437bfbebSnyanmisaka         RK_U32      mmu_wlast_match_fail    : 1;
105*437bfbebSnyanmisaka         RK_U32      reserve7                : 2;
106*437bfbebSnyanmisaka     } reg011;
107*437bfbebSnyanmisaka 
108*437bfbebSnyanmisaka     struct SWREG12_SENCODARY_EN {
109*437bfbebSnyanmisaka         RK_U32      reserve0                : 1;
110*437bfbebSnyanmisaka         RK_U32      colmv_compress_en       : 1;
111*437bfbebSnyanmisaka         RK_U32      fbc_e                   : 1;
112*437bfbebSnyanmisaka         RK_U32      tile_e                  : 1;
113*437bfbebSnyanmisaka 
114*437bfbebSnyanmisaka         RK_U32      reserve1                : 1;
115*437bfbebSnyanmisaka         RK_U32      error_info_en           : 1;
116*437bfbebSnyanmisaka         RK_U32      info_collect_en         : 1;
117*437bfbebSnyanmisaka         RK_U32      reserve2                : 1; //change to reg205[4]
118*437bfbebSnyanmisaka 
119*437bfbebSnyanmisaka         RK_U32      scanlist_addr_valid_en  : 1;
120*437bfbebSnyanmisaka         RK_U32      scale_down_en           : 1;
121*437bfbebSnyanmisaka         RK_U32      reserve3                : 22;
122*437bfbebSnyanmisaka     } reg012;
123*437bfbebSnyanmisaka 
124*437bfbebSnyanmisaka     struct SWREG13_EN_MODE_SET {
125*437bfbebSnyanmisaka         RK_U32      reserve0                    : 1;
126*437bfbebSnyanmisaka         RK_U32      req_timeout_rst_sel         : 1;
127*437bfbebSnyanmisaka         RK_U32      reserve1                    : 1;
128*437bfbebSnyanmisaka         RK_U32      dec_commonirq_mode          : 1;
129*437bfbebSnyanmisaka         RK_U32      reserve2                    : 2;
130*437bfbebSnyanmisaka         RK_U32      stmerror_waitdecfifo_empty  : 1;
131*437bfbebSnyanmisaka         RK_U32      reserve3                    : 1;
132*437bfbebSnyanmisaka         RK_U32      strmd_zero_rm_en            : 1;
133*437bfbebSnyanmisaka         RK_U32      reserve4                    : 3;
134*437bfbebSnyanmisaka         RK_U32      allow_not_wr_unref_bframe   : 1;
135*437bfbebSnyanmisaka         RK_U32      fbc_output_wr_disable       : 1;
136*437bfbebSnyanmisaka 
137*437bfbebSnyanmisaka         RK_U32      reserve5            : 4;
138*437bfbebSnyanmisaka         RK_U32      h26x_error_mode     : 1;
139*437bfbebSnyanmisaka         RK_U32      reserve6            : 5;
140*437bfbebSnyanmisaka         RK_U32      cur_pic_is_idr      : 1;
141*437bfbebSnyanmisaka         RK_U32      reserve8            : 6; //change to reg205[5]
142*437bfbebSnyanmisaka         RK_U32      filter_outbuf_mode  : 1;
143*437bfbebSnyanmisaka 
144*437bfbebSnyanmisaka     } reg013;
145*437bfbebSnyanmisaka 
146*437bfbebSnyanmisaka     struct SWREG14_FBC_PARAM_SET {
147*437bfbebSnyanmisaka         RK_U32      fbc_force_uncompress    : 1;
148*437bfbebSnyanmisaka 
149*437bfbebSnyanmisaka         RK_U32      reserve0                : 2;
150*437bfbebSnyanmisaka         RK_U32      allow_16x8_cp_flag      : 1;
151*437bfbebSnyanmisaka         RK_U32      reserve1                : 2;
152*437bfbebSnyanmisaka 
153*437bfbebSnyanmisaka         RK_U32      fbc_h264_exten_4or8_flag: 1;
154*437bfbebSnyanmisaka         RK_U32      reserve2                : 25;
155*437bfbebSnyanmisaka     } reg014;
156*437bfbebSnyanmisaka 
157*437bfbebSnyanmisaka     struct SWREG15_STREAM_PARAM_SET {
158*437bfbebSnyanmisaka         RK_U32      rlc_mode_direct_write   : 1;
159*437bfbebSnyanmisaka         RK_U32      rlc_mode                : 1;
160*437bfbebSnyanmisaka         RK_U32      strmd_ofifo_perf_opt_en : 1;
161*437bfbebSnyanmisaka         RK_U32      reserve0                : 2;
162*437bfbebSnyanmisaka 
163*437bfbebSnyanmisaka         RK_U32      strm_start_bit          : 7;
164*437bfbebSnyanmisaka         RK_U32      reserve1                : 20;
165*437bfbebSnyanmisaka     } reg015;
166*437bfbebSnyanmisaka 
167*437bfbebSnyanmisaka     RK_U32  reg016_str_len;
168*437bfbebSnyanmisaka 
169*437bfbebSnyanmisaka     struct SWREG17_SLICE_NUMBER {
170*437bfbebSnyanmisaka         RK_U32      slice_num           : 25;
171*437bfbebSnyanmisaka         RK_U32      reserve             : 7;
172*437bfbebSnyanmisaka     } reg017;
173*437bfbebSnyanmisaka 
174*437bfbebSnyanmisaka     struct SWREG18_Y_HOR_STRIDE {
175*437bfbebSnyanmisaka         RK_U32      y_hor_virstride     : 16;
176*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
177*437bfbebSnyanmisaka     } reg018;
178*437bfbebSnyanmisaka 
179*437bfbebSnyanmisaka     struct SWREG19_UV_HOR_STRIDE {
180*437bfbebSnyanmisaka         RK_U32      uv_hor_virstride    : 16;
181*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
182*437bfbebSnyanmisaka     } reg019;
183*437bfbebSnyanmisaka 
184*437bfbebSnyanmisaka     union {
185*437bfbebSnyanmisaka         struct SWREG20_Y_STRIDE {
186*437bfbebSnyanmisaka             RK_U32      y_virstride         : 28;
187*437bfbebSnyanmisaka             RK_U32      reserve             : 4;
188*437bfbebSnyanmisaka         } reg020_y_virstride;
189*437bfbebSnyanmisaka 
190*437bfbebSnyanmisaka         struct SWREG20_FBC_PAYLOAD_OFFSET {
191*437bfbebSnyanmisaka             RK_U32      reserve             : 4;
192*437bfbebSnyanmisaka             RK_U32      payload_st_offset   : 28;
193*437bfbebSnyanmisaka         } reg020_fbc_payload_off;
194*437bfbebSnyanmisaka     };
195*437bfbebSnyanmisaka 
196*437bfbebSnyanmisaka 
197*437bfbebSnyanmisaka     struct SWREG21_ERROR_CTRL_SET {
198*437bfbebSnyanmisaka         RK_U32 inter_error_prc_mode          : 1;
199*437bfbebSnyanmisaka         RK_U32 error_intra_mode              : 1;
200*437bfbebSnyanmisaka         RK_U32 error_deb_en                  : 1;
201*437bfbebSnyanmisaka         RK_U32 picidx_replace                : 5;
202*437bfbebSnyanmisaka         RK_U32 error_spread_e                : 1;
203*437bfbebSnyanmisaka         RK_U32                               : 3;
204*437bfbebSnyanmisaka         RK_U32 error_inter_pred_cross_slice  : 1;
205*437bfbebSnyanmisaka         RK_U32 reserve0                      : 11;
206*437bfbebSnyanmisaka 
207*437bfbebSnyanmisaka         RK_U32 roi_error_ctu_cal_en          : 1;
208*437bfbebSnyanmisaka         RK_U32 reserve1                      : 7;
209*437bfbebSnyanmisaka     } reg021;
210*437bfbebSnyanmisaka 
211*437bfbebSnyanmisaka     struct SWREG22_ERR_ROI_CTU_OFFSET_START {
212*437bfbebSnyanmisaka         RK_U32      roi_x_ctu_offset_st : 12;
213*437bfbebSnyanmisaka         RK_U32      reserve0            : 4;
214*437bfbebSnyanmisaka         RK_U32      roi_y_ctu_offset_st : 12;
215*437bfbebSnyanmisaka         RK_U32      reserve1            : 4;
216*437bfbebSnyanmisaka     } reg022;
217*437bfbebSnyanmisaka 
218*437bfbebSnyanmisaka     struct SWREG23_ERR_ROI_CTU_OFFSET_END {
219*437bfbebSnyanmisaka         RK_U32      roi_x_ctu_offset_end    : 12;
220*437bfbebSnyanmisaka         RK_U32      reserve0                : 4;
221*437bfbebSnyanmisaka         RK_U32      roi_y_ctu_offset_end    : 12;
222*437bfbebSnyanmisaka         RK_U32      reserve1                : 4;
223*437bfbebSnyanmisaka     } reg023;
224*437bfbebSnyanmisaka 
225*437bfbebSnyanmisaka     struct SWREG24_CABAC_ERROR_EN_LOWBITS {
226*437bfbebSnyanmisaka         RK_U32      cabac_err_en_lowbits    : 32;
227*437bfbebSnyanmisaka     } reg024;
228*437bfbebSnyanmisaka 
229*437bfbebSnyanmisaka     struct SWREG25_CABAC_ERROR_EN_HIGHBITS {
230*437bfbebSnyanmisaka         RK_U32      cabac_err_en_highbits   : 30;
231*437bfbebSnyanmisaka         RK_U32      reserve                 : 2;
232*437bfbebSnyanmisaka     } reg025;
233*437bfbebSnyanmisaka 
234*437bfbebSnyanmisaka     struct SWREG26_BLOCK_GATING_EN {
235*437bfbebSnyanmisaka         RK_U32      inter_auto_gating_e     : 1;
236*437bfbebSnyanmisaka         RK_U32      filterd_auto_gating_e   : 1;
237*437bfbebSnyanmisaka         RK_U32      strmd_auto_gating_e     : 1;
238*437bfbebSnyanmisaka         RK_U32      mcp_auto_gating_e       : 1;
239*437bfbebSnyanmisaka         RK_U32      busifd_auto_gating_e    : 1;
240*437bfbebSnyanmisaka         RK_U32      reserved                : 3;
241*437bfbebSnyanmisaka         RK_U32      dec_ctrl_auto_gating_e  : 1;
242*437bfbebSnyanmisaka         RK_U32      intra_auto_gating_e     : 1;
243*437bfbebSnyanmisaka         RK_U32      mc_auto_gating_e        : 1;
244*437bfbebSnyanmisaka         RK_U32      transd_auto_gating_e    : 1;
245*437bfbebSnyanmisaka         RK_U32      reserved1               : 4;
246*437bfbebSnyanmisaka         RK_U32      sram_auto_gating_e      : 1;
247*437bfbebSnyanmisaka         RK_U32      cru_auto_gating_e       : 1;
248*437bfbebSnyanmisaka         RK_U32      reserved2               : 13;
249*437bfbebSnyanmisaka         RK_U32      reg_cfg_gating_en       : 1;
250*437bfbebSnyanmisaka     } reg026;
251*437bfbebSnyanmisaka 
252*437bfbebSnyanmisaka     /* NOTE: reg027 ~ reg032 are added in vdpu38x at rk3588 */
253*437bfbebSnyanmisaka     struct SW027_CORE_SAFE_PIXELS {
254*437bfbebSnyanmisaka         // colmv and recon report coord x safe pixels
255*437bfbebSnyanmisaka         RK_U32 core_safe_x_pixels           : 16;
256*437bfbebSnyanmisaka         // colmv and recon report coord y safe pixels
257*437bfbebSnyanmisaka         RK_U32 core_safe_y_pixels           : 16;
258*437bfbebSnyanmisaka     } reg027;
259*437bfbebSnyanmisaka 
260*437bfbebSnyanmisaka     struct SWREG28_MULTIPLY_CORE_CTRL {
261*437bfbebSnyanmisaka         RK_U32      swreg_vp9_wr_prob_idx   : 3;
262*437bfbebSnyanmisaka         RK_U32      reserve0                : 1;
263*437bfbebSnyanmisaka         RK_U32      swreg_vp9_rd_prob_idx   : 3;
264*437bfbebSnyanmisaka         RK_U32      reserve1                : 1;
265*437bfbebSnyanmisaka 
266*437bfbebSnyanmisaka         RK_U32      swreg_ref_req_advance_flag  : 1;
267*437bfbebSnyanmisaka         RK_U32      sw_colmv_req_advance_flag   : 1;
268*437bfbebSnyanmisaka         RK_U32      sw_poc_only_highbit_flag    : 1;
269*437bfbebSnyanmisaka         RK_U32      sw_poc_arb_flag             : 1;
270*437bfbebSnyanmisaka 
271*437bfbebSnyanmisaka         RK_U32      reserve2                : 4;
272*437bfbebSnyanmisaka         RK_U32      sw_film_idx             : 10;
273*437bfbebSnyanmisaka         RK_U32      reserve3                : 2;
274*437bfbebSnyanmisaka         RK_U32      sw_pu_req_mismatch_dis  : 1;
275*437bfbebSnyanmisaka         RK_U32      sw_colmv_req_mismatch_dis   : 1;
276*437bfbebSnyanmisaka         RK_U32      reserve4                : 2;
277*437bfbebSnyanmisaka     } reg028;
278*437bfbebSnyanmisaka 
279*437bfbebSnyanmisaka     struct SWREG29_SCALE_DOWN_CTRL {
280*437bfbebSnyanmisaka         RK_U32      scale_down_y_wratio     : 5;
281*437bfbebSnyanmisaka         RK_U32      reserve0                : 3;
282*437bfbebSnyanmisaka         RK_U32      scale_down_y_hratio     : 5;
283*437bfbebSnyanmisaka         RK_U32      reserve1                : 3;
284*437bfbebSnyanmisaka         RK_U32      scale_down_c_wratio     : 5;
285*437bfbebSnyanmisaka         RK_U32      reserve2                : 3;
286*437bfbebSnyanmisaka         RK_U32      scale_down_c_hratio     : 5;
287*437bfbebSnyanmisaka         RK_U32      reserve3                : 1;
288*437bfbebSnyanmisaka         RK_U32      scale_down_roi_mode     : 1;
289*437bfbebSnyanmisaka         RK_U32      scale_down_tile_mode    : 1;
290*437bfbebSnyanmisaka     } reg029;
291*437bfbebSnyanmisaka 
292*437bfbebSnyanmisaka     struct SW032_Y_SCALE_DOWN_TILE8x8_HOR_STRIDE {
293*437bfbebSnyanmisaka         RK_U32 y_scale_down_hor_stride      : 20;
294*437bfbebSnyanmisaka         RK_U32                              : 12;
295*437bfbebSnyanmisaka     } reg030;
296*437bfbebSnyanmisaka 
297*437bfbebSnyanmisaka     struct SW031_UV_SCALE_DOWN_TILE8x8_HOR_STRIDE {
298*437bfbebSnyanmisaka         RK_U32 uv_scale_down_hor_stride     : 20;
299*437bfbebSnyanmisaka         RK_U32                              : 12;
300*437bfbebSnyanmisaka     } reg031;
301*437bfbebSnyanmisaka 
302*437bfbebSnyanmisaka     /* NOTE: reg027 ~ reg032 are added in vdpu38x at rk3588 */
303*437bfbebSnyanmisaka     /* NOTE: timeout must be config in vdpu38x */
304*437bfbebSnyanmisaka     RK_U32  reg032_timeout_threshold;
305*437bfbebSnyanmisaka 
306*437bfbebSnyanmisaka     struct SW033_LINE_IRQ_CTRL {
307*437bfbebSnyanmisaka         RK_U32 dec_line_irq_step              : 12;
308*437bfbebSnyanmisaka         RK_U32 dec_line_offset_y_st           : 12;
309*437bfbebSnyanmisaka         RK_U32 buf_empty_timeout_threshold    : 8;
310*437bfbebSnyanmisaka     } reg033;
311*437bfbebSnyanmisaka 
312*437bfbebSnyanmisaka     /* 0x00000088 reg34 */
313*437bfbebSnyanmisaka     struct SW034_SCALE_DOWN_ROI_OFFSET {
314*437bfbebSnyanmisaka         RK_U32 scale_down_roi_st_offsetx    : 16;
315*437bfbebSnyanmisaka         RK_U32 scale_down_roi_st_offsety    : 16;
316*437bfbebSnyanmisaka     } reg034;
317*437bfbebSnyanmisaka 
318*437bfbebSnyanmisaka     /* 0x0000008c reg35 */
319*437bfbebSnyanmisaka     struct SW035_SCALE_DOWN_ROI_OUT_SIZE {
320*437bfbebSnyanmisaka         RK_U32 scale_down_roi_out_width     : 16;
321*437bfbebSnyanmisaka         RK_U32 scale_down_roi_out_height    : 16;
322*437bfbebSnyanmisaka     } reg035;
323*437bfbebSnyanmisaka 
324*437bfbebSnyanmisaka } Vdpu382RegCommon;
325*437bfbebSnyanmisaka 
326*437bfbebSnyanmisaka /* base: OFFSET_COMMON_ADDR_REGS */
327*437bfbebSnyanmisaka typedef struct Vdpu382RegCommonAddr_t {
328*437bfbebSnyanmisaka     /* offset 128 */
329*437bfbebSnyanmisaka     RK_U32  reg128_rlc_base;
330*437bfbebSnyanmisaka 
331*437bfbebSnyanmisaka     RK_U32  reg129_rlcwrite_base;
332*437bfbebSnyanmisaka 
333*437bfbebSnyanmisaka     RK_U32  reg130_decout_base;
334*437bfbebSnyanmisaka 
335*437bfbebSnyanmisaka     RK_U32  reg131_colmv_cur_base;
336*437bfbebSnyanmisaka 
337*437bfbebSnyanmisaka     RK_U32  reg132_error_ref_base;
338*437bfbebSnyanmisaka 
339*437bfbebSnyanmisaka     RK_U32  reg133_rcb_intra_base;
340*437bfbebSnyanmisaka 
341*437bfbebSnyanmisaka     RK_U32  reg134_rcb_transd_row_base;
342*437bfbebSnyanmisaka 
343*437bfbebSnyanmisaka     RK_U32  reg135_rcb_transd_col_base;
344*437bfbebSnyanmisaka 
345*437bfbebSnyanmisaka     RK_U32  reg136_rcb_streamd_row_base;
346*437bfbebSnyanmisaka 
347*437bfbebSnyanmisaka     RK_U32  reg137_rcb_inter_row_base;
348*437bfbebSnyanmisaka 
349*437bfbebSnyanmisaka     RK_U32  reg138_rcb_inter_col_base;
350*437bfbebSnyanmisaka 
351*437bfbebSnyanmisaka     RK_U32  reg139_rcb_dblk_base;
352*437bfbebSnyanmisaka 
353*437bfbebSnyanmisaka     RK_U32  reg140_rcb_sao_base;
354*437bfbebSnyanmisaka 
355*437bfbebSnyanmisaka     RK_U32  reg141_rcb_fbc_base;
356*437bfbebSnyanmisaka 
357*437bfbebSnyanmisaka     RK_U32  reg142_rcb_filter_col_base;
358*437bfbebSnyanmisaka 
359*437bfbebSnyanmisaka     RK_U32  reg143_rcb_base;
360*437bfbebSnyanmisaka } Vdpu382RegCommonAddr;
361*437bfbebSnyanmisaka 
362*437bfbebSnyanmisaka /* base: OFFSET_COMMON_ADDR_REGS */
363*437bfbebSnyanmisaka typedef struct Vdpu382RegIrqStatus_t {
364*437bfbebSnyanmisaka     struct SWREG224_STA_INT {
365*437bfbebSnyanmisaka         RK_U32      dec_irq         : 1;
366*437bfbebSnyanmisaka         RK_U32      dec_irq_raw     : 1;
367*437bfbebSnyanmisaka 
368*437bfbebSnyanmisaka         RK_U32      dec_rdy_sta     : 1;
369*437bfbebSnyanmisaka         RK_U32      dec_bus_sta     : 1;
370*437bfbebSnyanmisaka         RK_U32      dec_error_sta   : 1;
371*437bfbebSnyanmisaka         RK_U32      dec_timeout_sta : 1;
372*437bfbebSnyanmisaka         RK_U32      buf_empty_sta   : 1;
373*437bfbebSnyanmisaka         RK_U32      colmv_ref_error_sta : 1;
374*437bfbebSnyanmisaka         RK_U32      cabu_end_sta    : 1;
375*437bfbebSnyanmisaka 
376*437bfbebSnyanmisaka         RK_U32      softreset_rdy   : 1;
377*437bfbebSnyanmisaka 
378*437bfbebSnyanmisaka         RK_U32      dec_line_irq    : 1;
379*437bfbebSnyanmisaka         RK_U32      dec_line_irq_raw : 1;
380*437bfbebSnyanmisaka         RK_U32      ltb_pause_sta   : 1;
381*437bfbebSnyanmisaka         RK_U32      mmureset_rdy    : 1;
382*437bfbebSnyanmisaka         RK_U32      ltb_end_sta     : 1;
383*437bfbebSnyanmisaka 
384*437bfbebSnyanmisaka         RK_U32      reserve         : 17;
385*437bfbebSnyanmisaka     } reg224;
386*437bfbebSnyanmisaka 
387*437bfbebSnyanmisaka     struct SWREG225_STA_SLICE_BYTE_OFFSET {
388*437bfbebSnyanmisaka         RK_U32      strmd_slice_byte_offset : 32;
389*437bfbebSnyanmisaka     } reg225;
390*437bfbebSnyanmisaka 
391*437bfbebSnyanmisaka     struct SWREG226_STA_CABAC_ERROR_STATUS {
392*437bfbebSnyanmisaka         RK_U32      all_frame_error_flag    : 1;
393*437bfbebSnyanmisaka         RK_U32      strmd_detect_error_flag : 3;
394*437bfbebSnyanmisaka         RK_U32      strmd_error_status      : 28;
395*437bfbebSnyanmisaka     } reg226;
396*437bfbebSnyanmisaka 
397*437bfbebSnyanmisaka     struct SWREG227_STA_COLMV_ERROR_REF_PICIDX {
398*437bfbebSnyanmisaka         RK_U32      colmv_error_ref_picidx  : 4;
399*437bfbebSnyanmisaka         RK_U32      reserve                 : 28;
400*437bfbebSnyanmisaka     } reg227;
401*437bfbebSnyanmisaka 
402*437bfbebSnyanmisaka     struct SWREG228_STA_CABAC_ERROR_CTU_OFFSET {
403*437bfbebSnyanmisaka         RK_U32 cabac_error_ctu_offset_x     : 12;
404*437bfbebSnyanmisaka         RK_U32                              : 4;
405*437bfbebSnyanmisaka         RK_U32 cabac_error_ctu_offset_y     : 12;
406*437bfbebSnyanmisaka         RK_U32                              : 4;
407*437bfbebSnyanmisaka     } reg228;
408*437bfbebSnyanmisaka 
409*437bfbebSnyanmisaka     struct SWREG229_STA_AXI_WCH_FINISH_FLAG {
410*437bfbebSnyanmisaka         RK_U32      axi_wch_finish_flag     : 17;
411*437bfbebSnyanmisaka         RK_U32      reserved                : 15;
412*437bfbebSnyanmisaka     } reg229;
413*437bfbebSnyanmisaka 
414*437bfbebSnyanmisaka     struct SWREG230_STA_SLICE_DEC_NUM {
415*437bfbebSnyanmisaka         RK_U32      slicedec_num : 25;
416*437bfbebSnyanmisaka         RK_U32      reserve      : 7;
417*437bfbebSnyanmisaka     } reg230;
418*437bfbebSnyanmisaka 
419*437bfbebSnyanmisaka     struct SWREG231_STA_FRAME_ERROR_CTU_NUM {
420*437bfbebSnyanmisaka         RK_U32      frame_ctu_err_num : 32;
421*437bfbebSnyanmisaka     } reg231;
422*437bfbebSnyanmisaka 
423*437bfbebSnyanmisaka     struct SWREG232_STA_ERROR_PACKET_NUM {
424*437bfbebSnyanmisaka         RK_U32      packet_err_num  : 16;
425*437bfbebSnyanmisaka         RK_U32      reserve         : 16;
426*437bfbebSnyanmisaka     } reg232;
427*437bfbebSnyanmisaka 
428*437bfbebSnyanmisaka     struct SWREG233_STA_ERR_CTU_NUM_IN_RO {
429*437bfbebSnyanmisaka         RK_U32      error_ctu_num_in_roi : 24;
430*437bfbebSnyanmisaka         RK_U32      reserve              : 8;
431*437bfbebSnyanmisaka     } reg233;
432*437bfbebSnyanmisaka 
433*437bfbebSnyanmisaka     struct SWREG234_BUF_EMPTY_OFFSET {
434*437bfbebSnyanmisaka         RK_U32      coord_report_offset_x : 16;
435*437bfbebSnyanmisaka         RK_U32      coord_report_offset_y : 16;
436*437bfbebSnyanmisaka     } reg234;
437*437bfbebSnyanmisaka 
438*437bfbebSnyanmisaka     struct SWREG235_COORD_REPORT_OUTBUF_HEIGHT {
439*437bfbebSnyanmisaka         RK_U32      coord_report_output_height : 16;
440*437bfbebSnyanmisaka         RK_U32      reserve                    : 16;
441*437bfbebSnyanmisaka     } reg235;
442*437bfbebSnyanmisaka 
443*437bfbebSnyanmisaka     RK_U32  reserve_reg236_237[2];
444*437bfbebSnyanmisaka } Vdpu382RegIrqStatus;
445*437bfbebSnyanmisaka 
446*437bfbebSnyanmisaka typedef struct Vdpu382RegStatistic_t {
447*437bfbebSnyanmisaka     struct SWREG256_DEBUG_PERF_LATENCY_CTRL0 {
448*437bfbebSnyanmisaka         RK_U32      axi_perf_work_e     : 1;
449*437bfbebSnyanmisaka         RK_U32      axi_perf_clr_e      : 1;
450*437bfbebSnyanmisaka         RK_U32      reserve0            : 1;
451*437bfbebSnyanmisaka         RK_U32      axi_cnt_type        : 1;
452*437bfbebSnyanmisaka         RK_U32      rd_latency_id       : 4;
453*437bfbebSnyanmisaka         RK_U32      rd_latency_thr      : 12;
454*437bfbebSnyanmisaka         RK_U32      reserve1            : 12;
455*437bfbebSnyanmisaka     } reg256;
456*437bfbebSnyanmisaka 
457*437bfbebSnyanmisaka     struct SWREG257_DEBUG_PERF_LATENCY_CTRL1 {
458*437bfbebSnyanmisaka         RK_U32      addr_align_type     : 2;
459*437bfbebSnyanmisaka         RK_U32      ar_cnt_id_type      : 1;
460*437bfbebSnyanmisaka         RK_U32      aw_cnt_id_type      : 1;
461*437bfbebSnyanmisaka         RK_U32      ar_count_id         : 4;
462*437bfbebSnyanmisaka         RK_U32      aw_count_id         : 4;
463*437bfbebSnyanmisaka         RK_U32      rd_band_width_mode  : 1;
464*437bfbebSnyanmisaka         RK_U32      reserve             : 19;
465*437bfbebSnyanmisaka     } reg257;
466*437bfbebSnyanmisaka 
467*437bfbebSnyanmisaka     struct SWREG258_DEBUG_PERF_RD_MAX_LATENCY_NUM {
468*437bfbebSnyanmisaka         RK_U32      rd_max_latency_num  : 16;
469*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
470*437bfbebSnyanmisaka     } reg258;
471*437bfbebSnyanmisaka 
472*437bfbebSnyanmisaka     RK_U32          reg259_rd_latency_thr_num_ch0;
473*437bfbebSnyanmisaka     RK_U32          reg260_rd_latency_acc_sum;
474*437bfbebSnyanmisaka     RK_U32          reg261_perf_rd_axi_total_byte;
475*437bfbebSnyanmisaka     RK_U32          reg262_perf_wr_axi_total_byte;
476*437bfbebSnyanmisaka     RK_U32          reg263_perf_working_cnt;
477*437bfbebSnyanmisaka 
478*437bfbebSnyanmisaka     struct SWREG264_DEBUG_BUS_STATE {
479*437bfbebSnyanmisaka         RK_U32      bus_state_flag      : 25;
480*437bfbebSnyanmisaka         RK_U32      reserve             : 7;
481*437bfbebSnyanmisaka     } reg264;
482*437bfbebSnyanmisaka 
483*437bfbebSnyanmisaka     union {
484*437bfbebSnyanmisaka         struct {
485*437bfbebSnyanmisaka             RK_U32      perf_cnt0_sel               : 6;
486*437bfbebSnyanmisaka             RK_U32      reserve0                    : 2;
487*437bfbebSnyanmisaka             RK_U32      perf_cnt1_sel               : 6;
488*437bfbebSnyanmisaka             RK_U32      reserve1                    : 2;
489*437bfbebSnyanmisaka             RK_U32      perf_cnt2_sel               : 6;
490*437bfbebSnyanmisaka             RK_U32      reserve2                    : 10;
491*437bfbebSnyanmisaka         };
492*437bfbebSnyanmisaka 
493*437bfbebSnyanmisaka         RK_U32 link_perf_cnt0;
494*437bfbebSnyanmisaka     } reg265;
495*437bfbebSnyanmisaka 
496*437bfbebSnyanmisaka     RK_U32          reg266_perf_cnt0;
497*437bfbebSnyanmisaka     RK_U32          reg267_perf_cnt1;
498*437bfbebSnyanmisaka     RK_U32          reg268_perf_cnt2;
499*437bfbebSnyanmisaka 
500*437bfbebSnyanmisaka     RK_U32          reserve_reg269;
501*437bfbebSnyanmisaka 
502*437bfbebSnyanmisaka     struct SWREG270_DEBUG_QOS_CTRL {
503*437bfbebSnyanmisaka         RK_U32      bus2mc_buffer_qos_level     : 8;
504*437bfbebSnyanmisaka         RK_U32      reserve0                    : 8;
505*437bfbebSnyanmisaka         RK_U32      axi_wr_hurry_level          : 3;
506*437bfbebSnyanmisaka         RK_U32      reserve1                    : 1;
507*437bfbebSnyanmisaka         RK_U32      axi_wr_qos                  : 3;
508*437bfbebSnyanmisaka         RK_U32      reserve2                    : 1;
509*437bfbebSnyanmisaka         RK_U32      axi_rd_hurry_level          : 3;
510*437bfbebSnyanmisaka         RK_U32      reserve3                    : 1;
511*437bfbebSnyanmisaka         RK_U32      axi_rd_qos                  : 3;
512*437bfbebSnyanmisaka         RK_U32      reserve4                    : 1;
513*437bfbebSnyanmisaka     } reg270;
514*437bfbebSnyanmisaka 
515*437bfbebSnyanmisaka     RK_U32          reg271_wr_wait_cycle_qos;
516*437bfbebSnyanmisaka 
517*437bfbebSnyanmisaka     struct SWREG272_DEBUG_INT {
518*437bfbebSnyanmisaka         RK_U32      busidle_flag                : 1;
519*437bfbebSnyanmisaka         RK_U32      reserved                    : 4;
520*437bfbebSnyanmisaka         RK_U32      mmu_busidle_flag            : 1;
521*437bfbebSnyanmisaka         RK_U32      wr_tansfer_cnt              : 8;
522*437bfbebSnyanmisaka         RK_U32      reserved1                   : 2;
523*437bfbebSnyanmisaka         RK_U32      Sw_streamfifo_space2full    : 7;
524*437bfbebSnyanmisaka         RK_U32      reserved2                   : 1;
525*437bfbebSnyanmisaka         RK_U32      mmu_wr_transer_cnt          : 8;
526*437bfbebSnyanmisaka     } reg272;
527*437bfbebSnyanmisaka 
528*437bfbebSnyanmisaka     struct SWREG273 {
529*437bfbebSnyanmisaka         RK_U32      bus_status_flag             : 25;
530*437bfbebSnyanmisaka         RK_U32      reserve0                    : 6;
531*437bfbebSnyanmisaka         RK_U32      pps_no_ref_bframe_dec_r     : 1;
532*437bfbebSnyanmisaka     } reg273;
533*437bfbebSnyanmisaka 
534*437bfbebSnyanmisaka     RK_U16          reg274_y_min_value;
535*437bfbebSnyanmisaka     RK_U16          reg274_y_max_value;
536*437bfbebSnyanmisaka     RK_U16          reg275_u_min_value;
537*437bfbebSnyanmisaka     RK_U16          reg275_u_max_value;
538*437bfbebSnyanmisaka     RK_U16          reg276_v_min_value;
539*437bfbebSnyanmisaka     RK_U16          reg276_v_max_value;
540*437bfbebSnyanmisaka 
541*437bfbebSnyanmisaka     struct SWREG277_ERROR_SPREAD_NUM {
542*437bfbebSnyanmisaka         RK_U32 err_spread_cnt_sum           : 24;
543*437bfbebSnyanmisaka         RK_U32                              : 8;
544*437bfbebSnyanmisaka     } reg277;
545*437bfbebSnyanmisaka 
546*437bfbebSnyanmisaka     // RK_U32          reg277_err_spread_num;
547*437bfbebSnyanmisaka     // struct SWREG278_DEC_LINE_OFFSET_Y {
548*437bfbebSnyanmisaka     //     RK_U32      dec_line_offset_y   : 16;
549*437bfbebSnyanmisaka     //     RK_U32      reserve             : 16;
550*437bfbebSnyanmisaka     // } reg278;
551*437bfbebSnyanmisaka 
552*437bfbebSnyanmisaka } Vdpu382RegStatistic;
553*437bfbebSnyanmisaka 
554*437bfbebSnyanmisaka typedef struct vdpu382_rcb_info_t {
555*437bfbebSnyanmisaka     RK_S32              reg;
556*437bfbebSnyanmisaka     RK_S32              size;
557*437bfbebSnyanmisaka     RK_S32              offset;
558*437bfbebSnyanmisaka } Vdpu382RcbInfo;
559*437bfbebSnyanmisaka 
560*437bfbebSnyanmisaka #ifdef  __cplusplus
561*437bfbebSnyanmisaka extern "C" {
562*437bfbebSnyanmisaka #endif
563*437bfbebSnyanmisaka 
564*437bfbebSnyanmisaka RK_S32 vdpu382_get_rcb_buf_size(Vdpu382RcbInfo *info, RK_S32 width, RK_S32 height);
565*437bfbebSnyanmisaka void vdpu382_setup_rcb(Vdpu382RegCommonAddr *reg, MppDev dev, MppBuffer buf, Vdpu382RcbInfo *info);
566*437bfbebSnyanmisaka RK_S32 vdpu382_compare_rcb_size(const void *a, const void *b);
567*437bfbebSnyanmisaka RK_S32 vdpu382_set_rcbinfo(MppDev dev, Vdpu382RcbInfo *rcb_info);
568*437bfbebSnyanmisaka void vdpu382_setup_statistic(Vdpu382RegCommon *com, Vdpu382RegStatistic *sta);
569*437bfbebSnyanmisaka void vdpu382_afbc_align_calc(MppBufSlots slots, MppFrame frame, RK_U32 expand);
570*437bfbebSnyanmisaka void vdpu382_setup_down_scale(MppFrame frame, MppDev dev, Vdpu382RegCommon *com);
571*437bfbebSnyanmisaka RK_U32 vdpu382_get_colmv_size(RK_U32 width, RK_U32 height, RK_U32 ctu_size,
572*437bfbebSnyanmisaka                               RK_U32 colmv_bytes, RK_U32 colmv_size, RK_U32 compress);
573*437bfbebSnyanmisaka 
574*437bfbebSnyanmisaka #ifdef  __cplusplus
575*437bfbebSnyanmisaka }
576*437bfbebSnyanmisaka #endif
577*437bfbebSnyanmisaka 
578*437bfbebSnyanmisaka #endif /* __VDPU382_COM_H__ */
579