xref: /rockchip-linux_mpp/mpp/hal/rkenc/jpege/hal_jpege_vepu511_reg.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /* SPDX-License-Identifier: Apache-2.0 */
2 /*
3  * Copyright (c) 2025 Rockchip Electronics Co., Ltd.
4  */
5 
6 #ifndef __HAL_JPEGE_VEPU511_REG_H__
7 #define __HAL_JPEGE_VEPU511_REG_H__
8 
9 #include "rk_type.h"
10 #include "vepu511_common.h"
11 
12 typedef struct Vepu511JpegRoiRegion_t {
13     struct {
14         RK_U32 roi0_rdoq_start_x    : 11;
15         RK_U32 roi0_rdoq_start_y    : 11;
16         RK_U32 reserved             : 3;
17         RK_U32 roi0_rdoq_level      : 6;
18         RK_U32 roi0_rdoq_en         : 1;
19     } roi_cfg0;
20 
21     struct {
22         RK_U32 roi0_rdoq_width_m1     : 11;
23         RK_U32 roi0_rdoq_height_m1    : 11;
24         /* the below 10 bits only for roi0 */
25         RK_U32 reserved               : 3;
26         RK_U32 frm_rdoq_level         : 6;
27         RK_U32 frm_rdoq_en            : 1;
28     } roi_cfg1;
29 } Vepu511JpegRoiRegion;
30 
31 /* 0x00000400 reg256 - 0x0000050c reg323*/
32 typedef struct Vepu511JpegReg_t {
33     /* 0x00000400 reg256 */
34     RK_U32  adr_bsbt;
35 
36     /* 0x00000404 reg257 */
37     RK_U32  adr_bsbb;
38 
39     /* 0x00000408 reg258 */
40     RK_U32 adr_bsbs;
41 
42     /* 0x0000040c reg259 */
43     RK_U32 adr_bsbr;
44 
45     /* 0x00000410 reg260 */
46     RK_U32 adr_vsy_b;
47 
48     /* 0x00000414 reg261 */
49     RK_U32 adr_vsc_b;
50 
51     /* 0x00000418 reg262 */
52     RK_U32 adr_vsy_t;
53 
54     /* 0x0000041c reg263 */
55     RK_U32 adr_vsc_t;
56 
57     /* 0x00000420 reg264 */
58     RK_U32 adr_src0;
59 
60     /* 0x00000424 reg265 */
61     RK_U32 adr_src1;
62 
63     /* 0x00000428 reg266 */
64     RK_U32 adr_src2;
65 
66     /* 0x0000042c reg267 */
67     RK_U32 bsp_size;
68 
69     /* 0x430 - 0x43c */
70     RK_U32 reserved268_271[4];
71 
72     /* 0x00000440 reg272 */
73     struct {
74         RK_U32 pic_wd8_m1    : 11;
75         RK_U32 reserved      : 1;
76         RK_U32 pp0_vnum_m1   : 4;
77         RK_U32 pic_hd8_m1    : 11;
78         RK_U32 reserved1     : 1;
79         RK_U32 pp0_jnum_m1   : 4;
80     } enc_rsl;
81 
82     /* 0x00000444 reg273 */
83     struct {
84         RK_U32 pic_wfill    : 6;
85         RK_U32 reserved     : 10;
86         RK_U32 pic_hfill    : 6;
87         RK_U32 reserved1    : 10;
88     } src_fill;
89 
90     /* 0x00000448 reg274 */
91     struct {
92         RK_U32 alpha_swap            : 1;
93         RK_U32 rbuv_swap             : 1;
94         RK_U32 src_cfmt              : 4;
95         RK_U32 reserved              : 2;
96         RK_U32 src_range_trns_en     : 1;
97         RK_U32 src_range_trns_sel    : 1;
98         RK_U32 chroma_ds_mode        : 1;
99         RK_U32 reserved1             : 21;
100     } src_fmt;
101 
102     /* 0x0000044c reg275 */
103     struct {
104         RK_U32 csc_wgt_b2y    : 9;
105         RK_U32 csc_wgt_g2y    : 9;
106         RK_U32 csc_wgt_r2y    : 9;
107         RK_U32 reserved       : 5;
108     } src_udfy;
109 
110     /* 0x00000450 reg276 */
111     struct {
112         RK_U32 csc_wgt_b2u    : 9;
113         RK_U32 csc_wgt_g2u    : 9;
114         RK_U32 csc_wgt_r2u    : 9;
115         RK_U32 reserved       : 5;
116     } src_udfu;
117 
118     /* 0x00000454 reg277 */
119     struct {
120         RK_U32 csc_wgt_b2v    : 9;
121         RK_U32 csc_wgt_g2v    : 9;
122         RK_U32 csc_wgt_r2v    : 9;
123         RK_U32 reserved       : 5;
124     } src_udfv;
125 
126     /* 0x00000458 reg278 */
127     struct {
128         RK_U32 csc_ofst_v    : 8;
129         RK_U32 csc_ofst_u    : 8;
130         RK_U32 csc_ofst_y    : 5;
131         RK_U32 reserved      : 11;
132     } src_udfo;
133 
134     /* 0x0000045c reg279 */
135     struct {
136         RK_U32 cr_force_value     : 8;
137         RK_U32 cb_force_value     : 8;
138         RK_U32 chroma_force_en    : 1;
139         RK_U32 reserved           : 9;
140         RK_U32 src_mirr           : 1;
141         RK_U32 src_rot            : 2;
142         RK_U32 reserved1          : 1;
143         RK_U32 rkfbcd_en          : 1;
144         RK_U32 reserved2          : 1;
145     } src_proc;
146 
147     /* 0x00000460 reg280 */
148     struct {
149         RK_U32 pic_ofst_x    : 14;
150         RK_U32 reserved      : 2;
151         RK_U32 pic_ofst_y    : 14;
152         RK_U32 reserved1     : 2;
153     } pic_ofst;
154 
155     /* 0x00000464 reg281 */
156     struct {
157         RK_U32 src_strd0    : 21;
158         RK_U32 reserved     : 11;
159     } src_strd0;
160 
161     /* 0x00000468 reg282 */
162     struct {
163         RK_U32 src_strd1    : 16;
164         RK_U32 reserved     : 16;
165     } src_strd1;
166 
167     /* 0x0000046c reg283 */
168     struct {
169         RK_U32 pp_corner_filter_strength      : 2;
170         RK_U32 reserved                       : 2;
171         RK_U32 pp_edge_filter_strength        : 2;
172         RK_U32 reserved1                      : 2;
173         RK_U32 pp_internal_filter_strength    : 2;
174         RK_U32 reserved2                      : 22;
175     } src_flt_cfg;
176 
177     /* 0x00000470 reg284 */
178     struct {
179         RK_U32 bias_y    : 15;
180         RK_U32 reserved  : 17;
181     } y_cfg;
182 
183     /* 0x00000474 reg285 */
184     struct {
185         RK_U32 bias_u    : 15;
186         RK_U32 reserved  : 17;
187     } u_cfg;
188 
189     /* 0x00000478 reg286 */
190     struct {
191         RK_U32 bias_v    : 15;
192         RK_U32 reserved  : 17;
193     } v_cfg;
194 
195     /* 0x0000047c reg287 */
196     struct {
197         RK_U32 ri              : 25;
198         RK_U32 out_mode        : 1;
199         RK_U32 start_rst_m     : 3;
200         RK_U32 pic_last_ecs    : 1;
201         RK_U32 reserved        : 1;
202         RK_U32 stnd            : 1;
203     } base_cfg;
204 
205     /* 0x00000480 reg288 */
206     struct {
207         RK_U32 uvc_partition0_len    : 12;
208         RK_U32 uvc_partition_len     : 12;
209         RK_U32 uvc_skip_len          : 6;
210         RK_U32 reserved              : 2;
211     } uvc_cfg;
212 
213     /* 0x00000484 reg289 */
214     struct {
215         RK_U32 reserved     : 4;
216         RK_U32 eslf_badr    : 28;
217     } adr_eslf;
218 
219     /* 0x00000488 reg290 */
220     struct {
221         RK_U32 eslf_rptr    : 10;
222         RK_U32 eslf_wptr    : 10;
223         RK_U32 eslf_blen    : 10;
224         RK_U32 eslf_updt    : 2;
225     } eslf_buf;
226 
227     /* 0x48c */
228     RK_U32 reserved_291;
229 
230     /* 0x00000490 reg292 - 0x0000050c reg323*/
231     Vepu511JpegRoiRegion roi_regions[16];
232 } Vepu511JpegReg;
233 
234 /* 0x00002ca0 reg2856 - - 0x00002e1c reg2951 */
235 typedef struct JpegVepu511Tab_t {
236     RK_U16 qua_tab0[64];
237     RK_U16 qua_tab1[64];
238     RK_U16 qua_tab2[64];
239 } JpegVepu511Tab;
240 
241 typedef struct Vepu511JpegOsdCfg_t {
242     /* 0x00003138 reg3150 */
243     struct {
244         RK_U32 osd_en                : 1;
245         RK_U32 reserved              : 4;
246         RK_U32 osd_qp_adj_en         : 1;
247         RK_U32 osd_range_trns_en     : 1;
248         RK_U32 osd_range_trns_sel    : 1;
249         RK_U32 osd_fmt               : 4;
250         RK_U32 osd_alpha_swap        : 1;
251         RK_U32 osd_rbuv_swap         : 1;
252         RK_U32 reserved1             : 8;
253         RK_U32 osd_fg_alpha          : 8;
254         RK_U32 osd_fg_alpha_sel      : 2;
255     } osd_cfg0;
256 
257     /* 0x0000313c reg3151 */
258     struct {
259         RK_U32 osd_lt_xcrd    : 14;
260         RK_U32 osd_lt_ycrd    : 14;
261         RK_U32 osd_endn       : 4;
262     } osd_cfg1;
263 
264     /* 0x00003140 reg3152 */
265     struct {
266         RK_U32 osd_rb_xcrd    : 14;
267         RK_U32 osd_rb_ycrd    : 14;
268         RK_U32 reserved       : 4;
269     } osd_cfg2;
270 
271     /* 0x00003144 reg3153 */
272     RK_U32 osd_st_addr;
273 
274     /* 0x3148 */
275     RK_U32 reserved_3154;
276 
277     /* 0x0000314c reg3155 */
278     struct {
279         RK_U32 osd_stride        : 17;
280         RK_U32 reserved          : 8;
281         RK_U32 osd_ch_ds_mode    : 1;
282         RK_U32 reserved1         : 6;
283     } osd_cfg5;
284 
285     /* 0x00003150 reg3156 */
286     struct {
287         RK_U32 osd_v_b_lut0    : 8;
288         RK_U32 osd_u_g_lut0    : 8;
289         RK_U32 osd_y_r_lut0    : 8;
290         RK_U32 osd_v_b_lut1    : 8;
291     } osd_cfg6;
292 
293     /* 0x00003154 reg3157 */
294     struct {
295         RK_U32 osd0_u_g_lut1      : 8;
296         RK_U32 osd0_y_r_lut1      : 8;
297         RK_U32 osd0_alpha_lut0    : 8;
298         RK_U32 osd0_alpha_lut1    : 8;
299     } osd_cfg7;
300 
301     /* 0x3158 */
302     RK_U32 reserved_3158;
303 } JpegVepu511Osd_cfg;
304 
305 /* 0x00003138 reg3150 - - 0x00003264 reg3225 */
306 typedef struct Vepu511JpegOsd_t {
307     JpegVepu511Osd_cfg osd_cfg[8];
308     /* 0x00003258 reg3222 */
309     struct {
310         RK_U32 osd_csc_yr    : 9;
311         RK_U32 osd_csc_yg    : 9;
312         RK_U32 osd_csc_yb    : 9;
313         RK_U32 reserved      : 5;
314     } osd_whi_cfg0;
315 
316     /* 0x0000325c reg3223 */
317     struct {
318         RK_U32 osd_csc_ur    : 9;
319         RK_U32 osd_csc_ug    : 9;
320         RK_U32 osd_csc_ub    : 9;
321         RK_U32 reserved      : 5;
322     } osd_whi_cfg1;
323 
324     /* 0x00003260 reg3224 */
325     struct {
326         RK_U32 osd_csc_vr    : 9;
327         RK_U32 osd_csc_vg    : 9;
328         RK_U32 osd_csc_vb    : 9;
329         RK_U32 reserved      : 5;
330     } osd_whi_cfg2;
331 
332     /* 0x00003264 reg3225 */
333     struct {
334         RK_U32 osd_csc_ofst_y    : 8;
335         RK_U32 osd_csc_ofst_u    : 8;
336         RK_U32 osd_csc_ofst_v    : 8;
337         RK_U32 reserved          : 8;
338     } osd_whi_cfg3;
339 } JpegVepu511Osd;
340 
341 /* class: buffer/video syntax */
342 /* 0x00000270 reg156 - 0x0000050c reg323 */
343 typedef struct JpegVepu511Base_t {
344     /* 0x00000270 reg156  - 0x0000039c reg231 */
345     Vepu511FrmCommon    common;
346 
347     /* 0x000003a0 reg232 - 0x000003f4 reg253*/
348     RK_U32 reserved232_253[22];
349 
350     /* 0x000003f8 reg254 */
351     struct {
352         RK_U32 slice_sta_x      : 9;
353         RK_U32 reserved1        : 7;
354         RK_U32 slice_sta_y      : 10;
355         RK_U32 reserved2        : 5;
356         RK_U32 slice_enc_ena    : 1;
357     } slice_enc_cfg0;
358 
359     /* 0x000003fc reg255 */
360     struct {
361         RK_U32 slice_end_x    : 9;
362         RK_U32 reserved       : 7;
363         RK_U32 slice_end_y    : 10;
364         RK_U32 reserved1      : 6;
365     } slice_enc_cfg1;
366 
367     /* 0x00000400 reg256 - 0x0000050c reg323 */
368     Vepu511JpegReg jpegReg;
369 } JpegVepu511Base;
370 
371 typedef struct JpegV511RegSet_t {
372     Vepu511ControlCfg   reg_ctl;
373     JpegVepu511Base     reg_base;
374     JpegVepu511Tab      jpeg_table;
375     Vepu511OsdRegs      reg_osd;
376     Vepu511Dbg          reg_dbg;
377 } JpegV511RegSet;
378 
379 typedef struct JpegV511Status_t {
380     RK_U32 hw_status;
381     Vepu511Status st;
382 } JpegV511Status;
383 
384 #endif
385