xref: /rockchip-linux_mpp/mpp/hal/rkdec/inc/vdpu382_h264d.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_H264D_H__
18*437bfbebSnyanmisaka #define __VDPU382_H264D_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "vdpu382_com.h"
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka /* base: OFFSET_CODEC_PARAMS_REGS */
23*437bfbebSnyanmisaka typedef struct Vdpu382RegH264dParam_t {
24*437bfbebSnyanmisaka     struct SWREG64_H26X_SET {
25*437bfbebSnyanmisaka         RK_U32      h26x_frame_orslice      : 1;
26*437bfbebSnyanmisaka         RK_U32      h26x_rps_mode           : 1;
27*437bfbebSnyanmisaka         RK_U32      h26x_stream_mode        : 1;
28*437bfbebSnyanmisaka         RK_U32      h26x_stream_lastpacket  : 1;
29*437bfbebSnyanmisaka         RK_U32      h264_firstslice_flag    : 1;
30*437bfbebSnyanmisaka         RK_U32      reserve                 : 27;
31*437bfbebSnyanmisaka     } reg64;
32*437bfbebSnyanmisaka 
33*437bfbebSnyanmisaka     struct SWREG65_CUR_POC {
34*437bfbebSnyanmisaka         RK_U32      cur_top_poc : 32;
35*437bfbebSnyanmisaka     } reg65;
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka     struct SWREG66_H264_CUR_POC1 {
38*437bfbebSnyanmisaka         RK_U32      cur_bot_poc : 32;
39*437bfbebSnyanmisaka     } reg66;
40*437bfbebSnyanmisaka 
41*437bfbebSnyanmisaka     RK_U32  reg67_98_ref_poc[32];
42*437bfbebSnyanmisaka 
43*437bfbebSnyanmisaka     struct SWREG99_H264_REG0_3_INFO {
44*437bfbebSnyanmisaka 
45*437bfbebSnyanmisaka         RK_U32      ref0_field              : 1;
46*437bfbebSnyanmisaka         RK_U32      ref0_topfield_used      : 1;
47*437bfbebSnyanmisaka         RK_U32      ref0_botfield_used      : 1;
48*437bfbebSnyanmisaka         RK_U32      ref0_colmv_use_flag     : 1;
49*437bfbebSnyanmisaka         RK_U32      ref0_reserve            : 4;
50*437bfbebSnyanmisaka 
51*437bfbebSnyanmisaka         RK_U32      ref1_field              : 1;
52*437bfbebSnyanmisaka         RK_U32      ref1_topfield_used      : 1;
53*437bfbebSnyanmisaka         RK_U32      ref1_botfield_used      : 1;
54*437bfbebSnyanmisaka         RK_U32      ref1_colmv_use_flag     : 1;
55*437bfbebSnyanmisaka         RK_U32      ref1_reserve            : 4;
56*437bfbebSnyanmisaka 
57*437bfbebSnyanmisaka         RK_U32      ref2_field              : 1;
58*437bfbebSnyanmisaka         RK_U32      ref2_topfield_used      : 1;
59*437bfbebSnyanmisaka         RK_U32      ref2_botfield_used      : 1;
60*437bfbebSnyanmisaka         RK_U32      ref2_colmv_use_flag     : 1;
61*437bfbebSnyanmisaka         RK_U32      ref2_reserve            : 4;
62*437bfbebSnyanmisaka 
63*437bfbebSnyanmisaka         RK_U32      ref3_field              : 1;
64*437bfbebSnyanmisaka         RK_U32      ref3_topfield_used      : 1;
65*437bfbebSnyanmisaka         RK_U32      ref3_botfield_used      : 1;
66*437bfbebSnyanmisaka         RK_U32      ref3_colmv_use_flag     : 1;
67*437bfbebSnyanmisaka         RK_U32      ref3_reserve            : 4;
68*437bfbebSnyanmisaka     } reg99;
69*437bfbebSnyanmisaka 
70*437bfbebSnyanmisaka     struct SWREG100_H264_REG4_7_INFO {
71*437bfbebSnyanmisaka 
72*437bfbebSnyanmisaka         RK_U32      ref4_field              : 1;
73*437bfbebSnyanmisaka         RK_U32      ref4_topfield_used      : 1;
74*437bfbebSnyanmisaka         RK_U32      ref4_botfield_used      : 1;
75*437bfbebSnyanmisaka         RK_U32      ref4_colmv_use_flag     : 1;
76*437bfbebSnyanmisaka         RK_U32      ref4_reserve            : 4;
77*437bfbebSnyanmisaka 
78*437bfbebSnyanmisaka         RK_U32      ref5_field              : 1;
79*437bfbebSnyanmisaka         RK_U32      ref5_topfield_used      : 1;
80*437bfbebSnyanmisaka         RK_U32      ref5_botfield_used      : 1;
81*437bfbebSnyanmisaka         RK_U32      ref5_colmv_use_flag     : 1;
82*437bfbebSnyanmisaka         RK_U32      ref5_reserve            : 4;
83*437bfbebSnyanmisaka 
84*437bfbebSnyanmisaka         RK_U32      ref6_field              : 1;
85*437bfbebSnyanmisaka         RK_U32      ref6_topfield_used      : 1;
86*437bfbebSnyanmisaka         RK_U32      ref6_botfield_used      : 1;
87*437bfbebSnyanmisaka         RK_U32      ref6_colmv_use_flag     : 1;
88*437bfbebSnyanmisaka         RK_U32      ref6_reserve            : 4;
89*437bfbebSnyanmisaka 
90*437bfbebSnyanmisaka         RK_U32      ref7_field              : 1;
91*437bfbebSnyanmisaka         RK_U32      ref7_topfield_used      : 1;
92*437bfbebSnyanmisaka         RK_U32      ref7_botfield_used      : 1;
93*437bfbebSnyanmisaka         RK_U32      ref7_colmv_use_flag     : 1;
94*437bfbebSnyanmisaka         RK_U32      ref7_reserve            : 4;
95*437bfbebSnyanmisaka     } reg100;
96*437bfbebSnyanmisaka 
97*437bfbebSnyanmisaka     struct SWREG101_H264_REG8_11_INFO {
98*437bfbebSnyanmisaka 
99*437bfbebSnyanmisaka         RK_U32      ref8_field              : 1;
100*437bfbebSnyanmisaka         RK_U32      ref8_topfield_used      : 1;
101*437bfbebSnyanmisaka         RK_U32      ref8_botfield_used      : 1;
102*437bfbebSnyanmisaka         RK_U32      ref8_colmv_use_flag     : 1;
103*437bfbebSnyanmisaka         RK_U32      ref8_reserve            : 4;
104*437bfbebSnyanmisaka 
105*437bfbebSnyanmisaka         RK_U32      ref9_field              : 1;
106*437bfbebSnyanmisaka         RK_U32      ref9_topfield_used      : 1;
107*437bfbebSnyanmisaka         RK_U32      ref9_botfield_used      : 1;
108*437bfbebSnyanmisaka         RK_U32      ref9_colmv_use_flag     : 1;
109*437bfbebSnyanmisaka         RK_U32      ref9_reserve            : 4;
110*437bfbebSnyanmisaka 
111*437bfbebSnyanmisaka         RK_U32      ref10_field             : 1;
112*437bfbebSnyanmisaka         RK_U32      ref10_topfield_used     : 1;
113*437bfbebSnyanmisaka         RK_U32      ref10_botfield_used     : 1;
114*437bfbebSnyanmisaka         RK_U32      ref10_colmv_use_flag    : 1;
115*437bfbebSnyanmisaka         RK_U32      ref10_reserve           : 4;
116*437bfbebSnyanmisaka 
117*437bfbebSnyanmisaka         RK_U32      ref11_field             : 1;
118*437bfbebSnyanmisaka         RK_U32      ref11_topfield_used     : 1;
119*437bfbebSnyanmisaka         RK_U32      ref11_botfield_used     : 1;
120*437bfbebSnyanmisaka         RK_U32      ref11_colmv_use_flag    : 1;
121*437bfbebSnyanmisaka         RK_U32      ref11_reserve           : 4;
122*437bfbebSnyanmisaka     } reg101;
123*437bfbebSnyanmisaka 
124*437bfbebSnyanmisaka     struct SWREG102_H264_REG12_15_INFO {
125*437bfbebSnyanmisaka 
126*437bfbebSnyanmisaka         RK_U32      ref12_field             : 1;
127*437bfbebSnyanmisaka         RK_U32      ref12_topfield_used     : 1;
128*437bfbebSnyanmisaka         RK_U32      ref12_botfield_used     : 1;
129*437bfbebSnyanmisaka         RK_U32      ref12_colmv_use_flag    : 1;
130*437bfbebSnyanmisaka         RK_U32      ref12_reserve           : 4;
131*437bfbebSnyanmisaka 
132*437bfbebSnyanmisaka         RK_U32      ref13_field             : 1;
133*437bfbebSnyanmisaka         RK_U32      ref13_topfield_used     : 1;
134*437bfbebSnyanmisaka         RK_U32      ref13_botfield_used     : 1;
135*437bfbebSnyanmisaka         RK_U32      ref13_colmv_use_flag    : 1;
136*437bfbebSnyanmisaka         RK_U32      ref13_reserve           : 4;
137*437bfbebSnyanmisaka 
138*437bfbebSnyanmisaka         RK_U32      ref14_field             : 1;
139*437bfbebSnyanmisaka         RK_U32      ref14_topfield_used     : 1;
140*437bfbebSnyanmisaka         RK_U32      ref14_botfield_used     : 1;
141*437bfbebSnyanmisaka         RK_U32      ref14_colmv_use_flag    : 1;
142*437bfbebSnyanmisaka         RK_U32      ref14_reserve           : 4;
143*437bfbebSnyanmisaka 
144*437bfbebSnyanmisaka         RK_U32      ref15_field             : 1;
145*437bfbebSnyanmisaka         RK_U32      ref15_topfield_used     : 1;
146*437bfbebSnyanmisaka         RK_U32      ref15_botfield_used     : 1;
147*437bfbebSnyanmisaka         RK_U32      ref15_colmv_use_flag    : 1;
148*437bfbebSnyanmisaka         RK_U32      ref15_reserve           : 4;
149*437bfbebSnyanmisaka     } reg102;
150*437bfbebSnyanmisaka 
151*437bfbebSnyanmisaka     struct SWREG103_111_NO_USE_REGS {
152*437bfbebSnyanmisaka         RK_U32  reserve;
153*437bfbebSnyanmisaka     } no_use_regs[9];
154*437bfbebSnyanmisaka 
155*437bfbebSnyanmisaka     struct SWREG112_ERROR_REF_INFO {
156*437bfbebSnyanmisaka         RK_U32      avs2_ref_error_field        : 1;
157*437bfbebSnyanmisaka         RK_U32      avs2_ref_error_topfield     : 1;
158*437bfbebSnyanmisaka         RK_U32      ref_error_topfield_used     : 1;
159*437bfbebSnyanmisaka         RK_U32      ref_error_botfield_used     : 1;
160*437bfbebSnyanmisaka         RK_U32      reserve                     : 28;
161*437bfbebSnyanmisaka     } reg112;
162*437bfbebSnyanmisaka } Vdpu382RegH264dParam;
163*437bfbebSnyanmisaka 
164*437bfbebSnyanmisaka /* base: OFFSET_CODEC_ADDR_REGS */
165*437bfbebSnyanmisaka typedef struct Vdpu382RegH264dAddr_t {
166*437bfbebSnyanmisaka     /* SWREG160 */
167*437bfbebSnyanmisaka     RK_U32  reg160_no_use;
168*437bfbebSnyanmisaka 
169*437bfbebSnyanmisaka     /* SWREG161 */
170*437bfbebSnyanmisaka     RK_U32  pps_base;
171*437bfbebSnyanmisaka 
172*437bfbebSnyanmisaka     /* SWREG162 */
173*437bfbebSnyanmisaka     RK_U32  reg162_no_use;
174*437bfbebSnyanmisaka 
175*437bfbebSnyanmisaka     /* SWREG163 */
176*437bfbebSnyanmisaka     RK_U32  rps_base;
177*437bfbebSnyanmisaka 
178*437bfbebSnyanmisaka     /* SWREG164~179 */
179*437bfbebSnyanmisaka     RK_U32  ref_base[16];
180*437bfbebSnyanmisaka 
181*437bfbebSnyanmisaka     /* SWREG180 */
182*437bfbebSnyanmisaka     RK_U32  scanlist_addr;
183*437bfbebSnyanmisaka 
184*437bfbebSnyanmisaka     /* SWREG181~196 */
185*437bfbebSnyanmisaka     RK_U32  colmv_base[16];
186*437bfbebSnyanmisaka 
187*437bfbebSnyanmisaka     /* SWREG197 */
188*437bfbebSnyanmisaka     RK_U32  cabactbl_base;
189*437bfbebSnyanmisaka 
190*437bfbebSnyanmisaka     /* SWREG198*/
191*437bfbebSnyanmisaka     RK_U32  reg198_scale_down_luma_base;
192*437bfbebSnyanmisaka 
193*437bfbebSnyanmisaka     /* SWREG199*/
194*437bfbebSnyanmisaka     RK_U32  reg199_scale_down_chorme_base;
195*437bfbebSnyanmisaka 
196*437bfbebSnyanmisaka } Vdpu382RegH264dAddr;
197*437bfbebSnyanmisaka 
198*437bfbebSnyanmisaka typedef struct Vdpu382H264dHighPoc_t {
199*437bfbebSnyanmisaka     /* SWREG200 */
200*437bfbebSnyanmisaka     struct SWREG200_REF0_7_POC_HIGHBIT {
201*437bfbebSnyanmisaka         RK_U32      ref0_poc_highbit        : 4;
202*437bfbebSnyanmisaka         RK_U32      ref1_poc_highbit        : 4;
203*437bfbebSnyanmisaka         RK_U32      ref2_poc_highbit        : 4;
204*437bfbebSnyanmisaka         RK_U32      ref3_poc_highbit        : 4;
205*437bfbebSnyanmisaka         RK_U32      ref4_poc_highbit        : 4;
206*437bfbebSnyanmisaka         RK_U32      ref5_poc_highbit        : 4;
207*437bfbebSnyanmisaka         RK_U32      ref6_poc_highbit        : 4;
208*437bfbebSnyanmisaka         RK_U32      ref7_poc_highbit        : 4;
209*437bfbebSnyanmisaka     } reg200;
210*437bfbebSnyanmisaka     struct SWREG201_REF8_15_POC_HIGHBIT {
211*437bfbebSnyanmisaka         RK_U32      ref8_poc_highbit        : 4;
212*437bfbebSnyanmisaka         RK_U32      ref9_poc_highbit        : 4;
213*437bfbebSnyanmisaka         RK_U32      ref10_poc_highbit       : 4;
214*437bfbebSnyanmisaka         RK_U32      ref11_poc_highbit       : 4;
215*437bfbebSnyanmisaka         RK_U32      ref12_poc_highbit       : 4;
216*437bfbebSnyanmisaka         RK_U32      ref13_poc_highbit       : 4;
217*437bfbebSnyanmisaka         RK_U32      ref14_poc_highbit       : 4;
218*437bfbebSnyanmisaka         RK_U32      ref15_poc_highbit       : 4;
219*437bfbebSnyanmisaka     } reg201;
220*437bfbebSnyanmisaka     struct SWREG200_REF16_23_POC_HIGHBIT {
221*437bfbebSnyanmisaka         RK_U32      ref16_poc_highbit       : 4;
222*437bfbebSnyanmisaka         RK_U32      ref17_poc_highbit       : 4;
223*437bfbebSnyanmisaka         RK_U32      ref18_poc_highbit       : 4;
224*437bfbebSnyanmisaka         RK_U32      ref19_poc_highbit       : 4;
225*437bfbebSnyanmisaka         RK_U32      ref20_poc_highbit       : 4;
226*437bfbebSnyanmisaka         RK_U32      ref21_poc_highbit       : 4;
227*437bfbebSnyanmisaka         RK_U32      ref22_poc_highbit       : 4;
228*437bfbebSnyanmisaka         RK_U32      ref23_poc_highbit       : 4;
229*437bfbebSnyanmisaka     } reg202;
230*437bfbebSnyanmisaka     struct SWREG200_REF24_31_POC_HIGHBIT {
231*437bfbebSnyanmisaka         RK_U32      ref24_poc_highbit       : 4;
232*437bfbebSnyanmisaka         RK_U32      ref25_poc_highbit       : 4;
233*437bfbebSnyanmisaka         RK_U32      ref26_poc_highbit       : 4;
234*437bfbebSnyanmisaka         RK_U32      ref27_poc_highbit       : 4;
235*437bfbebSnyanmisaka         RK_U32      ref28_poc_highbit       : 4;
236*437bfbebSnyanmisaka         RK_U32      ref29_poc_highbit       : 4;
237*437bfbebSnyanmisaka         RK_U32      ref30_poc_highbit       : 4;
238*437bfbebSnyanmisaka         RK_U32      ref31_poc_highbit       : 4;
239*437bfbebSnyanmisaka     } reg203;
240*437bfbebSnyanmisaka     struct SWREG200_CUR_POC_HIGHBIT {
241*437bfbebSnyanmisaka         RK_U32      cur_poc_highbit         : 4;
242*437bfbebSnyanmisaka         RK_U32      reserver                : 28;
243*437bfbebSnyanmisaka     } reg204;
244*437bfbebSnyanmisaka 
245*437bfbebSnyanmisaka     struct SWREG205_DEBUG_INFO {
246*437bfbebSnyanmisaka         RK_U32      force_softreset_valid   : 1;
247*437bfbebSnyanmisaka         RK_U32      force_mmureset_valid    : 1;
248*437bfbebSnyanmisaka         RK_U32      reserve0                : 2;
249*437bfbebSnyanmisaka         RK_U32      error_auto_rst_disable  : 1;
250*437bfbebSnyanmisaka         RK_U32      right_auto_rst_disable  : 1;
251*437bfbebSnyanmisaka         RK_U32      buf_empty_security_en   : 1;
252*437bfbebSnyanmisaka         RK_U32      coord_realtime_report_en : 1;
253*437bfbebSnyanmisaka 
254*437bfbebSnyanmisaka         RK_U32      fetchcmd_merge_dis      : 1;
255*437bfbebSnyanmisaka         RK_U32      dec_timeout_dis         : 1;
256*437bfbebSnyanmisaka         RK_U32      reg_cfg_wr_dis          : 1;
257*437bfbebSnyanmisaka         RK_U32      reserve1                : 1;
258*437bfbebSnyanmisaka         RK_U32      force_busidle_req       : 1;
259*437bfbebSnyanmisaka         RK_U32      mmu_force_busidle_req   : 1;
260*437bfbebSnyanmisaka         RK_U32      mmu_sel                 : 1;
261*437bfbebSnyanmisaka         RK_U32      reserve2                : 17;
262*437bfbebSnyanmisaka 
263*437bfbebSnyanmisaka     } reg205;
264*437bfbebSnyanmisaka } Vdpu382H264dHighPoc_t;
265*437bfbebSnyanmisaka 
266*437bfbebSnyanmisaka typedef struct Vdpu382H264dRegSet_t {
267*437bfbebSnyanmisaka     Vdpu382RegCommon        common;
268*437bfbebSnyanmisaka     Vdpu382RegH264dParam    h264d_param;
269*437bfbebSnyanmisaka     Vdpu382RegCommonAddr    common_addr;
270*437bfbebSnyanmisaka     Vdpu382RegH264dAddr     h264d_addr;
271*437bfbebSnyanmisaka     Vdpu382H264dHighPoc_t   h264d_highpoc;
272*437bfbebSnyanmisaka     Vdpu382RegIrqStatus     irq_status;
273*437bfbebSnyanmisaka     Vdpu382RegStatistic     statistic;
274*437bfbebSnyanmisaka } Vdpu382H264dRegSet;
275*437bfbebSnyanmisaka 
276*437bfbebSnyanmisaka #endif /* __VDPU382_H264D_H__ */
277