xref: /rockchip-linux_mpp/mpp/hal/rkdec/inc/vdpu34x_vp9d.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2020 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 __HAL_VDPU34X_VP9D_H__
18*437bfbebSnyanmisaka #define __HAL_VDPU34X_VP9D_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "rk_type.h"
21*437bfbebSnyanmisaka #include "vdpu34x_com.h"
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka typedef struct Vdpu34xRegVp9dParam_t {
25*437bfbebSnyanmisaka     struct SWREG64_VP9_SET {
26*437bfbebSnyanmisaka         RK_U32      cprheader_offset    : 16;
27*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
28*437bfbebSnyanmisaka     } reg64;
29*437bfbebSnyanmisaka 
30*437bfbebSnyanmisaka     struct SWREG65_CUR_POC {
31*437bfbebSnyanmisaka         RK_U32      cur_poc : 32;
32*437bfbebSnyanmisaka     } reg65;
33*437bfbebSnyanmisaka 
34*437bfbebSnyanmisaka     RK_U32 reg66;
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka     struct SWREG67_74_VP9_SEGID_GRP {
37*437bfbebSnyanmisaka         RK_U32      segid_abs_delta                 : 1;
38*437bfbebSnyanmisaka         RK_U32      segid_frame_qp_delta_en         : 1;
39*437bfbebSnyanmisaka         RK_U32      segid_frame_qp_delta            : 9;
40*437bfbebSnyanmisaka         RK_U32      segid_frame_loopfitler_value_en : 1;
41*437bfbebSnyanmisaka         RK_U32      segid_frame_loopfilter_value    : 7;
42*437bfbebSnyanmisaka         RK_U32      segid_referinfo_en              : 1;
43*437bfbebSnyanmisaka         RK_U32      segid_referinfo                 : 2;
44*437bfbebSnyanmisaka         RK_U32      segid_frame_skip_en             : 1;
45*437bfbebSnyanmisaka         RK_U32      reserve                         : 9;
46*437bfbebSnyanmisaka     } reg67_74[8];
47*437bfbebSnyanmisaka 
48*437bfbebSnyanmisaka     struct SWREG75_VP9_INFO_LASTFRAME {
49*437bfbebSnyanmisaka         RK_U32      mode_deltas_lastframe           : 14;
50*437bfbebSnyanmisaka         RK_U32      vp9_segment_id_clear            : 1;
51*437bfbebSnyanmisaka         RK_U32      vp9_segment_id_update           : 1;
52*437bfbebSnyanmisaka         RK_U32      segmentation_enable_lstframe    : 1;
53*437bfbebSnyanmisaka         RK_U32      last_show_frame                 : 1;
54*437bfbebSnyanmisaka         RK_U32      last_intra_only                 : 1;
55*437bfbebSnyanmisaka         RK_U32      last_widthheight_eqcur          : 1;
56*437bfbebSnyanmisaka         RK_U32      color_space_lastkeyframe        : 3;
57*437bfbebSnyanmisaka         RK_U32      reserve1                        : 9;
58*437bfbebSnyanmisaka     } reg75;
59*437bfbebSnyanmisaka 
60*437bfbebSnyanmisaka     struct SWREG76_VP9_CPRHEADER_CONFIG {
61*437bfbebSnyanmisaka         RK_U32      tx_mode                     : 3;
62*437bfbebSnyanmisaka         RK_U32      frame_reference_mode        : 2;
63*437bfbebSnyanmisaka         RK_U32      reserve                     : 27;
64*437bfbebSnyanmisaka     } reg76;
65*437bfbebSnyanmisaka 
66*437bfbebSnyanmisaka     struct SWREG77_VP9_INTERCMD_NUM {
67*437bfbebSnyanmisaka         RK_U32      intercmd_num        : 24;
68*437bfbebSnyanmisaka         RK_U32      reserve             : 8;
69*437bfbebSnyanmisaka     } reg77;
70*437bfbebSnyanmisaka 
71*437bfbebSnyanmisaka     struct SWREG78_VP9_LASTTILE_SIZE {
72*437bfbebSnyanmisaka         RK_U32      lasttile_size       : 24;
73*437bfbebSnyanmisaka         RK_U32      reserve             : 8;
74*437bfbebSnyanmisaka     } reg78;
75*437bfbebSnyanmisaka 
76*437bfbebSnyanmisaka     struct SWREG79_VP9_LASTF_Y_HOR_VIRSTRIDE {
77*437bfbebSnyanmisaka         RK_U32      lastfy_hor_virstride        : 16;
78*437bfbebSnyanmisaka         RK_U32      reserve                     : 16;
79*437bfbebSnyanmisaka     } reg79;
80*437bfbebSnyanmisaka 
81*437bfbebSnyanmisaka     struct SWREG80_VP9_LASTF_UV_HOR_VIRSTRIDE {
82*437bfbebSnyanmisaka         RK_U32      lastfuv_hor_virstride       : 16;
83*437bfbebSnyanmisaka         RK_U32      reserve                     : 16;
84*437bfbebSnyanmisaka     } reg80;
85*437bfbebSnyanmisaka 
86*437bfbebSnyanmisaka     struct SWREG81_VP9_GOLDENF_Y_HOR_VIRSTRIDE {
87*437bfbebSnyanmisaka         RK_U32      goldenfy_hor_virstride      : 16;
88*437bfbebSnyanmisaka         RK_U32      reserve                     : 16;
89*437bfbebSnyanmisaka     } reg81;
90*437bfbebSnyanmisaka 
91*437bfbebSnyanmisaka     struct SWREG82_VP9_GOLDENF_UV_HOR_VIRSTRIDE {
92*437bfbebSnyanmisaka         RK_U32      goldenfuv_hor_virstride     : 16;
93*437bfbebSnyanmisaka         RK_U32      reserve                     : 16;
94*437bfbebSnyanmisaka     } reg82;
95*437bfbebSnyanmisaka 
96*437bfbebSnyanmisaka     struct SWREG83_VP9_ALTREFF_Y_HOR_VIRSTRIDE {
97*437bfbebSnyanmisaka         RK_U32      altreffy_hor_virstride     : 16;
98*437bfbebSnyanmisaka         RK_U32      reserve                     : 16;
99*437bfbebSnyanmisaka     } reg83;
100*437bfbebSnyanmisaka 
101*437bfbebSnyanmisaka     struct SWREG84_VP9_ALTREFF_UV_HOR_VIRSTRIDE {
102*437bfbebSnyanmisaka         RK_U32      altreffuv_hor_virstride     : 16;
103*437bfbebSnyanmisaka         RK_U32      reserve                     : 16;
104*437bfbebSnyanmisaka     } reg84;
105*437bfbebSnyanmisaka 
106*437bfbebSnyanmisaka     struct SWREG85_VP9_LASTF_Y_VIRSTRIDE {
107*437bfbebSnyanmisaka         RK_U32      lastfy_virstride         : 28;
108*437bfbebSnyanmisaka         RK_U32      reserve                  : 4;
109*437bfbebSnyanmisaka     } reg85;
110*437bfbebSnyanmisaka 
111*437bfbebSnyanmisaka     struct SWREG86_VP9_GOLDEN_Y_VIRSTRIDE {
112*437bfbebSnyanmisaka         RK_U32      goldeny_virstride       : 28;
113*437bfbebSnyanmisaka         RK_U32      reserve                 : 4;
114*437bfbebSnyanmisaka     } reg86;
115*437bfbebSnyanmisaka 
116*437bfbebSnyanmisaka     struct SWREG87_VP9_ALTREF_Y_VIRSTRIDE {
117*437bfbebSnyanmisaka         RK_U32      altrefy_virstride       : 28;
118*437bfbebSnyanmisaka         RK_U32      reserve                 : 4;
119*437bfbebSnyanmisaka     } reg87;
120*437bfbebSnyanmisaka 
121*437bfbebSnyanmisaka     struct SWREG88_VP9_LREF_HOR_SCALE {
122*437bfbebSnyanmisaka         RK_U32      lref_hor_scale          : 16;
123*437bfbebSnyanmisaka         RK_U32      reserve                 : 16;
124*437bfbebSnyanmisaka     } reg88;
125*437bfbebSnyanmisaka 
126*437bfbebSnyanmisaka     struct SWREG89_VP9_LREF_VER_SCALE {
127*437bfbebSnyanmisaka         RK_U32      lref_ver_scale          : 16;
128*437bfbebSnyanmisaka         RK_U32      reserve                 : 16;
129*437bfbebSnyanmisaka     } reg89;
130*437bfbebSnyanmisaka 
131*437bfbebSnyanmisaka     struct SWREG90_VP9_GREF_HOR_SCALE {
132*437bfbebSnyanmisaka         RK_U32      gref_hor_scale          : 16;
133*437bfbebSnyanmisaka         RK_U32      reserve                 : 16;
134*437bfbebSnyanmisaka     } reg90;
135*437bfbebSnyanmisaka 
136*437bfbebSnyanmisaka     struct SWREG91_VP9_GREF_VER_SCALE {
137*437bfbebSnyanmisaka         RK_U32      gref_ver_scale          : 16;
138*437bfbebSnyanmisaka         RK_U32      reserve                 : 16;
139*437bfbebSnyanmisaka     } reg91;
140*437bfbebSnyanmisaka 
141*437bfbebSnyanmisaka     struct SWREG92_VP9_AREF_HOR_SCALE {
142*437bfbebSnyanmisaka         RK_U32      aref_hor_scale          : 16;
143*437bfbebSnyanmisaka         RK_U32      reserve                 : 16;
144*437bfbebSnyanmisaka     } reg92;
145*437bfbebSnyanmisaka 
146*437bfbebSnyanmisaka     struct SWREG93_VP9_AREF_VER_SCALE {
147*437bfbebSnyanmisaka         RK_U32      aref_ver_scale          : 16;
148*437bfbebSnyanmisaka         RK_U32      reserve                 : 16;
149*437bfbebSnyanmisaka     } reg93;
150*437bfbebSnyanmisaka 
151*437bfbebSnyanmisaka     struct SWREG94_VP9_REF_DELTAS_LASTFRAME {
152*437bfbebSnyanmisaka         RK_U32      ref_deltas_lastframe    : 28;
153*437bfbebSnyanmisaka         RK_U32      reserve                 : 4;
154*437bfbebSnyanmisaka     } reg94;
155*437bfbebSnyanmisaka 
156*437bfbebSnyanmisaka     struct SWREG95_LAST_POC {
157*437bfbebSnyanmisaka         RK_U32      last_poc : 32;
158*437bfbebSnyanmisaka     } reg95;
159*437bfbebSnyanmisaka 
160*437bfbebSnyanmisaka     struct SWREG96_GOLDEN_POC {
161*437bfbebSnyanmisaka         RK_U32      golden_poc : 32;
162*437bfbebSnyanmisaka     } reg96;
163*437bfbebSnyanmisaka 
164*437bfbebSnyanmisaka     struct SWREG97_ALTREF_POC {
165*437bfbebSnyanmisaka         RK_U32      altref_poc : 32;
166*437bfbebSnyanmisaka     } reg97;
167*437bfbebSnyanmisaka 
168*437bfbebSnyanmisaka     struct SWREG98_COF_REF_POC {
169*437bfbebSnyanmisaka         RK_U32      col_ref_poc : 32;
170*437bfbebSnyanmisaka     } reg98;
171*437bfbebSnyanmisaka 
172*437bfbebSnyanmisaka     struct SWREG99_PROB_REF_POC {
173*437bfbebSnyanmisaka         RK_U32      prob_ref_poc : 32;
174*437bfbebSnyanmisaka     } reg99;
175*437bfbebSnyanmisaka 
176*437bfbebSnyanmisaka     struct SWREG100_SEGID_REF_POC {
177*437bfbebSnyanmisaka         RK_U32      segid_ref_poc : 32;
178*437bfbebSnyanmisaka     } reg100;
179*437bfbebSnyanmisaka 
180*437bfbebSnyanmisaka     RK_U32  reg101_102_no_use[2];
181*437bfbebSnyanmisaka 
182*437bfbebSnyanmisaka     struct SWREG103_VP9_PROB_EN {
183*437bfbebSnyanmisaka         RK_U32      reserve                 : 20;
184*437bfbebSnyanmisaka         RK_U32      prob_update_en          : 1;
185*437bfbebSnyanmisaka         RK_U32      refresh_en              : 1;
186*437bfbebSnyanmisaka         RK_U32      prob_save_en            : 1;
187*437bfbebSnyanmisaka         RK_U32      intra_only_flag         : 1;
188*437bfbebSnyanmisaka 
189*437bfbebSnyanmisaka         RK_U32      txfmmode_rfsh_en        : 1;
190*437bfbebSnyanmisaka         RK_U32      ref_mode_rfsh_en        : 1;
191*437bfbebSnyanmisaka         RK_U32      single_ref_rfsh_en      : 1;
192*437bfbebSnyanmisaka         RK_U32      comp_ref_rfsh_en        : 1;
193*437bfbebSnyanmisaka 
194*437bfbebSnyanmisaka         RK_U32      interp_filter_switch_en : 1;
195*437bfbebSnyanmisaka         RK_U32      allow_high_precision_mv : 1;
196*437bfbebSnyanmisaka         RK_U32      last_key_frame_flag     : 1;
197*437bfbebSnyanmisaka         RK_U32      inter_coef_rfsh_flag    : 1;
198*437bfbebSnyanmisaka     } reg103;
199*437bfbebSnyanmisaka 
200*437bfbebSnyanmisaka     RK_U32  reg104_no_use;
201*437bfbebSnyanmisaka 
202*437bfbebSnyanmisaka     struct SWREG105_VP9CNT_UPD_EN_AVS2_HEADLEN {
203*437bfbebSnyanmisaka         RK_U32      avs2_head_len       : 4;
204*437bfbebSnyanmisaka         RK_U32      count_update_en     : 1;
205*437bfbebSnyanmisaka         RK_U32      reserve             : 27;
206*437bfbebSnyanmisaka     } reg105;
207*437bfbebSnyanmisaka 
208*437bfbebSnyanmisaka     struct SWREG106_VP9_FRAME_WIDTH_LAST {
209*437bfbebSnyanmisaka         RK_U32      framewidth_last     : 16;
210*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
211*437bfbebSnyanmisaka     } reg106;
212*437bfbebSnyanmisaka 
213*437bfbebSnyanmisaka     struct SWREG107_VP9_FRAME_HEIGHT_LAST {
214*437bfbebSnyanmisaka         RK_U32      frameheight_last    : 16;
215*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
216*437bfbebSnyanmisaka     } reg107;
217*437bfbebSnyanmisaka 
218*437bfbebSnyanmisaka     struct SWREG108_VP9_FRAME_WIDTH_GOLDEN {
219*437bfbebSnyanmisaka         RK_U32      framewidth_golden   : 16;
220*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
221*437bfbebSnyanmisaka     } reg108;
222*437bfbebSnyanmisaka 
223*437bfbebSnyanmisaka     struct SWREG109_VP9_FRAME_HEIGHT_GOLDEN {
224*437bfbebSnyanmisaka         RK_U32      frameheight_golden  : 16;
225*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
226*437bfbebSnyanmisaka     } reg109;
227*437bfbebSnyanmisaka 
228*437bfbebSnyanmisaka     struct SWREG110_VP9_FRAME_WIDTH_ALTREF {
229*437bfbebSnyanmisaka         RK_U32      framewidth_alfter   : 16;
230*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
231*437bfbebSnyanmisaka     } reg110;
232*437bfbebSnyanmisaka 
233*437bfbebSnyanmisaka     struct SWREG111_VP9_FRAME_HEIGHT_ALTREF {
234*437bfbebSnyanmisaka         RK_U32      frameheight_alfter  : 16;
235*437bfbebSnyanmisaka         RK_U32      reserve             : 16;
236*437bfbebSnyanmisaka     } reg111;
237*437bfbebSnyanmisaka 
238*437bfbebSnyanmisaka     struct SWREG112_ERROR_REF_INFO {
239*437bfbebSnyanmisaka         RK_U32      ref_error_field         : 1;
240*437bfbebSnyanmisaka         RK_U32      ref_error_topfield      : 1;
241*437bfbebSnyanmisaka         RK_U32      ref_error_topfield_used : 1;
242*437bfbebSnyanmisaka         RK_U32      ref_error_botfield_used : 1;
243*437bfbebSnyanmisaka         RK_U32      reserve                 : 28;
244*437bfbebSnyanmisaka     } reg112;
245*437bfbebSnyanmisaka 
246*437bfbebSnyanmisaka } Vdpu34xRegVp9dParam;
247*437bfbebSnyanmisaka 
248*437bfbebSnyanmisaka typedef struct Vdpu34xRegVp9dAddr_t {
249*437bfbebSnyanmisaka 
250*437bfbebSnyanmisaka     RK_U32  reg160_delta_prob_base;
251*437bfbebSnyanmisaka 
252*437bfbebSnyanmisaka     RK_U32  reg161_pps_base;
253*437bfbebSnyanmisaka 
254*437bfbebSnyanmisaka     RK_U32  reg162_last_prob_base;
255*437bfbebSnyanmisaka 
256*437bfbebSnyanmisaka     RK_U32  reg163_rps_base;
257*437bfbebSnyanmisaka 
258*437bfbebSnyanmisaka     RK_U32  reg164_ref_last_base;
259*437bfbebSnyanmisaka 
260*437bfbebSnyanmisaka     RK_U32  reg165_ref_golden_base;
261*437bfbebSnyanmisaka 
262*437bfbebSnyanmisaka     RK_U32  reg166_ref_alfter_base;
263*437bfbebSnyanmisaka 
264*437bfbebSnyanmisaka     RK_U32  reg167_count_prob_base;
265*437bfbebSnyanmisaka 
266*437bfbebSnyanmisaka     RK_U32  reg168_segidlast_base;
267*437bfbebSnyanmisaka 
268*437bfbebSnyanmisaka     RK_U32  reg169_segidcur_base;
269*437bfbebSnyanmisaka 
270*437bfbebSnyanmisaka     RK_U32  reg170_ref_colmv_base;
271*437bfbebSnyanmisaka 
272*437bfbebSnyanmisaka     RK_U32  reg171_intercmd_base;
273*437bfbebSnyanmisaka 
274*437bfbebSnyanmisaka     RK_U32  reg172_update_prob_wr_base;
275*437bfbebSnyanmisaka 
276*437bfbebSnyanmisaka     RK_U32  reg173_179_no_use[7];
277*437bfbebSnyanmisaka 
278*437bfbebSnyanmisaka     RK_U32  reg180_scanlist_base;
279*437bfbebSnyanmisaka 
280*437bfbebSnyanmisaka     RK_U32  reg181_196_ref_colmv_base[16];
281*437bfbebSnyanmisaka 
282*437bfbebSnyanmisaka     RK_U32  reg197_cabactbl_base;
283*437bfbebSnyanmisaka } Vdpu34xRegVp9dAddr;
284*437bfbebSnyanmisaka 
285*437bfbebSnyanmisaka typedef struct Vdpu34xVp9dRegSet_t {
286*437bfbebSnyanmisaka     Vdpu34xRegCommon        common;
287*437bfbebSnyanmisaka     Vdpu34xRegVp9dParam     vp9d_param;
288*437bfbebSnyanmisaka     Vdpu34xRegCommonAddr    common_addr;
289*437bfbebSnyanmisaka     Vdpu34xRegVp9dAddr      vp9d_addr;
290*437bfbebSnyanmisaka     Vdpu34xRegIrqStatus     irq_status;
291*437bfbebSnyanmisaka     Vdpu34xRegStatistic     statistic;
292*437bfbebSnyanmisaka } Vdpu34xVp9dRegSet;
293*437bfbebSnyanmisaka 
294*437bfbebSnyanmisaka #endif /* __HAL_VDPU34X_VP9D_H__ */