xref: /rockchip-linux_mpp/mpp/hal/vpu/jpegd/hal_jpegd_rkv_reg.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 #ifndef __HAL_JPEGD_RKV_REG_H__
17*437bfbebSnyanmisaka #define __HAL_JPEGD_RKV_REG_H__
18*437bfbebSnyanmisaka 
19*437bfbebSnyanmisaka #define JPEGD_REG_NUM   (42)
20*437bfbebSnyanmisaka 
21*437bfbebSnyanmisaka #define RKV_JPEGD_LITTLE_ENDIAN (0)
22*437bfbebSnyanmisaka #define RKV_JPEGD_BIG_ENDIAN    (1)
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka #define SCALEDOWN_DISABLE       (0)
25*437bfbebSnyanmisaka #define SCALEDOWN_HALF          (1)
26*437bfbebSnyanmisaka #define SCALEDOWN_QUARTER       (2)
27*437bfbebSnyanmisaka #define SCALEDOWN_ONE_EIGHTS    (3)
28*437bfbebSnyanmisaka 
29*437bfbebSnyanmisaka #define OUTPUT_RASTER           (0)
30*437bfbebSnyanmisaka #define OUTPUT_TILE             (1)
31*437bfbebSnyanmisaka 
32*437bfbebSnyanmisaka #define TIMEOUT_MODE_CYCLE_24   (0)
33*437bfbebSnyanmisaka #define TIMEOUT_MODE_CYCLE_18   (1)
34*437bfbebSnyanmisaka 
35*437bfbebSnyanmisaka #define OUT_SEQUENCE_RASTER     (0)
36*437bfbebSnyanmisaka #define OUT_SEQUENCE_TILE       (1)
37*437bfbebSnyanmisaka 
38*437bfbebSnyanmisaka #define YUV_TO_RGB_REC_BT601    (0)
39*437bfbebSnyanmisaka #define YUV_TO_RGB_REC_BT709    (1)
40*437bfbebSnyanmisaka 
41*437bfbebSnyanmisaka #define YUV_TO_RGB_FULL_RANGE   (1)
42*437bfbebSnyanmisaka #define YUV_TO_RGB_LIMIT_RANGE  (0)
43*437bfbebSnyanmisaka 
44*437bfbebSnyanmisaka #define YUV_OUT_FMT_NO_TRANS    (0)
45*437bfbebSnyanmisaka #define YUV_OUT_FMT_2_RGB888    (1)
46*437bfbebSnyanmisaka #define YUV_OUT_FMT_2_RGB565    (2)
47*437bfbebSnyanmisaka // Not support YUV400 transmit to NV12
48*437bfbebSnyanmisaka #define YUV_OUT_FMT_2_NV12      (3)
49*437bfbebSnyanmisaka // Only support YUV422 or YUV444, YUV444 should scaledown uv
50*437bfbebSnyanmisaka #define YUV_OUT_FMT_2_YUYV      (4)
51*437bfbebSnyanmisaka 
52*437bfbebSnyanmisaka #define YUV_MODE_400            (0)
53*437bfbebSnyanmisaka #define YUV_MODE_411            (1)
54*437bfbebSnyanmisaka #define YUV_MODE_420            (2)
55*437bfbebSnyanmisaka #define YUV_MODE_422            (3)
56*437bfbebSnyanmisaka #define YUV_MODE_440            (4)
57*437bfbebSnyanmisaka #define YUV_MODE_444            (5)
58*437bfbebSnyanmisaka 
59*437bfbebSnyanmisaka #define BIT_DEPTH_8             (0)
60*437bfbebSnyanmisaka #define BIT_DEPTH_12            (1)
61*437bfbebSnyanmisaka 
62*437bfbebSnyanmisaka // No quantization/huffman table or table is the same as previous
63*437bfbebSnyanmisaka #define TBL_ENTRY_0             (0)
64*437bfbebSnyanmisaka // Grayscale picture with only 1 quantization/huffman table
65*437bfbebSnyanmisaka #define TBL_ENTRY_1             (1)
66*437bfbebSnyanmisaka // Common case, one table for luma, one for chroma
67*437bfbebSnyanmisaka #define TBL_ENTRY_2             (2)
68*437bfbebSnyanmisaka // 3 table entries, one for luma, one for cb, one for cr
69*437bfbebSnyanmisaka #define TBL_ENTRY_3             (3)
70*437bfbebSnyanmisaka 
71*437bfbebSnyanmisaka // Restart interval marker disable
72*437bfbebSnyanmisaka #define RST_DISABLE             (0)
73*437bfbebSnyanmisaka // Restart interval marker enable
74*437bfbebSnyanmisaka #define RST_ENABLE              (1)
75*437bfbebSnyanmisaka 
76*437bfbebSnyanmisaka typedef struct {
77*437bfbebSnyanmisaka     struct {
78*437bfbebSnyanmisaka         RK_U32 minor_ver                        : 8;
79*437bfbebSnyanmisaka         RK_U32 bit_depth                        : 1;
80*437bfbebSnyanmisaka         RK_U32                                  : 7;
81*437bfbebSnyanmisaka         RK_U32 prod_num                         : 16;
82*437bfbebSnyanmisaka     } reg0_id;
83*437bfbebSnyanmisaka 
84*437bfbebSnyanmisaka     struct {
85*437bfbebSnyanmisaka         RK_U32 dec_e                            : 1;
86*437bfbebSnyanmisaka         RK_U32 dec_irq_dis                      : 1;
87*437bfbebSnyanmisaka         RK_U32 dec_timeout_e                    : 1;
88*437bfbebSnyanmisaka         RK_U32 buf_empty_e                      : 1;
89*437bfbebSnyanmisaka         RK_U32 buf_empty_reload_p               : 1;
90*437bfbebSnyanmisaka         RK_U32 soft_rst_en_p                    : 1;
91*437bfbebSnyanmisaka         RK_U32 dec_irq_raw                      : 1;
92*437bfbebSnyanmisaka         RK_U32 wait_reset_e                     : 1;
93*437bfbebSnyanmisaka         RK_U32 dec_irq                          : 1;
94*437bfbebSnyanmisaka         RK_U32 dec_rdy_sta                      : 1;
95*437bfbebSnyanmisaka         RK_U32 dec_bus_sta                      : 1;
96*437bfbebSnyanmisaka         RK_U32 dec_error_sta                    : 1;
97*437bfbebSnyanmisaka         RK_U32 dec_timeout_sta                  : 1;
98*437bfbebSnyanmisaka         RK_U32 dec_buf_empty_sta                : 1;
99*437bfbebSnyanmisaka         RK_U32 soft_rest_rdy                    : 1;
100*437bfbebSnyanmisaka         RK_U32 buf_empty_force_end_flag         : 1;
101*437bfbebSnyanmisaka         RK_U32 care_strm_error_e                : 1;
102*437bfbebSnyanmisaka         RK_U32 low_delay_out_sta                : 1;
103*437bfbebSnyanmisaka         RK_U32 lkt_operation_error_sta          : 1;
104*437bfbebSnyanmisaka         RK_U32 lkt_mode_int_sta                 : 1;
105*437bfbebSnyanmisaka         RK_U32 lkt_force_stop_sta               : 1;
106*437bfbebSnyanmisaka         RK_U32 lkt_node_int_sta                 : 1;
107*437bfbebSnyanmisaka         RK_U32 lkt_err_stop_sta                 : 1;
108*437bfbebSnyanmisaka         RK_U32 lkt_data_err_sta                 : 1;
109*437bfbebSnyanmisaka         RK_U32                                  : 8;
110*437bfbebSnyanmisaka     } reg1_int;
111*437bfbebSnyanmisaka 
112*437bfbebSnyanmisaka     struct {
113*437bfbebSnyanmisaka         RK_U32 in_endian                        : 1;
114*437bfbebSnyanmisaka         RK_U32 in_swap32_e                      : 1;
115*437bfbebSnyanmisaka         RK_U32 in_swap64_e                      : 1;
116*437bfbebSnyanmisaka         RK_U32 str_endian                       : 1;
117*437bfbebSnyanmisaka         RK_U32 str_swap32_e                     : 1;
118*437bfbebSnyanmisaka         RK_U32 str_swap64_e                     : 1;
119*437bfbebSnyanmisaka         RK_U32 out_endian                       : 1;
120*437bfbebSnyanmisaka         RK_U32 out_swap32_e                     : 1;
121*437bfbebSnyanmisaka         RK_U32 out_swap64_e                     : 1;
122*437bfbebSnyanmisaka         RK_U32 out_cbcr_swap                    : 1;
123*437bfbebSnyanmisaka         RK_U32 out_byte_swap                    : 1;
124*437bfbebSnyanmisaka         RK_U32                                  : 1;
125*437bfbebSnyanmisaka         RK_U32 scaledown_mode                   : 2;
126*437bfbebSnyanmisaka         RK_U32                                  : 2;
127*437bfbebSnyanmisaka         RK_U32 time_out_mode                    : 1;
128*437bfbebSnyanmisaka         RK_U32 force_softrest_valid             : 1;
129*437bfbebSnyanmisaka         RK_U32                                  : 2;
130*437bfbebSnyanmisaka         RK_U32 fbc_e                            : 1;
131*437bfbebSnyanmisaka         RK_U32 allow_16x8_cp_flag               : 1;
132*437bfbebSnyanmisaka         RK_U32 fbc_force_uncompress             : 1;
133*437bfbebSnyanmisaka         // 0 -- rgb565/rgb888, 1 -- bgr565, bgr888
134*437bfbebSnyanmisaka         RK_U32 bgr_sequence                     : 1;
135*437bfbebSnyanmisaka         RK_U32 fill_down_e                      : 1;
136*437bfbebSnyanmisaka         RK_U32 fill_right_e                     : 1;
137*437bfbebSnyanmisaka         RK_U32 dec_out_sequence                 : 1;
138*437bfbebSnyanmisaka         RK_U32 yuv_out_format                   : 3;
139*437bfbebSnyanmisaka         RK_U32 yuv2rgb_rec                      : 1;
140*437bfbebSnyanmisaka         RK_U32 yuv2rgb_range                    : 1;
141*437bfbebSnyanmisaka 
142*437bfbebSnyanmisaka     } reg2_sys;
143*437bfbebSnyanmisaka 
144*437bfbebSnyanmisaka     struct {
145*437bfbebSnyanmisaka         RK_U32 pic_width_m1                     : 16;
146*437bfbebSnyanmisaka         RK_U32 pic_height_m1                    : 16;
147*437bfbebSnyanmisaka     } reg3_pic_size;
148*437bfbebSnyanmisaka 
149*437bfbebSnyanmisaka     struct {
150*437bfbebSnyanmisaka         RK_U32 jpeg_mode                        : 3;
151*437bfbebSnyanmisaka         RK_U32                                  : 1;
152*437bfbebSnyanmisaka         RK_U32 pixel_depth                      : 3;
153*437bfbebSnyanmisaka         RK_U32                                  : 1;
154*437bfbebSnyanmisaka         RK_U32 qtables_sel                      : 2;
155*437bfbebSnyanmisaka         RK_U32                                  : 2;
156*437bfbebSnyanmisaka         RK_U32 htables_sel                      : 2;
157*437bfbebSnyanmisaka         RK_U32                                  : 1;
158*437bfbebSnyanmisaka         RK_U32 dri_e                            : 1;
159*437bfbebSnyanmisaka         RK_U32 dri_mcu_num_m1                   : 16;
160*437bfbebSnyanmisaka     } reg4_pic_fmt;
161*437bfbebSnyanmisaka 
162*437bfbebSnyanmisaka     struct {
163*437bfbebSnyanmisaka         RK_U32 y_hor_virstride                  : 16;
164*437bfbebSnyanmisaka         RK_U32 uv_hor_virstride                 : 16;
165*437bfbebSnyanmisaka     } reg5_hor_virstride;
166*437bfbebSnyanmisaka 
167*437bfbebSnyanmisaka     struct {
168*437bfbebSnyanmisaka         RK_U32                                  : 4;
169*437bfbebSnyanmisaka         RK_U32 y_virstride                      : 28;
170*437bfbebSnyanmisaka     } reg6_y_virstride;
171*437bfbebSnyanmisaka 
172*437bfbebSnyanmisaka     struct {
173*437bfbebSnyanmisaka         RK_U32 qtbl_len                         : 5;
174*437bfbebSnyanmisaka         RK_U32                                  : 3;
175*437bfbebSnyanmisaka         RK_U32 htbl_mincode_len                 : 5;
176*437bfbebSnyanmisaka         RK_U32                                  : 3;
177*437bfbebSnyanmisaka         RK_U32 htbl_value_len                   : 6;
178*437bfbebSnyanmisaka         RK_U32                                  : 2;
179*437bfbebSnyanmisaka         RK_U32 y_hor_virstride_h                : 1;
180*437bfbebSnyanmisaka         RK_U32                                  : 7;
181*437bfbebSnyanmisaka     } reg7_tbl_len;
182*437bfbebSnyanmisaka 
183*437bfbebSnyanmisaka     struct {
184*437bfbebSnyanmisaka         RK_U32 strm_start_byte                  : 4;
185*437bfbebSnyanmisaka         RK_U32 stream_len                       : 28;
186*437bfbebSnyanmisaka     } reg8_strm_len;
187*437bfbebSnyanmisaka 
188*437bfbebSnyanmisaka     RK_U32 reg9_qtbl_base;   //64 bytes align
189*437bfbebSnyanmisaka 
190*437bfbebSnyanmisaka     RK_U32 reg10_htbl_mincode_base;  //64 bytes align
191*437bfbebSnyanmisaka 
192*437bfbebSnyanmisaka     RK_U32 reg11_htbl_value_base;    //64 bytes align
193*437bfbebSnyanmisaka 
194*437bfbebSnyanmisaka     RK_U32 reg12_strm_base;  //16 bytes align
195*437bfbebSnyanmisaka 
196*437bfbebSnyanmisaka     RK_U32 reg13_dec_out_base;   //64 bytes align
197*437bfbebSnyanmisaka 
198*437bfbebSnyanmisaka     struct {
199*437bfbebSnyanmisaka         RK_U32 error_prc_mode                   : 1;
200*437bfbebSnyanmisaka         RK_U32 strm_r0_err_mode                 : 2;
201*437bfbebSnyanmisaka         RK_U32 strm_r1_err_mode                 : 2;
202*437bfbebSnyanmisaka         RK_U32 strm_ffff_err_mode               : 2;//default skip 0xffff
203*437bfbebSnyanmisaka         RK_U32 strm_other_mark_mode             : 2;
204*437bfbebSnyanmisaka         RK_U32 strm_dri_seq_err_mode            : 1;
205*437bfbebSnyanmisaka         RK_U32                                  : 6;
206*437bfbebSnyanmisaka         RK_U32 hfm_force_stop                   : 5;
207*437bfbebSnyanmisaka         RK_U32                                  : 11;
208*437bfbebSnyanmisaka     } reg14_strm_error;
209*437bfbebSnyanmisaka 
210*437bfbebSnyanmisaka     struct {
211*437bfbebSnyanmisaka         RK_U32 strm_r0_marker                   : 8;
212*437bfbebSnyanmisaka         RK_U32 strm_r0_mask                     : 8;
213*437bfbebSnyanmisaka         RK_U32 strm_r1_marker                   : 8;
214*437bfbebSnyanmisaka         RK_U32 strm_r1_mask                     : 8;
215*437bfbebSnyanmisaka     } reg15_strm_mask;
216*437bfbebSnyanmisaka 
217*437bfbebSnyanmisaka     union {
218*437bfbebSnyanmisaka         struct {
219*437bfbebSnyanmisaka             RK_U32  dec_clkgate_e                   : 1;
220*437bfbebSnyanmisaka             RK_U32  dec_strm_gate_e                 : 1;
221*437bfbebSnyanmisaka             RK_U32  dec_huffman_gate_e              : 1;
222*437bfbebSnyanmisaka             RK_U32  dec_izq_gate_e                  : 1;
223*437bfbebSnyanmisaka             RK_U32  dec_idct_gate_e                 : 1;
224*437bfbebSnyanmisaka             RK_U32  busifd_gate_e                   : 1;
225*437bfbebSnyanmisaka             RK_U32  post_prs_get_e                  : 1;
226*437bfbebSnyanmisaka             RK_U32  dec_sram_gate_e                 : 1;
227*437bfbebSnyanmisaka             RK_U32                                  : 24;
228*437bfbebSnyanmisaka         };
229*437bfbebSnyanmisaka         RK_U32 val;
230*437bfbebSnyanmisaka     } reg16_clk_gate;
231*437bfbebSnyanmisaka 
232*437bfbebSnyanmisaka     // 0x0044, bit[16:0]
233*437bfbebSnyanmisaka     RK_U32 reg17_low_delay_output;
234*437bfbebSnyanmisaka     // 0x0048, bit[16:0]
235*437bfbebSnyanmisaka     RK_U32 reg18_low_delay_output_status;
236*437bfbebSnyanmisaka 
237*437bfbebSnyanmisaka     // 0x004c ~ 0x0074
238*437bfbebSnyanmisaka     RK_U32 reg19_29[11];
239*437bfbebSnyanmisaka 
240*437bfbebSnyanmisaka     // 0x0078
241*437bfbebSnyanmisaka     struct {
242*437bfbebSnyanmisaka         RK_U32 axi_per_work_e                   : 1;
243*437bfbebSnyanmisaka         RK_U32 axi_per_clr_e                    : 1;
244*437bfbebSnyanmisaka         RK_U32 axi_perf_frm_tyep                : 1;
245*437bfbebSnyanmisaka         RK_U32 axi_cnt_type                     : 1;
246*437bfbebSnyanmisaka         RK_U32 rd_latency_id                    : 4;
247*437bfbebSnyanmisaka         RK_U32 rd_latency_thr                   : 12;
248*437bfbebSnyanmisaka         RK_U32                                  : 12;
249*437bfbebSnyanmisaka     } reg30_perf_latency_ctrl0;
250*437bfbebSnyanmisaka 
251*437bfbebSnyanmisaka     struct {
252*437bfbebSnyanmisaka         RK_U32 addr_align_type                  : 2;
253*437bfbebSnyanmisaka         RK_U32 ar_cnt_id_type                   : 1;
254*437bfbebSnyanmisaka         RK_U32 aw_cnt_id_type                   : 1;
255*437bfbebSnyanmisaka         RK_U32 ar_count_id                      : 4;
256*437bfbebSnyanmisaka         RK_U32 aw_count_id                      : 4;
257*437bfbebSnyanmisaka         RK_U32 rd_totoal_bytes_mode             : 1;
258*437bfbebSnyanmisaka         RK_U32                                  : 19;
259*437bfbebSnyanmisaka     } reg31_perf_latency_ctrl1;
260*437bfbebSnyanmisaka 
261*437bfbebSnyanmisaka     struct {
262*437bfbebSnyanmisaka         RK_U32 mcu_pos_x                        : 16;
263*437bfbebSnyanmisaka         RK_U32 mcu_pos_y                        : 16;
264*437bfbebSnyanmisaka     } reg32_dbg_mcu_pos;
265*437bfbebSnyanmisaka 
266*437bfbebSnyanmisaka     struct {
267*437bfbebSnyanmisaka         RK_U32 stream_dri_seq_err_sta           : 1;
268*437bfbebSnyanmisaka         RK_U32 stream_r0_err_sta                : 1;
269*437bfbebSnyanmisaka         RK_U32 stream_r1_err_sta                : 1;
270*437bfbebSnyanmisaka         RK_U32 stream_ffff_err_sta              : 1;
271*437bfbebSnyanmisaka         RK_U32 stream_other_mark_err_sta        : 1;
272*437bfbebSnyanmisaka         RK_U32                                  : 3;
273*437bfbebSnyanmisaka         RK_U32 huffman_mcu_cnt_l                : 1;
274*437bfbebSnyanmisaka         RK_U32 huffman_mcu_cnt_m                : 1;
275*437bfbebSnyanmisaka         RK_U32 huffman_eoi_without_end          : 1;
276*437bfbebSnyanmisaka         RK_U32 huffman_end_without_eoi          : 1;
277*437bfbebSnyanmisaka         RK_U32 huffman_overflow                 : 1;
278*437bfbebSnyanmisaka         RK_U32 huffman_buf_empty                : 1;
279*437bfbebSnyanmisaka         RK_U32                                  : 2;
280*437bfbebSnyanmisaka         RK_U32 first_error_idx                  : 4;
281*437bfbebSnyanmisaka         RK_U32                                  : 12;
282*437bfbebSnyanmisaka     } regs33_dbg_error_info;
283*437bfbebSnyanmisaka 
284*437bfbebSnyanmisaka     struct {
285*437bfbebSnyanmisaka         RK_U32 rd_max_latency_num_ch0           : 16;
286*437bfbebSnyanmisaka         RK_U32                                  : 16;
287*437bfbebSnyanmisaka     } reg34_perf_rd_max_latency_num0;
288*437bfbebSnyanmisaka 
289*437bfbebSnyanmisaka     RK_U32 reg35_perf_rd_latency_samp_num;
290*437bfbebSnyanmisaka 
291*437bfbebSnyanmisaka     RK_U32 reg36_perf_rd_latency_acc_sum;
292*437bfbebSnyanmisaka 
293*437bfbebSnyanmisaka     RK_U32 reg37_perf_rd_axi_total_byte;
294*437bfbebSnyanmisaka 
295*437bfbebSnyanmisaka     RK_U32 reg38_perf_wr_axi_total_byte;
296*437bfbebSnyanmisaka 
297*437bfbebSnyanmisaka     RK_U32 reg39_perf_working_cnt;
298*437bfbebSnyanmisaka 
299*437bfbebSnyanmisaka     struct {
300*437bfbebSnyanmisaka         RK_U32 bus_status_flag                  : 19;
301*437bfbebSnyanmisaka         RK_U32                                  : 13;
302*437bfbebSnyanmisaka     } reg40_dbg_bus_sta;
303*437bfbebSnyanmisaka 
304*437bfbebSnyanmisaka     struct {
305*437bfbebSnyanmisaka         RK_U32 work_status_flag                 : 18;
306*437bfbebSnyanmisaka         RK_U32                                  : 12;
307*437bfbebSnyanmisaka     } reg41_dbg_work_sta;
308*437bfbebSnyanmisaka 
309*437bfbebSnyanmisaka } JpegRegSet;
310*437bfbebSnyanmisaka 
311*437bfbebSnyanmisaka #endif /* __HAL_JPEGD_RKV_REG_H__ */