xref: /rockchip-linux_mpp/mpp/hal/rkenc/jpege/hal_jpege_vpu720_reg.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka  * Copyright (c) 2023 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka  */
5*437bfbebSnyanmisaka 
6*437bfbebSnyanmisaka #ifndef __HAL_JPEGE_VPU720_REG_H__
7*437bfbebSnyanmisaka #define __HAL_JPEGE_VPU720_REG_H__
8*437bfbebSnyanmisaka 
9*437bfbebSnyanmisaka #include "rk_type.h"
10*437bfbebSnyanmisaka 
11*437bfbebSnyanmisaka typedef struct JpegeVpu720BaseReg_t {
12*437bfbebSnyanmisaka     // 0x0000, IP version
13*437bfbebSnyanmisaka     RK_U32 reg000_version;
14*437bfbebSnyanmisaka     // 0x0004, Start Command
15*437bfbebSnyanmisaka     struct {
16*437bfbebSnyanmisaka         // Number of new nodes added to link table
17*437bfbebSnyanmisaka         RK_U32 lkt_num                  : 8;
18*437bfbebSnyanmisaka         /**
19*437bfbebSnyanmisaka          * @brief VEPU command
20*437bfbebSnyanmisaka          * 0 -- N/A
21*437bfbebSnyanmisaka          * 1 -- One-frame encoding by register configuration
22*437bfbebSnyanmisaka          * 2 -- Multi-frame encoding start with link table mode
23*437bfbebSnyanmisaka          * 3 -- Multi-frame encoding update (with link table mode)
24*437bfbebSnyanmisaka          * 4 -- link table encoding force pause
25*437bfbebSnyanmisaka          * 5 -- continue link table encoder when link table stop
26*437bfbebSnyanmisaka          * 6 -- safe_clr
27*437bfbebSnyanmisaka          * 7 -- force_clr
28*437bfbebSnyanmisaka          */
29*437bfbebSnyanmisaka         RK_U32 vepu_cmd                 : 4;
30*437bfbebSnyanmisaka         RK_U32                          : 20;
31*437bfbebSnyanmisaka     } reg001_enc_strt;
32*437bfbebSnyanmisaka 
33*437bfbebSnyanmisaka     /*reserved 0x8 ~ 0xC*/
34*437bfbebSnyanmisaka     RK_U32 reg002_003[2];
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka     // 0x0010, Interrupt Enable
37*437bfbebSnyanmisaka     struct {
38*437bfbebSnyanmisaka         // One frame encoding finish interrupt enable
39*437bfbebSnyanmisaka         RK_U32 fenc_done_en             : 1;
40*437bfbebSnyanmisaka         // Link table one node finish interrupt enable
41*437bfbebSnyanmisaka         RK_U32 lkt_node_done_en         : 1;
42*437bfbebSnyanmisaka         // Safe clear finish interrupt enable
43*437bfbebSnyanmisaka         RK_U32 sclr_done_en             : 1;
44*437bfbebSnyanmisaka         // One slice of video encoding finish interrupt enable
45*437bfbebSnyanmisaka         RK_U32 vslc_done_en             : 1;
46*437bfbebSnyanmisaka         // Video bit stream buffer overflow interrupt enable
47*437bfbebSnyanmisaka         RK_U32 vbsb_oflw_en             : 1;
48*437bfbebSnyanmisaka         // Video bit stream buffer write section interrupt enable
49*437bfbebSnyanmisaka         RK_U32 vbsb_sct_en              : 1;
50*437bfbebSnyanmisaka         // Frame encoding error interrupt enable
51*437bfbebSnyanmisaka         RK_U32 fenc_err_en              : 1;
52*437bfbebSnyanmisaka         // Watch dog (timeout) interrupt enable
53*437bfbebSnyanmisaka         RK_U32 wdg_en                   : 1;
54*437bfbebSnyanmisaka         // Link table operation error interrupt enable
55*437bfbebSnyanmisaka         RK_U32 lkt_oerr_en              : 1;
56*437bfbebSnyanmisaka         // Link table encoding error stop interrupt enable
57*437bfbebSnyanmisaka         RK_U32 lkt_estp_en              : 1;
58*437bfbebSnyanmisaka         // Link cmd force pause interrupt enable
59*437bfbebSnyanmisaka         RK_U32 lkt_fstp_en              : 1;
60*437bfbebSnyanmisaka         // Link table note stop interrupt enable
61*437bfbebSnyanmisaka         RK_U32 lkt_note_stp_en          : 1;
62*437bfbebSnyanmisaka         RK_U32 lkt_data_error_en        : 1;
63*437bfbebSnyanmisaka         RK_U32                          : 19;
64*437bfbebSnyanmisaka     } reg004_int_en;
65*437bfbebSnyanmisaka 
66*437bfbebSnyanmisaka     // 0x0014, Interrupt Mask
67*437bfbebSnyanmisaka     struct {
68*437bfbebSnyanmisaka         RK_U32 fenc_done_msk            : 1;
69*437bfbebSnyanmisaka         RK_U32 lkt_node_done_msk        : 1;
70*437bfbebSnyanmisaka         RK_U32 sclr_done_msk            : 1;
71*437bfbebSnyanmisaka         RK_U32 vslc_done_msk            : 1;
72*437bfbebSnyanmisaka         RK_U32 vbsb_oflw_msk            : 1;
73*437bfbebSnyanmisaka         RK_U32 vbsb_sct_msk             : 1;
74*437bfbebSnyanmisaka         RK_U32 fenc_err_msk             : 1;
75*437bfbebSnyanmisaka         RK_U32 wdg_msk                  : 1;
76*437bfbebSnyanmisaka         RK_U32 lkt_oerr_msk             : 1;
77*437bfbebSnyanmisaka         RK_U32 lkt_estp_msk             : 1;
78*437bfbebSnyanmisaka         RK_U32 lkt_fstp_msk             : 1;
79*437bfbebSnyanmisaka         RK_U32 lkt_note_stp_msk         : 1;
80*437bfbebSnyanmisaka         RK_U32 lkt_data_error_msk       : 1;
81*437bfbebSnyanmisaka         RK_U32                          : 19;
82*437bfbebSnyanmisaka     } reg005_int_msk;
83*437bfbebSnyanmisaka 
84*437bfbebSnyanmisaka     // 0x0018, Interrupt Clear
85*437bfbebSnyanmisaka     struct {
86*437bfbebSnyanmisaka         RK_U32 fenc_done_clr            : 1;
87*437bfbebSnyanmisaka         RK_U32 lkt_node_done_clr        : 1;
88*437bfbebSnyanmisaka         RK_U32 sclr_done_clr            : 1;
89*437bfbebSnyanmisaka         RK_U32 vslc_done_clr            : 1;
90*437bfbebSnyanmisaka         RK_U32 vbsb_oflw_clr            : 1;
91*437bfbebSnyanmisaka         RK_U32 vbsb_sct_clr             : 1;
92*437bfbebSnyanmisaka         RK_U32 fenc_err_clr             : 1;
93*437bfbebSnyanmisaka         RK_U32 wdg_clr                  : 1;
94*437bfbebSnyanmisaka         RK_U32 lkt_oerr_clr             : 1;
95*437bfbebSnyanmisaka         RK_U32 lkt_estp_clr             : 1;
96*437bfbebSnyanmisaka         RK_U32 lkt_fstp_clr             : 1;
97*437bfbebSnyanmisaka         RK_U32 lkt_note_stp_clr         : 1;
98*437bfbebSnyanmisaka         RK_U32 lkt_data_error_clr       : 1;
99*437bfbebSnyanmisaka         RK_U32                          : 19;
100*437bfbebSnyanmisaka     } reg006_int_clr;
101*437bfbebSnyanmisaka 
102*437bfbebSnyanmisaka     // 0x001c, Interrupt State;
103*437bfbebSnyanmisaka     struct {
104*437bfbebSnyanmisaka         RK_U32 fenc_done_state          : 1;
105*437bfbebSnyanmisaka         RK_U32 lkt_node_done_state      : 1;
106*437bfbebSnyanmisaka         RK_U32 sclr_done_state          : 1;
107*437bfbebSnyanmisaka         RK_U32 vslc_done_state          : 1;
108*437bfbebSnyanmisaka         RK_U32 vbsb_oflw_state          : 1;
109*437bfbebSnyanmisaka         RK_U32 vbsb_sct_state           : 1;
110*437bfbebSnyanmisaka         RK_U32 fenc_err_state           : 1;
111*437bfbebSnyanmisaka         RK_U32 wdg_state                : 1;
112*437bfbebSnyanmisaka         RK_U32 lkt_oerr_state           : 1;
113*437bfbebSnyanmisaka         RK_U32 lkt_estp_state           : 1;
114*437bfbebSnyanmisaka         RK_U32 lkt_fstp_state           : 1;
115*437bfbebSnyanmisaka         RK_U32 lkt_note_stp_state       : 1;
116*437bfbebSnyanmisaka         RK_U32 lkt_data_error_state     : 1;
117*437bfbebSnyanmisaka         RK_U32                          : 19;
118*437bfbebSnyanmisaka     } reg007_int_state;
119*437bfbebSnyanmisaka 
120*437bfbebSnyanmisaka     // 0x0020, Clock and RST CTRL
121*437bfbebSnyanmisaka     struct {
122*437bfbebSnyanmisaka         // Encoder auto reset core clock domain when frame finished
123*437bfbebSnyanmisaka         RK_U32 resetn_hw_en             : 1;
124*437bfbebSnyanmisaka         // Encoder SRAM auto clock gating enable
125*437bfbebSnyanmisaka         RK_U32 sram_ckg_en              : 1;
126*437bfbebSnyanmisaka         // Auto clock gating enable
127*437bfbebSnyanmisaka         RK_U32 cke                      : 1;
128*437bfbebSnyanmisaka         RK_U32                          : 29;
129*437bfbebSnyanmisaka     } reg008_cru_ctrl;
130*437bfbebSnyanmisaka 
131*437bfbebSnyanmisaka     // 0x0024, Fast link table cfg buffer addr, 128 byte aligned
132*437bfbebSnyanmisaka     RK_U32 reg009_lkt_base_addr;
133*437bfbebSnyanmisaka 
134*437bfbebSnyanmisaka     // 0x0028, Link table node operation configuration
135*437bfbebSnyanmisaka     struct {
136*437bfbebSnyanmisaka         // Only the ejpeg with the same core ID can use this node
137*437bfbebSnyanmisaka         RK_U32 core_id                  : 4;
138*437bfbebSnyanmisaka         // The enable of lkt error stop next frame
139*437bfbebSnyanmisaka         RK_U32 lkt_err_stop_en          : 1;
140*437bfbebSnyanmisaka         // The enable of lkt frame stop when the frame end
141*437bfbebSnyanmisaka         RK_U32 lkt_node_stop_en         : 1;
142*437bfbebSnyanmisaka         RK_U32                          : 10;
143*437bfbebSnyanmisaka         /**
144*437bfbebSnyanmisaka          * @brief  Data swap for link table read channel.
145*437bfbebSnyanmisaka          * bit[3] -- swap 64 bits in 128 bits
146*437bfbebSnyanmisaka          * bit[2] -- swap 32 bits in 64 bits;
147*437bfbebSnyanmisaka          * bit[1] -- swap 16 bits in 32 bits;
148*437bfbebSnyanmisaka          * bit[0] -- swap 8 bits in 16 bits;
149*437bfbebSnyanmisaka          */
150*437bfbebSnyanmisaka         RK_U32 lktr_bus_edin            : 4;
151*437bfbebSnyanmisaka         /**
152*437bfbebSnyanmisaka          * @brief
153*437bfbebSnyanmisaka          * Data swap for link table write channel.
154*437bfbebSnyanmisaka          * bit[3] -- swap 64 bits in 128 bits
155*437bfbebSnyanmisaka          * bit[2] -- swap 32 bits in 64 bits;
156*437bfbebSnyanmisaka          * bit[1] -- swap 16 bits in 32 bits;
157*437bfbebSnyanmisaka          * bit[0] -- swap 8 bits in 16 bits;
158*437bfbebSnyanmisaka          */
159*437bfbebSnyanmisaka         RK_U32 lktw_bus_edin            : 4;
160*437bfbebSnyanmisaka         RK_U32                          : 8;
161*437bfbebSnyanmisaka     } reg010_node_ocfg;
162*437bfbebSnyanmisaka 
163*437bfbebSnyanmisaka     // 0x002c, watch dog configure register
164*437bfbebSnyanmisaka     RK_U32 reg011_wdg_jpeg;
165*437bfbebSnyanmisaka 
166*437bfbebSnyanmisaka     // reserved, 0x0030
167*437bfbebSnyanmisaka     RK_U32 reg012;
168*437bfbebSnyanmisaka 
169*437bfbebSnyanmisaka     // 0x0034, low delay esc operation configuration. Bit[0-30] : read ecs num.
170*437bfbebSnyanmisaka     RK_U32 reg013_low_delay_ecs_ocfg;
171*437bfbebSnyanmisaka     // 0x0038, low delay packet operation configuration. Bit[0-30] : read packet num.
172*437bfbebSnyanmisaka     RK_U32 reg014_low_delay_packet_ocfg;
173*437bfbebSnyanmisaka 
174*437bfbebSnyanmisaka     // reserved, 0x003c
175*437bfbebSnyanmisaka     RK_U32 reg015;
176*437bfbebSnyanmisaka 
177*437bfbebSnyanmisaka     // 0x0040, Address of JPEG Q table buffer, 128 byte aligned
178*437bfbebSnyanmisaka     RK_U32 reg016_adr_qtbl;
179*437bfbebSnyanmisaka     // 0x0044, Top address of JPEG Bit stream buffer, 16 byte aligned
180*437bfbebSnyanmisaka     RK_U32 reg017_adr_bsbt;
181*437bfbebSnyanmisaka     // 0x0048, Bottom address of JPEG bit stream buffer, 16 byte aligned
182*437bfbebSnyanmisaka     RK_U32 reg018_adr_bsbb;
183*437bfbebSnyanmisaka     // 0x004c, Read Address of JPEG bit stream buffer, 1 byte aligned
184*437bfbebSnyanmisaka     RK_U32 reg019_adr_bsbr;
185*437bfbebSnyanmisaka     // 0x0050, Start address of JPEG bit stream buffer, 1 byte aligned
186*437bfbebSnyanmisaka     RK_U32 reg020_adr_bsbs;
187*437bfbebSnyanmisaka     // 0x0054, Base address of ECS length buffer, 8 byte align
188*437bfbebSnyanmisaka     RK_U32 reg021_adr_ecs_len;
189*437bfbebSnyanmisaka     // 0x0058, Base address of the 1st storage area for video source buffer
190*437bfbebSnyanmisaka     RK_U32 reg022_adr_src0;
191*437bfbebSnyanmisaka     // 0x005c, Base address of the 2nd storage area for video source buffer
192*437bfbebSnyanmisaka     RK_U32 reg023_adr_src1;
193*437bfbebSnyanmisaka     // 0x0060, Base address of the 3rd storage area for video source buffer
194*437bfbebSnyanmisaka     RK_U32 reg024_adr_src2;
195*437bfbebSnyanmisaka 
196*437bfbebSnyanmisaka     // reserved, 0x0064
197*437bfbebSnyanmisaka     RK_U32 reg025;
198*437bfbebSnyanmisaka 
199*437bfbebSnyanmisaka     // 0x0068, rk jpeg encoder axi performance ctrl0 description
200*437bfbebSnyanmisaka     struct {
201*437bfbebSnyanmisaka         RK_U32 perf_work_e              : 1;
202*437bfbebSnyanmisaka         RK_U32 perf_clr_e               : 1;
203*437bfbebSnyanmisaka         RK_U32 perf_frm_type            : 1;
204*437bfbebSnyanmisaka         RK_U32 cnt_type                 : 1;
205*437bfbebSnyanmisaka         RK_U32 rd_latency_id            : 4;
206*437bfbebSnyanmisaka         RK_U32 rd_latency_thr           : 12;
207*437bfbebSnyanmisaka         RK_U32                          : 12;
208*437bfbebSnyanmisaka     } reg026_axi_perf_ctrl0;
209*437bfbebSnyanmisaka 
210*437bfbebSnyanmisaka     // 0x006c, rk jpeg encoder axi performance ctrl1 description
211*437bfbebSnyanmisaka     struct {
212*437bfbebSnyanmisaka         RK_U32 addr_align_type          : 2;
213*437bfbebSnyanmisaka         RK_U32 ar_cnt_id_type           : 1;
214*437bfbebSnyanmisaka         RK_U32 aw_cnt_id_type           : 1;
215*437bfbebSnyanmisaka         RK_U32 ar_count_id              : 4;
216*437bfbebSnyanmisaka         RK_U32 aw_count_id              : 4;
217*437bfbebSnyanmisaka         RK_U32 rd_total_bytes_mode      : 1;
218*437bfbebSnyanmisaka         RK_U32                          : 19;
219*437bfbebSnyanmisaka     } reg027_axi_perf_ctrl1;
220*437bfbebSnyanmisaka 
221*437bfbebSnyanmisaka     // 0x0070, reserved
222*437bfbebSnyanmisaka     RK_U32 reg028;
223*437bfbebSnyanmisaka 
224*437bfbebSnyanmisaka     // 0x0074, picture size
225*437bfbebSnyanmisaka     struct {
226*437bfbebSnyanmisaka         // Ceil(encoding picture height / 8) -1
227*437bfbebSnyanmisaka         RK_U32 pic_wd8_m1               : 13;
228*437bfbebSnyanmisaka         RK_U32                          : 3;
229*437bfbebSnyanmisaka         // Ceil(encoding picture height / 8) -1
230*437bfbebSnyanmisaka         RK_U32 pic_hd8_m1               : 13;
231*437bfbebSnyanmisaka         RK_U32                          : 3;
232*437bfbebSnyanmisaka     } reg029_sw_enc_rsl;
233*437bfbebSnyanmisaka 
234*437bfbebSnyanmisaka     // 0x0078, JPEG source filling pixels for align
235*437bfbebSnyanmisaka     struct {
236*437bfbebSnyanmisaka         RK_U32 pic_wfill_jpeg           : 6;
237*437bfbebSnyanmisaka         RK_U32                          : 10;
238*437bfbebSnyanmisaka         RK_U32 pic_hfill_jpeg           : 6;
239*437bfbebSnyanmisaka         RK_U32                          : 10;
240*437bfbebSnyanmisaka     } reg030_sw_src_fill;
241*437bfbebSnyanmisaka 
242*437bfbebSnyanmisaka     /* reserved 0x7c */
243*437bfbebSnyanmisaka     RK_U32 reg031;
244*437bfbebSnyanmisaka 
245*437bfbebSnyanmisaka     // 0x0080, JPEG source format
246*437bfbebSnyanmisaka     struct {
247*437bfbebSnyanmisaka         RK_U32                          : 1;
248*437bfbebSnyanmisaka         RK_U32 rbuv_swap_jpeg           : 1;
249*437bfbebSnyanmisaka         /**
250*437bfbebSnyanmisaka          * @brief srouce color format
251*437bfbebSnyanmisaka          * 4'h0: tile400
252*437bfbebSnyanmisaka          * 4'h1: tile420
253*437bfbebSnyanmisaka          * 4'h2: tile422
254*437bfbebSnyanmisaka          * 4'h3: tile444
255*437bfbebSnyanmisaka          * 4'h4: YUV422SP
256*437bfbebSnyanmisaka          * 4'h5: YUV422P
257*437bfbebSnyanmisaka          * 4'h6: YUV420SP
258*437bfbebSnyanmisaka          * 4'h7: YUV420P
259*437bfbebSnyanmisaka          * 4'h8: YUYV422
260*437bfbebSnyanmisaka          * 4'h9: UYVY422
261*437bfbebSnyanmisaka          * 4'ha: YUV400
262*437bfbebSnyanmisaka          * 4'hc: YUV444SP
263*437bfbebSnyanmisaka          * 4'hd: YUV444P
264*437bfbebSnyanmisaka          * Others: Reserved
265*437bfbebSnyanmisaka          */
266*437bfbebSnyanmisaka         RK_U32 src_fmt                  : 4;
267*437bfbebSnyanmisaka         /**
268*437bfbebSnyanmisaka          * @brief color format of output from preprocess
269*437bfbebSnyanmisaka          * 2'h0: YUV400;
270*437bfbebSnyanmisaka          * 2'h1: YUV420;
271*437bfbebSnyanmisaka          * 2'h2: YUV422;
272*437bfbebSnyanmisaka          * 2'h3: YUV444;
273*437bfbebSnyanmisaka          *
274*437bfbebSnyanmisaka         */
275*437bfbebSnyanmisaka         RK_U32 out_fmt                  : 2;
276*437bfbebSnyanmisaka         RK_U32                          : 1;
277*437bfbebSnyanmisaka         RK_U32 src_range_trns_en        : 1;
278*437bfbebSnyanmisaka         RK_U32 src_range_trns_sel       : 1;
279*437bfbebSnyanmisaka         /**
280*437bfbebSnyanmisaka          * @brief Chroma downsample mode
281*437bfbebSnyanmisaka          * 0 -- Average
282*437bfbebSnyanmisaka          * 1 -- Drop
283*437bfbebSnyanmisaka          */
284*437bfbebSnyanmisaka         RK_U32 chroma_ds_mode           : 1;
285*437bfbebSnyanmisaka         // Chroma value will be force to some value
286*437bfbebSnyanmisaka         RK_U32 chroma_force_en          : 1;
287*437bfbebSnyanmisaka         RK_U32                          : 2;
288*437bfbebSnyanmisaka         // 1 00 src mirror image
289*437bfbebSnyanmisaka         RK_U32 src_mirr_jpeg            : 1;
290*437bfbebSnyanmisaka         RK_U32 u_force_value            : 8;
291*437bfbebSnyanmisaka         RK_U32 v_force_value            : 8;
292*437bfbebSnyanmisaka     } reg032_sw_src_fmt;
293*437bfbebSnyanmisaka 
294*437bfbebSnyanmisaka     // 0x0084, encoding picture offset
295*437bfbebSnyanmisaka     struct {
296*437bfbebSnyanmisaka         RK_U32 pic_ofst_x               : 16;
297*437bfbebSnyanmisaka         RK_U32 pic_ofst_y               : 16;
298*437bfbebSnyanmisaka     } reg033_sw_pic_ofst;
299*437bfbebSnyanmisaka 
300*437bfbebSnyanmisaka     // 0x0088, JPEG source stride0
301*437bfbebSnyanmisaka     struct {
302*437bfbebSnyanmisaka         RK_U32 src_strd_0               : 20;
303*437bfbebSnyanmisaka         RK_U32                          : 12;
304*437bfbebSnyanmisaka     } reg034_sw_src_strd_0;
305*437bfbebSnyanmisaka 
306*437bfbebSnyanmisaka     // 0x008c, JPEG source stride1
307*437bfbebSnyanmisaka     struct {
308*437bfbebSnyanmisaka         RK_U32 src_strd_1               : 19;
309*437bfbebSnyanmisaka         RK_U32                          : 13;
310*437bfbebSnyanmisaka     } reg035_sw_src_strd_1;
311*437bfbebSnyanmisaka 
312*437bfbebSnyanmisaka     // 0x0090, JPEG common config
313*437bfbebSnyanmisaka     struct {
314*437bfbebSnyanmisaka         /* the number of MCU in the restart interval */
315*437bfbebSnyanmisaka         RK_U32 rst_intv                 : 16;
316*437bfbebSnyanmisaka         RK_U32                          : 9;
317*437bfbebSnyanmisaka         /**
318*437bfbebSnyanmisaka          * @brief JPEG encoder output mode
319*437bfbebSnyanmisaka          * 1'b0: frame by frame, without interrupt at any ECS;
320*437bfbebSnyanmisaka          * 1'b1: low latency mode, with interrupt per ECS, flush all the
321*437bfbebSnyanmisaka          *       bit stream after each ECS finished.
322*437bfbebSnyanmisaka          */
323*437bfbebSnyanmisaka         RK_U32 out_mode                 : 1;
324*437bfbebSnyanmisaka         /* the number of the fisrt RSTm */
325*437bfbebSnyanmisaka         RK_U32 rst_m                    : 3;
326*437bfbebSnyanmisaka         /**
327*437bfbebSnyanmisaka          * @brief Indicate if the current ECS is the last ECS of the whole picture.
328*437bfbebSnyanmisaka          * If it is the last ecs, add EOI.
329*437bfbebSnyanmisaka          */
330*437bfbebSnyanmisaka         RK_U32 pic_last_ecs             : 1;
331*437bfbebSnyanmisaka         /**
332*437bfbebSnyanmisaka          * @brief reload Q table or not
333*437bfbebSnyanmisaka          * 0 -- load Q table for current task
334*437bfbebSnyanmisaka          * 1 -- no need to load Q table
335*437bfbebSnyanmisaka          */
336*437bfbebSnyanmisaka         RK_U32 jpeg_qtble_noload        : 1;
337*437bfbebSnyanmisaka         RK_U32                          : 1;
338*437bfbebSnyanmisaka     } reg036_sw_jpeg_enc_cfg;
339*437bfbebSnyanmisaka 
340*437bfbebSnyanmisaka     // 0x0094, Low dealy packet size config
341*437bfbebSnyanmisaka     RK_U32 reg037_bsp_size_jpeg;
342*437bfbebSnyanmisaka 
343*437bfbebSnyanmisaka     // 0x0098, Bit stream output padding config
344*437bfbebSnyanmisaka     struct {
345*437bfbebSnyanmisaka         RK_U32 uvc_partition0_len       : 12;
346*437bfbebSnyanmisaka         RK_U32 uvc_partition_len        : 12;
347*437bfbebSnyanmisaka         RK_U32 uvc_skip_len             : 6;
348*437bfbebSnyanmisaka         RK_U32                          : 2;
349*437bfbebSnyanmisaka     } reg038_sw_uvc_cfg;
350*437bfbebSnyanmisaka 
351*437bfbebSnyanmisaka     // 0x009c, Y Quantify rounding
352*437bfbebSnyanmisaka     struct {
353*437bfbebSnyanmisaka         /* bias for Y at quantization */
354*437bfbebSnyanmisaka         RK_U32 bias_y                   : 15;
355*437bfbebSnyanmisaka         RK_U32                          : 17;
356*437bfbebSnyanmisaka     } reg039_sw_jpeg_y_cfg;
357*437bfbebSnyanmisaka 
358*437bfbebSnyanmisaka     // 0x00a0, U Quantify rounding
359*437bfbebSnyanmisaka     struct {
360*437bfbebSnyanmisaka 
361*437bfbebSnyanmisaka         /* bias for U at quantization */
362*437bfbebSnyanmisaka         RK_U32 bias_u                   : 15;
363*437bfbebSnyanmisaka         RK_U32                          : 17;
364*437bfbebSnyanmisaka     } reg040_sw_jpeg_u_cfg;
365*437bfbebSnyanmisaka 
366*437bfbebSnyanmisaka     // 0x00a4, V Quantify rounding
367*437bfbebSnyanmisaka     struct {
368*437bfbebSnyanmisaka         /* bias for V at quantization */
369*437bfbebSnyanmisaka         RK_U32 bias_v                   : 15;
370*437bfbebSnyanmisaka         RK_U32                          : 17;
371*437bfbebSnyanmisaka     } reg041_sw_jpeg_v_cfg;
372*437bfbebSnyanmisaka 
373*437bfbebSnyanmisaka     // 0x00a8, Data bus endian
374*437bfbebSnyanmisaka     struct {
375*437bfbebSnyanmisaka         /**
376*437bfbebSnyanmisaka          * @brief Data swap for jpeg bit stream write channel
377*437bfbebSnyanmisaka          * [3]: Swap 64 bits in 128 bits
378*437bfbebSnyanmisaka          * [2]: Swap 32 bits in 64 bits
379*437bfbebSnyanmisaka          * [1]: Swap 16 bits in 32 bits
380*437bfbebSnyanmisaka          * [0]: Swap 8 bits in 16 bits
381*437bfbebSnyanmisaka          */
382*437bfbebSnyanmisaka         RK_U32 jbsw_bus_edin            : 4;
383*437bfbebSnyanmisaka         // Data swap for video source loading channel.
384*437bfbebSnyanmisaka         RK_U32 vsl_bus_edin             : 4;
385*437bfbebSnyanmisaka         // Data swap for lkt state write channel
386*437bfbebSnyanmisaka         RK_U32 ecs_len_edin             : 4;
387*437bfbebSnyanmisaka         // Data swap for qtbl read channel
388*437bfbebSnyanmisaka         RK_U32 sw_qtbl_edin             : 4;
389*437bfbebSnyanmisaka     } reg042_dbus_endn;
390*437bfbebSnyanmisaka 
391*437bfbebSnyanmisaka } JpegeVpu720BaseReg;
392*437bfbebSnyanmisaka 
393*437bfbebSnyanmisaka typedef struct JpegeVpu720StatusReg_t {
394*437bfbebSnyanmisaka     // 0x00c0, Low 32 bits of JPEG header bits length.
395*437bfbebSnyanmisaka     RK_U32 st_bsl_l32_jpeg_head_bits;
396*437bfbebSnyanmisaka     // 0x00c4, High 32 bits of JPEG header bits length
397*437bfbebSnyanmisaka     RK_U32 st_bsl_h32_jpeg_head_bits;
398*437bfbebSnyanmisaka 
399*437bfbebSnyanmisaka     // 0x00c8, Y and U source range
400*437bfbebSnyanmisaka     struct {
401*437bfbebSnyanmisaka         RK_U32 y_max_value              : 8;
402*437bfbebSnyanmisaka         RK_U32 y_min_value              : 8;
403*437bfbebSnyanmisaka         RK_U32 u_max_value              : 8;
404*437bfbebSnyanmisaka         RK_U32 u_min_vlaue              : 8;
405*437bfbebSnyanmisaka     } st_vsp_value0;
406*437bfbebSnyanmisaka 
407*437bfbebSnyanmisaka     // 0x00cc, V source range and total_ecs_num_minus
408*437bfbebSnyanmisaka     struct {
409*437bfbebSnyanmisaka         RK_U32 v_max_value              : 8;
410*437bfbebSnyanmisaka         RK_U32 v_min_vlaue              : 8;
411*437bfbebSnyanmisaka         RK_U32 total_ecs_num_minus1     : 8;
412*437bfbebSnyanmisaka     } st_vsp_value1;
413*437bfbebSnyanmisaka 
414*437bfbebSnyanmisaka     // 0x00d0, bit[0-15]
415*437bfbebSnyanmisaka     RK_U32 st_perf_rd_max_latency_num0;
416*437bfbebSnyanmisaka     // 0x00d4
417*437bfbebSnyanmisaka     RK_U32 st_perf_rd_latency_samp_num;
418*437bfbebSnyanmisaka     // 0x00d8
419*437bfbebSnyanmisaka     RK_U32 st_perf_rd_latency_acc_sum;
420*437bfbebSnyanmisaka     // 0x00dc
421*437bfbebSnyanmisaka     RK_U32 st_perf_rd_axi_total_byte;
422*437bfbebSnyanmisaka     // 0x00e0
423*437bfbebSnyanmisaka     RK_U32 st_perf_wr_axi_total_byte;
424*437bfbebSnyanmisaka     // 0x00e4
425*437bfbebSnyanmisaka     RK_U32 st_perf_working_cnt;
426*437bfbebSnyanmisaka 
427*437bfbebSnyanmisaka     RK_U32 sw_reserved_00e8_00ec[2];
428*437bfbebSnyanmisaka 
429*437bfbebSnyanmisaka     // 0x00f0
430*437bfbebSnyanmisaka     struct {
431*437bfbebSnyanmisaka         RK_U32 vsp_work_flag            : 1;
432*437bfbebSnyanmisaka         RK_U32 jpeg_core_work_flag      : 1;
433*437bfbebSnyanmisaka         RK_U32 dma_wr_work_flag         : 1;
434*437bfbebSnyanmisaka         RK_U32 dma_work_flag            : 1;
435*437bfbebSnyanmisaka     } st_wdg;
436*437bfbebSnyanmisaka 
437*437bfbebSnyanmisaka     // 0x00f4
438*437bfbebSnyanmisaka     RK_U32 st_ppl_pos;
439*437bfbebSnyanmisaka     // 0x00f8
440*437bfbebSnyanmisaka     RK_U32 st_core_pos;
441*437bfbebSnyanmisaka 
442*437bfbebSnyanmisaka     // 0x00fc, Bus status
443*437bfbebSnyanmisaka     struct {
444*437bfbebSnyanmisaka         RK_U32 ejpeg_arready            : 1;
445*437bfbebSnyanmisaka         RK_U32 ejpeg_cfg_arvalid        : 1;
446*437bfbebSnyanmisaka         RK_U32 ejpeg_cfg_arvalid_type   : 1;
447*437bfbebSnyanmisaka         RK_U32 ejpeg_cfg_arready        : 1;
448*437bfbebSnyanmisaka         RK_U32 ejpeg_vsp_arvalid        : 1;
449*437bfbebSnyanmisaka         RK_U32 ejpeg_vsp_arready        : 1;
450*437bfbebSnyanmisaka         RK_U32 rkejpeg_arvalid          : 1;
451*437bfbebSnyanmisaka         RK_U32 ejpeg_cfg_ar_cnt         : 2;
452*437bfbebSnyanmisaka         RK_U32 rkejpeg_arready          : 1;
453*437bfbebSnyanmisaka         RK_U32 rkejpeg_ravlid           : 1;
454*437bfbebSnyanmisaka         RK_U32 rkejpeg_rid              : 4;
455*437bfbebSnyanmisaka         RK_U32 rkejpeg_rresp            : 2;
456*437bfbebSnyanmisaka         RK_U32 rkejpeg_rready           : 1;
457*437bfbebSnyanmisaka         RK_U32 axi_wr_state_cs          : 1;
458*437bfbebSnyanmisaka         RK_U32 ejpeg_strmd_awvalid      : 1;
459*437bfbebSnyanmisaka         RK_U32 ejpeg_strmd_awtype       : 1;
460*437bfbebSnyanmisaka         RK_U32 ejpeg_strmd_awready      : 1;
461*437bfbebSnyanmisaka         RK_U32 ejpeg_strmd_wvalid       : 1;
462*437bfbebSnyanmisaka         RK_U32 ejpeg_strmd_wready       : 1;
463*437bfbebSnyanmisaka         RK_U32 ejpeg_cfg_awvalid        : 1;
464*437bfbebSnyanmisaka         RK_U32 ejpeg_cfg_awready        : 1;
465*437bfbebSnyanmisaka         RK_U32 rkejpeg_awvalid          : 1;
466*437bfbebSnyanmisaka         RK_U32 rkejpeg_awid             : 1;
467*437bfbebSnyanmisaka         RK_U32 rkejpeg_wvalid           : 1;
468*437bfbebSnyanmisaka         RK_U32 rkejpeg_wready           : 1;
469*437bfbebSnyanmisaka         RK_U32 ejpeg_freeze_flag        : 1;
470*437bfbebSnyanmisaka         RK_U32                          : 1;
471*437bfbebSnyanmisaka     } st_bus;
472*437bfbebSnyanmisaka 
473*437bfbebSnyanmisaka     // 0x0100, vsp_dbg_status
474*437bfbebSnyanmisaka     RK_U32 dbg_ppl;
475*437bfbebSnyanmisaka     // 0x0104, jpeg core dbg status
476*437bfbebSnyanmisaka     RK_U32 dbg_jpeg_core;
477*437bfbebSnyanmisaka     // reserved, 0x0108
478*437bfbebSnyanmisaka     RK_U32 sw_reserved_0108;
479*437bfbebSnyanmisaka     // 0x010c, The bit stream write address status
480*437bfbebSnyanmisaka     RK_U32 st_adr_jbsbw;
481*437bfbebSnyanmisaka     // 0x0110, ECS length buffer write address status
482*437bfbebSnyanmisaka     RK_U32 st_adr_ecs_len;
483*437bfbebSnyanmisaka     // 0x0114, the 1st storage aread for video source buffer read address status
484*437bfbebSnyanmisaka     RK_U32 st_adr_src0_jpeg;
485*437bfbebSnyanmisaka     // 0x0118, the 2nd storage aread for video source buffer read address status
486*437bfbebSnyanmisaka     RK_U32 st_adr_src1_jpeg;
487*437bfbebSnyanmisaka     // 0x011c, the 3rd storage aread for video source buffer read address status
488*437bfbebSnyanmisaka     RK_U32 st_adr_src2_jpeg;
489*437bfbebSnyanmisaka 
490*437bfbebSnyanmisaka     // 0x0120, low delay packet num status
491*437bfbebSnyanmisaka     struct {
492*437bfbebSnyanmisaka         RK_U32 bs_packet_num            : 16;
493*437bfbebSnyanmisaka         RK_U32 bs_packet_lst            : 1;
494*437bfbebSnyanmisaka     } st_low_delay_packet_num;
495*437bfbebSnyanmisaka 
496*437bfbebSnyanmisaka     // 0x0124, low delay ecs_len num status
497*437bfbebSnyanmisaka     struct {
498*437bfbebSnyanmisaka         RK_U32 ecs_len_num              : 16;
499*437bfbebSnyanmisaka         RK_U32 ecs_len_lst              : 1;
500*437bfbebSnyanmisaka     } st_ecs_len_num;
501*437bfbebSnyanmisaka 
502*437bfbebSnyanmisaka     // 0x0128, JPEG common status
503*437bfbebSnyanmisaka     struct {
504*437bfbebSnyanmisaka         /**
505*437bfbebSnyanmisaka          * @brief
506*437bfbebSnyanmisaka          * 0: idle
507*437bfbebSnyanmisaka          * 1: cru open
508*437bfbebSnyanmisaka          * 2: lkt cfg load
509*437bfbebSnyanmisaka          * 3: qtbl_cfg_load
510*437bfbebSnyanmisaka          * 4:enc
511*437bfbebSnyanmisaka          * 5:frame end
512*437bfbebSnyanmisaka          * 6:cru_close
513*437bfbebSnyanmisaka          * 7:lkt_error_stop
514*437bfbebSnyanmisaka          * 8:lkt_force_stop
515*437bfbebSnyanmisaka          * 9:lkt_node_stop
516*437bfbebSnyanmisaka          */
517*437bfbebSnyanmisaka         RK_U32 jpeg_enc_state           : 4;
518*437bfbebSnyanmisaka         RK_U32 lkt_mode_en              : 1;
519*437bfbebSnyanmisaka     } st_enc;
520*437bfbebSnyanmisaka 
521*437bfbebSnyanmisaka     // 0x012c, Link table num
522*437bfbebSnyanmisaka     struct {
523*437bfbebSnyanmisaka         RK_U32 lkt_cfg_num              : 8;
524*437bfbebSnyanmisaka         RK_U32 lkt_done_num             : 8;
525*437bfbebSnyanmisaka         RK_U32 lkt_int_num              : 8;
526*437bfbebSnyanmisaka         RK_U32 lkt_cfg_load_num         : 8;
527*437bfbebSnyanmisaka     } st_lkt_num;
528*437bfbebSnyanmisaka 
529*437bfbebSnyanmisaka     // 0x0130, link table cfg info
530*437bfbebSnyanmisaka     struct {
531*437bfbebSnyanmisaka         RK_U32 lkt_core_id              : 4;
532*437bfbebSnyanmisaka         RK_U32                          : 4;
533*437bfbebSnyanmisaka         RK_U32 lkt_stop_flag            : 1;
534*437bfbebSnyanmisaka         RK_U32 lkt_node_int             : 1;
535*437bfbebSnyanmisaka         RK_U32 lkt_task_id              : 12;
536*437bfbebSnyanmisaka         RK_U32                          : 10;
537*437bfbebSnyanmisaka     } st_lkt_info;
538*437bfbebSnyanmisaka 
539*437bfbebSnyanmisaka     //0x0134, next read addr for lkt_cfg
540*437bfbebSnyanmisaka     RK_U32 st_lkt_cfg_next_addr;
541*437bfbebSnyanmisaka     //0x0138, lkt state buffer write addr
542*437bfbebSnyanmisaka     RK_U32 st_lkt_waddr;
543*437bfbebSnyanmisaka } JpegeVpu720StatusReg;
544*437bfbebSnyanmisaka 
545*437bfbebSnyanmisaka 
546*437bfbebSnyanmisaka #define JPEGE_VPU720_REG_BASE_INT_STATE (0x1c)
547*437bfbebSnyanmisaka #define JPEGE_VPU720_REG_STATUS_OFFSET (0xc0)
548*437bfbebSnyanmisaka 
549*437bfbebSnyanmisaka typedef struct JpegeVpu720RegSet_t {
550*437bfbebSnyanmisaka     JpegeVpu720BaseReg reg_base;
551*437bfbebSnyanmisaka     JpegeVpu720StatusReg reg_st;
552*437bfbebSnyanmisaka     RK_U32 int_state;
553*437bfbebSnyanmisaka } JpegeVpu720Reg;
554*437bfbebSnyanmisaka 
555*437bfbebSnyanmisaka #endif /* __HAL_JPEGE_VPU720_REG_H__ */