xref: /rockchip-linux_mpp/mpp/hal/rkenc/h265e/hal_h265e_vepu541_reg.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /*
2  * Copyright 2015 Rockchip Electronics Co. LTD
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef __HAL_H265E_VEPU541_REG_H__
18 #define __HAL_H265E_VEPU541_REG_H__
19 
20 #include "rk_type.h"
21 
22 /* OSD position */
23 typedef struct {
24     RK_U32    lt_pos_x : 8; /* left-top */
25     RK_U32    lt_pos_y : 8;
26     RK_U32    rd_pos_x : 8; /* right-bottom */
27     RK_U32    rd_pos_y : 8;
28 } OsdPos;
29 
30 /* OSD palette */
31 typedef struct {
32     RK_U32     y : 8;
33     RK_U32     u : 8;
34     RK_U32     v : 8;
35     RK_U32     alpha : 8;
36 } OsdPlt;
37 typedef struct {
38     RK_U32    axi_brsp_cke : 7;
39     RK_U32    cime_dspw_orsd : 1;
40     RK_U32    reserve : 24;
41 } v541_dtrns_cfg;
42 
43 typedef struct {
44     RK_U32    Reserve0 : 7;
45     RK_U32    cime_dspw_orsd : 1;
46     RK_U32    reserve1 : 8;
47     RK_U32    axi_brsp_cke : 8;
48     RK_U32    reserve2 : 8;
49 } v540_dtrns_cfg;
50 
51 typedef struct H265eV541RegSet_t {
52 
53     /* reg[000] */
54     /* 0x0 - VERSION, swreg01 */
55     struct {
56         RK_U32    rkvenc_ver : 32;        //default : 0x0000_0001
57     } version;
58 
59     /* 0x4 - swreg02, ENC_STRT */
60     struct {
61         RK_U32    lkt_num : 8;
62         RK_U32    rkvenc_cmd : 2;
63         RK_U32    reserve : 6;
64         RK_U32    enc_cke : 1;
65         RK_U32    resetn_hw_en : 1;
66         RK_U32    enc_done_tmvp_en : 1;
67         RK_U32    Reserve : 13;
68     } enc_strt;
69 
70     /* 0x8 - ENC_CLR */
71     struct {
72         RK_U32    safe_clr  : 1;
73         RK_U32    force_clr : 1;
74         RK_U32    reserve   : 30;
75     } enc_clr;//swreg03
76 
77     /* 0xc - swreg04, LKT_ADDR */
78     struct {
79         RK_U32    lkt_addr : 32;
80     } lkt_addr;
81 
82     /* 0x10 - swreg05, INT_EN */
83     struct {
84         RK_U32    enc_done_en  : 1;
85         RK_U32    lkt_done_en  : 1;
86         RK_U32    sclr_done_en : 1;
87         RK_U32    slc_done_en  : 1;
88         RK_U32    bsf_ovflw_en : 1;
89         RK_U32    brsp_ostd_en : 1;
90         RK_U32    wbus_err_en  : 1;
91         RK_U32    rbus_err_en  : 1;
92         RK_U32    wdg_en       : 1;
93         RK_U32    reserve : 23;
94     } int_en;
95 
96     struct {
97         RK_U32    enc_done_msk  : 1;
98         RK_U32    lkt_done_msk  : 1;
99         RK_U32    sclr_done_msk : 1;
100         RK_U32    slc_done_msk  : 1;
101         RK_U32    bsf_folw_msk  : 1;
102         RK_U32    brsp_otsd_msk : 1;
103         RK_U32    wbus_err_msk  : 1;
104         RK_U32    rbus_err_msk  : 1;
105         RK_U32    wdg_msk       : 1;
106         RK_U32    reserved      : 23;;
107     } int_msk;  //swreg06, INT_MSK
108 
109     struct {
110         RK_U32    enc_done_clr  : 1;
111         RK_U32    lkt_done_clr  : 1;
112         RK_U32    sclr_done_clr : 1;
113         RK_U32    slc_done_clr  : 1;
114         RK_U32    bsf_folw_clr  : 1;
115         RK_U32    brsp_otsd_clr : 1;
116         RK_U32    wbus_err_clr : 1;
117         RK_U32    rbus_err_clr : 1;
118         RK_U32    wdg_msk  : 1;
119         RK_U32    reserved     : 23;
120     } int_clr;  //swreg07, INT_CLR
121 
122     /* 0x1C - swreg08, INT_STA */
123     struct {
124         RK_U32    reserve : 32;
125     } int_stus;
126 
127     RK_U32 reserved_0x20_0x2c[4];
128 
129     /* 0x30 - swreg09, ENC_RSL */
130     struct {
131         RK_U32    pic_wd8_m1 : 9;
132         RK_U32    reserve0 : 1;
133         RK_U32    pic_wfill : 6;
134         RK_U32    pic_hd8_m1 : 9;
135         RK_U32    reserve1 : 1;
136         RK_U32    pic_hfill : 6;
137     } enc_rsl;
138 
139     /* 0x34 - ENC_PIC */
140     struct {
141         RK_U32    enc_stnd     : 1;
142         RK_U32    roi_en       : 1;
143         RK_U32    cur_frm_ref  : 1;
144         RK_U32    mei_stor     : 1;
145         RK_U32    bs_scp       : 1;
146         RK_U32    rdo_wgt_sel  : 1;
147         RK_U32    reserved     : 2;
148         RK_U32    pic_qp       : 6;
149         RK_U32    tot_poc_num  : 5;
150         RK_U32    log2_ctu_num : 4;
151         RK_U32    atr_thd_sel  : 1;
152         RK_U32    dchs_rxid    : 2;
153         RK_U32    dchs_txid    : 2;
154         RK_U32    dchs_rxe     : 1;
155         RK_U32    satd_byps_en : 1;
156         RK_U32    slen_fifo    : 1;
157         RK_U32    node_int     : 1;
158     } enc_pic; //swreg10
159 
160     struct {
161         RK_U32    vs_load_thd : 24;
162         RK_U32    rfp_load_thd : 8;
163     } enc_wdg; //swreg11, ENC_WDG
164 
165     /* 0x3c - DTRNS_MAP */
166     struct {
167         RK_U32    lpfw_bus_ordr : 1; /* vepu540 used */
168         RK_U32    cmvw_bus_ordr : 1;
169         RK_U32    dspw_bus_ordr : 1;
170         RK_U32    rfpw_bus_ordr : 1;
171         RK_U32    src_bus_edin  : 4;
172         RK_U32    meiw_bus_edin : 4;
173         RK_U32    bsw_bus_edin  : 3;
174         RK_U32    lktr_bus_edin : 4;
175         RK_U32    roir_bus_edin : 4;
176         RK_U32    lktw_bus_edin : 4;
177         RK_U32    afbc_bsize : 1;
178         RK_U32    reserved      : 4;
179     } dtrns_map; //swreg12
180 
181     union {
182         v541_dtrns_cfg dtrns_cfg_541;
183         v540_dtrns_cfg dtrns_cfg_540;
184     };
185 
186     /* 0x44 - SRC_FMT */
187     struct {
188         RK_U32    alpha_swap : 1;
189         RK_U32    rbuv_swap : 1;
190         RK_U32    src_cfmt : 4;
191         RK_U32    src_range : 1;
192         RK_U32    out_fmt_cfg : 1;  //vepu540
193         RK_U32    reserve : 24;
194     } src_fmt;
195 
196     /* 0x48 - SRC_UDFY */
197     struct {
198         RK_S32    wght_b2y : 9;
199         RK_S32    wght_g2y : 9;
200         RK_S32    wght_r2y : 9;
201         RK_S32    reserved : 5;
202     } src_udfy;
203 
204     /* 0x4c - SRC_UDFU */
205     struct {
206         RK_S32    wght_b2u : 9;
207         RK_S32    wght_g2u : 9;
208         RK_S32    wght_r2u : 9;
209         RK_S32    reserved : 5;
210     } src_udfu;
211 
212     /* 0x50 - SRC_UDFV */
213     struct {
214         RK_S32    wght_b2v : 9;
215         RK_S32    wght_g2v : 9;
216         RK_S32    wght_r2v : 9;
217         RK_S32    reserved : 5;
218     } src_udfv;
219 
220     /* 0x54 - SRC_UDFO */
221     struct {
222         RK_U32    ofst_v : 8;
223         RK_U32    ofst_u : 8;
224         RK_U32    ofst_y : 5;
225         RK_U32    reserve : 11;
226     } src_udfo;
227 
228     /* 0x58 - SRC_PROC */
229     struct {
230         RK_U32    reserved0 : 26;
231         RK_U32    src_mirr  : 1;
232         RK_U32    src_rot   : 2;
233         RK_U32    txa_en    : 1;
234         RK_U32    afbcd_en  : 1;
235         RK_U32    reserved1 : 1;
236     } src_proc;
237 
238     /* 0x5c - MMU0_DTE_ADDR */
239     struct {
240         RK_U32    tile_width_m1  : 6;
241         RK_U32    reserved0      : 10;
242         RK_U32    tile_height_m1 : 6;
243         RK_U32    reserved1      : 9;
244         RK_U32    tile_en        : 1;
245     } tile_cfg;
246 
247     /* 0x60 - MMU1_DTE_ADDR */
248     struct {
249         RK_U32    tile_x    : 6;
250         RK_U32    reserved0 : 10;
251         RK_U32    tile_y    : 6;
252         RK_U32    reserved1 : 10;
253     } tile_pos;
254 
255     /* 0x64 - KLUT_OFST */
256     struct {
257         RK_U32 chrm_kult_ofst : 3;
258         RK_U32 reserved       : 29;
259     } klut_ofst;
260 
261     /* 0x68-0xc4 - KLUT_WGT */
262     struct {
263         RK_U32 chrm_klut_wgt0 : 18;
264         RK_U32 reserved       : 5;
265         RK_U32 chrm_klut_wgt1 : 9;
266     } klut_wgt0;
267 
268     struct {
269         RK_U32 chrm_klut_wgt1 : 9;
270         RK_U32 reserved       : 5;
271         RK_U32 chrm_klut_wgt2 : 18;
272     } klut_wgt1;
273 
274     struct {
275         RK_U32 chrm_klut_wgt3 : 18;
276         RK_U32 reserved       : 5;
277         RK_U32 chrm_klut_wgt4 : 9;
278     } klut_wgt2;
279 
280     struct {
281         RK_U32 chrm_klut_wgt4 : 9;
282         RK_U32 reserved       : 5;
283         RK_U32 chrm_klut_wgt5 : 18;
284     } klut_wgt3;
285 
286     struct {
287         RK_U32 chrm_klut_wgt6 : 18;
288         RK_U32 reserved       : 5;
289         RK_U32 chrm_klut_wgt7 : 9;
290     } klut_wgt4;
291 
292     struct {
293         RK_U32 chrm_klut_wgt7 : 9;
294         RK_U32 reserved       : 5;
295         RK_U32 chrm_klut_wgt8 : 18;
296     } klut_wgt5;
297 
298     struct {
299         RK_U32 chrm_klut_wgt9  : 18;
300         RK_U32 reserved        : 5;
301         RK_U32 chrm_klut_wgt10 : 9;
302     } klut_wgt6;
303 
304     struct {
305         RK_U32 chrm_klut_wgt10 : 9;
306         RK_U32 reserved        : 5;
307         RK_U32 chrm_klut_wgt11 : 18;
308     } klut_wgt7;
309 
310     struct {
311         RK_U32 chrm_klut_wgt12 : 18;
312         RK_U32 reserved        : 5;
313         RK_U32 chrm_klut_wgt13 : 9;
314     } klut_wgt8;
315 
316     struct {
317         RK_U32 chrm_klut_wgt13 : 9;
318         RK_U32 reserved        : 5;
319         RK_U32 chrm_klut_wgt14 : 18;
320     } klut_wgt9;
321 
322     struct {
323         RK_U32 chrm_klut_wgt15 : 18;
324         RK_U32 reserved        : 5;
325         RK_U32 chrm_klut_wgt16 : 9;
326     } klut_wgt10;
327 
328     struct {
329         RK_U32 chrm_klut_wgt16 : 9;
330         RK_U32 reserved        : 5;
331         RK_U32 chrm_klut_wgt17 : 18;
332     } klut_wgt11;
333 
334     struct {
335         RK_U32 chrm_klut_wgt18 : 18;
336         RK_U32 reserved        : 5;
337         RK_U32 chrm_klut_wgt19 : 9;
338     } klut_wgt12;
339 
340     struct {
341         RK_U32 chrm_klut_wgt19 : 9;
342         RK_U32 reserved        : 5;
343         RK_U32 chrm_klut_wgt20 : 18;
344     } klut_wgt13;
345 
346     struct {
347         RK_U32 chrm_klut_wgt21 : 18;
348         RK_U32 reserved        : 5;
349         RK_U32 chrm_klut_wgt22 : 9;
350     } klut_wgt14;
351 
352     struct {
353         RK_U32 chrm_klut_wgt22 : 9;
354         RK_U32 reserved        : 5;
355         RK_U32 chrm_klut_wgt23 : 18;
356     } klut_wgt15;
357 
358     struct {
359         RK_U32 chrm_klut_wgt24 : 18;
360         RK_U32 reserved        : 5;
361         RK_U32 chrm_klut_wgt25 : 9;
362     } klut_wgt16;
363 
364     struct {
365         RK_U32 chrm_klut_wgt25 : 9;
366         RK_U32 reserved        : 5;
367         RK_U32 chrm_klut_wgt26 : 18;
368     } klut_wgt17;
369 
370     struct {
371         RK_U32 chrm_klut_wgt27 : 18;
372         RK_U32 reserved        : 5;
373         RK_U32 chrm_klut_wgt28 : 9;
374     } klut_wgt18;
375 
376     struct {
377         RK_U32 chrm_klut_wgt28 : 9;
378         RK_U32 reserved        : 5;
379         RK_U32 chrm_klut_wgt29 : 18;
380     } klut_wgt19;
381 
382     struct {
383         RK_U32 chrm_klut_wgt30 : 18;
384         RK_U32 reserved        : 5;
385         RK_U32 chrm_klut_wgt31 : 9;
386     } klut_wgt20;
387 
388     struct {
389         RK_U32 chrm_klut_wgt31 : 9;
390         RK_U32 reserved        : 5;
391         RK_U32 chrm_klut_wgt32 : 18;
392     } klut_wgt21;
393 
394     struct {
395         RK_U32 chrm_klut_wgt33 : 18;
396         RK_U32 reserved        : 5;
397         RK_U32 chrm_klut_wgt34 : 9;
398     } klut_wgt22;
399 
400     /* 0xc4 - klut_wgt23 */
401     struct {
402         RK_U32 chrm_klut_wgt34 : 9;
403         RK_U32 reserved        : 23;
404     } klut_wgt23;
405 
406     /* 0xc8 - RC_CFG */
407     struct {
408         RK_U32    rc_en      : 1;
409         RK_U32    aqmode_en  : 1;
410         RK_U32    qp_mode    : 1;
411         RK_U32    reserved   : 13;
412         RK_U32    rc_ctu_num : 16;
413     } rc_cfg;
414 
415     /* 0xcc - RC_QP */
416     struct {
417         RK_U32    reserved    : 16;
418         RK_U32    rc_qp_range : 4;
419         RK_U32    rc_max_qp   : 6;
420         RK_U32    rc_min_qp   : 6;
421     } rc_qp;
422 
423     /* 0xd0 - swreg55, RC_TGT */
424     struct {
425         RK_U32    ctu_ebits : 20;
426         RK_U32    reserve : 12;
427     } rc_tgt;
428 
429     /* 0xd4 - RC_ADJ0 */
430     struct {
431         RK_S32    qp_adjust0 : 5;
432         RK_S32    qp_adjust1 : 5;
433         RK_S32    qp_adjust2 : 5;
434         RK_S32    qp_adjust3 : 5;
435         RK_S32    qp_adjust4 : 5;
436         RK_S32    reserved   : 7;
437     } rc_adj0;
438 
439     /* 0xd8 - RCADJ1 */
440     struct {
441         RK_S32    qp_adjust5 : 5;
442         RK_S32    qp_adjust6 : 5;
443         RK_S32    qp_adjust7 : 5;
444         RK_S32    qp_adjust8 : 5;
445         RK_S32    reserved   : 12;
446     } rc_adj1;
447 
448     /* 0xdc-0xfc swreg47, */
449     struct {
450         RK_S32    bits_thd0;
451     } rc_erp0; //RC_ERP0
452 
453     struct {
454         RK_S32    bits_thd1;
455     } rc_erp1; //swreg48, RC_ERP1
456 
457     struct {
458         RK_S32    bits_thd2;
459     } rc_erp2; //swreg49, RC_ERP2
460 
461     struct {
462         RK_S32    bits_thd3;
463     } rc_erp3; //swreg50, RC_ERP3
464 
465     struct {
466         RK_S32    bits_thd4;
467     } rc_erp4; //swreg51, RC_ERP4
468 
469     /* 0xec-0xf8 */
470     struct {
471         RK_S32 bits_thd5;
472     } rc_erp5;
473 
474     struct {
475         RK_S32 bits_thd6;
476     } rc_erp6;
477 
478     struct {
479         RK_S32 bits_thd7;
480     } rc_erp7;
481 
482     /* 0xfc - RC_ERP8 */
483     struct {
484         RK_S32 bits_thd8;
485     } rc_erp8;
486 
487     /* 0x100 - QPMAP0 */
488     struct {
489         RK_U32 qpmin_area0 : 6;
490         RK_U32 qpmax_area0 : 6;
491         RK_U32 qpmin_area1 : 6;
492         RK_U32 qpmax_area1 : 6;
493         RK_U32 qpmin_area2 : 6;
494         RK_U32 reserved    : 2;
495     } qpmap0;
496 
497     /* 0x104 - QPMAP1 */
498     struct {
499         RK_U32 qpmax_area2 : 6;
500         RK_U32 qpmin_area3 : 6;
501         RK_U32 qpmax_area3 : 6;
502         RK_U32 qpmin_area4 : 6;
503         RK_U32 qpmax_area4 : 6;
504         RK_U32 reserved    : 2;
505     } qpmap1;
506 
507     /* 0x108 - QPMAP2 */
508     struct {
509         RK_U32 qpmin_area5 : 6;
510         RK_U32 qpmax_area5 : 6;
511         RK_U32 qpmin_area6 : 6;
512         RK_U32 qpmax_area6 : 6;
513         RK_U32 qpmin_area7 : 6;
514         RK_U32 reserved    : 2;
515     } qpmap2;
516 
517     /* 0x10c - QPMAP3 */
518     struct {
519         RK_U32 qpmax_area7 : 6;
520         RK_U32 reserved    : 24;
521         RK_U32 qpmap_mode  : 2;
522     } qpmap3;
523 
524     /* 0x110 - PIC_OFST */
525     struct {
526         RK_U32 pic_ofst_y : 13;
527         RK_U32 reserved0  : 3;
528         RK_U32 pic_ofst_x : 13;
529         RK_U32 reserved1  : 3;
530     } pic_ofst;
531 
532     /* 0x114 - swreg23, SRC_STRID */
533     struct {
534         RK_U32 src_ystrid : 16;
535         RK_U32 src_cstrid : 16;
536     } src_strid;
537 
538     RK_U32 adr_srcy_hevc; /* 0x118 */
539     RK_U32 adr_srcu_hevc;
540     RK_U32 adr_srcv_hevc;
541     RK_U32 roi_addr_hevc;
542     RK_U32 rfpw_h_addr_hevc;
543     RK_U32 rfpw_b_addr_hevc;
544     RK_U32 rfpr_h_addr_hevc;
545     RK_U32 rfpr_b_addr_hevc;
546     RK_U32 cmvw_addr_hevc;
547     RK_U32 cmvr_addr_hevc;
548     RK_U32 dspw_addr_hevc;
549     RK_U32 dspr_addr_hevc;
550     RK_U32 meiw_addr_hevc;
551     RK_U32 bsbt_addr_hevc;
552     RK_U32 bsbb_addr_hevc;
553     RK_U32 bsbr_addr_hevc;
554     RK_U32 bsbw_addr_hevc; /* 0x158 */
555 
556     /* 0x15c - swreg41, SLI_SPL */
557     struct {
558         RK_U32    sli_splt : 1;
559         RK_U32    sli_splt_mode : 1;
560         RK_U32    sli_splt_cpst : 1;
561         RK_U32    sli_max_num_m1 : 10;
562         RK_U32    sli_flsh : 1;
563         RK_U32    reserve : 2;
564         RK_U32    sli_splt_cnum_m1 : 16;
565     } sli_spl;
566 
567     /* 0x160 - swreg42, SLI_SPL_BYTE */
568     struct {
569         RK_U32    sli_splt_byte : 18;
570         RK_U32    reserve : 14;
571     } sli_spl_byte;
572 
573     /* 0x164 - swreg43, ME_RNGE */
574     struct {
575         RK_U32    cime_srch_h : 4;
576         RK_U32    cime_srch_v : 4;
577         RK_U32    rime_srch_h : 3;
578         RK_U32    rime_srch_v : 3;
579         RK_U32    reserved : 2;
580         RK_U32    dlt_frm_num : 16;
581     } me_rnge;
582 
583     /* 0x168 - swreg44, ME_CNST */
584     struct {
585         RK_U32 pmv_mdst_h  : 8;
586         RK_U32 pmv_mdst_v  : 8;
587         RK_U32 mv_limit    : 2;
588         RK_U32 mv_num      : 2;
589         RK_U32 colmv_store : 1;
590         RK_U32 colmv_load  : 1;
591         RK_U32 rime_dis_en : 5; /* used for rtl debug */
592         RK_U32 fme_dis_en  : 5; /* used for rtl debug */
593     } me_cnst;
594 
595     /* 0x16c - ME_RAM */
596     struct {
597         RK_U32    cime_rama_max : 11;
598         RK_U32    cime_rama_h   : 5;
599         RK_U32    cach_l2_tag   : 2;
600         RK_U32    cime_linebuf_w: 8;  /*only used for 540*/
601         RK_U32    reserved      : 6;
602     } me_ram;
603 
604     /*0x170 - SYNT_REF_MARK4*/
605     struct {
606         RK_U32 poc_lsb_lt1 : 16;
607         RK_U32 poc_lsb_lt2 : 16;
608     } synt_ref_mark4;
609 
610     /*0x174 SYNT_REF_MARK5*/
611     struct {
612         RK_U32 dlt_poc_msb_cycl1 : 16;
613         RK_U32 dlt_poc_msb_cycl2 : 16;
614     } synt_ref_mark5;
615 
616     struct {
617         RK_U32 osd_ch_inv_en : 8;
618         RK_U32 osd_itype : 8;
619         RK_U32 osd_lu_inv_msk : 8;
620         RK_U32 osd_ch_inv_msk : 8;
621     } osd_inv_cfg;
622     RK_U32 lpfw_addr_hevc;
623     RK_U32 lpfr_addr_hevc;
624     RK_U32 reserved_0x184_0x190[4];
625 
626     /* 0x194 - REG_THD, reserved */
627     RK_U32 reg_thd;
628 
629     /* 0x198 - swreg56, RDO_CFG */
630     struct {
631         RK_U32    ltm_col      : 1;
632         RK_U32    ltm_idx0l0   : 1;
633         RK_U32    chrm_special : 1;
634         RK_U32    rdoq_en      : 1; /* may be used in the future */
635         RK_U32    reserved0    : 2;
636         RK_U32    cu_inter_en  : 4;
637         RK_U32    reserved1    : 9;
638         RK_U32    cu_intra_en  : 4;
639         RK_U32    chrm_klut_en : 1;
640         RK_U32    seq_scaling_matrix_present_flg : 2;
641         RK_U32    reserved2    : 5;
642         RK_U32    stad_byps_flg : 1;  /*only for 540*/
643     } rdo_cfg;
644 
645     /* 0x19c - swreg57, SYNT_NAL */
646     struct {
647         RK_U32    nal_unit_type : 6;
648         RK_U32    reserve : 26;
649     } synt_nal;
650 
651     /* 0x1a0 - swreg58, SYNT_SPS */
652     struct {
653         RK_U32    smpl_adpt_ofst_en : 1;
654         RK_U32    num_st_ref_pic : 7;
655         RK_U32    lt_ref_pic_prsnt : 1;
656         RK_U32    num_lt_ref_pic : 6;
657         RK_U32    tmpl_mvp_en : 1;
658         RK_U32    log2_max_poc_lsb : 4;
659         RK_U32    strg_intra_smth : 1;
660         RK_U32    reserved : 11;
661     } synt_sps;
662 
663     /* 0x1a4 - swreg59, SYNT_PPS */
664     struct {
665         RK_U32    dpdnt_sli_seg_en : 1;
666         RK_U32    out_flg_prsnt_flg : 1;
667         RK_U32    num_extr_sli_hdr : 3;
668         RK_U32    sgn_dat_hid_en : 1;
669         RK_U32    cbc_init_prsnt_flg : 1;
670         RK_U32    pic_init_qp : 6;
671         RK_U32    cu_qp_dlt_en : 1;
672         RK_U32    chrm_qp_ofst_prsn : 1;
673         RK_U32    lp_fltr_acrs_sli : 1;
674         RK_U32    dblk_fltr_ovrd_en : 1;
675         RK_U32    lst_mdfy_prsnt_flg : 1;
676         RK_U32    sli_seg_hdr_extn : 1;
677         RK_U32    cu_qp_dlt_depth  : 2;
678         RK_U32    lpf_fltr_acrs_til : 1; /*only for 540*/
679         RK_U32    reserved : 10;
680     } synt_pps;
681 
682     /* 0x1a8 - swreg60, SYNT_SLI0 */
683     struct {
684         RK_U32    cbc_init_flg : 1;
685         RK_U32    mvd_l1_zero_flg : 1;
686         RK_U32    merge_up_flag : 1;
687         RK_U32    merge_left_flag : 1;
688         RK_U32    reserved : 1;
689         RK_U32    ref_pic_lst_mdf_l0 : 1;
690         RK_U32    num_refidx_l1_act : 2;
691         RK_U32    num_refidx_l0_act : 2;
692         RK_U32    num_refidx_act_ovrd : 1;
693         RK_U32    sli_sao_chrm_flg : 1;
694         RK_U32    sli_sao_luma_flg : 1;
695         RK_U32    sli_tmprl_mvp_en : 1;
696         RK_U32    pic_out_flg : 1;
697         RK_U32    sli_type : 2;
698         RK_U32    sli_rsrv_flg : 7;
699         RK_U32    dpdnt_sli_seg_flg : 1;
700         RK_U32    sli_pps_id : 6;
701         RK_U32    no_out_pri_pic : 1;
702     } synt_sli0;
703 
704     /* 0x1ac - swreg61, SYNT_SLI1 */
705     struct {
706         RK_S32    sli_tc_ofst_div2            : 4;
707         RK_S32    sli_beta_ofst_div2        : 4;
708         RK_U32    sli_lp_fltr_acrs_sli         : 1;
709         RK_U32    sli_dblk_fltr_dis           : 1;
710         RK_U32    dblk_fltr_ovrd_flg        : 1;
711         RK_S32    sli_cb_qp_ofst             : 5;
712         RK_U32    sli_qp                         : 6;
713         RK_U32    max_mrg_cnd                : 3;
714         RK_U32    col_ref_idx                 : 1;
715         RK_U32    col_frm_l0_flg            : 1;
716         RK_U32    lst_entry_l0                : 4;
717         RK_U32    reserved                    : 1;
718     } synt_sli1;
719 
720     /* 0x1b0 - swreg62, SYNT_SLI2_RODR */
721     struct {
722         RK_U32    sli_poc_lsb : 16;
723         RK_U32    sli_hdr_ext_len : 9;
724         RK_U32    reserve : 7;
725     } synt_sli2_rodr;
726 
727     /* 0x1b4 - swreg63, SYNT_REF_MARK0 */
728     struct {
729         RK_U32    st_ref_pic_flg : 1;
730         RK_U32    poc_lsb_lt0 : 16;
731         RK_U32    lt_idx_sps : 5;
732         RK_U32    num_lt_pic : 2;
733         RK_U32    st_ref_pic_idx : 6;
734         RK_U32    num_lt_sps : 2;
735     } synt_ref_mark0;
736 
737     /* 0x1b8 - swreg64, SYNT_REF_MARK1 */
738     struct {
739         RK_U32    used_by_s0_flg : 4;
740         RK_U32    num_pos_pic : 1;
741         RK_U32    num_neg_pic : 5;
742         RK_U32    dlt_poc_msb_cycl0 : 16;
743         RK_U32    dlt_poc_msb_prsnt0 : 1;
744         RK_U32    dlt_poc_msb_prsnt1 : 1;
745         RK_U32    dlt_poc_msb_prsnt2 : 1;
746         RK_U32    used_by_lt_flg0 : 1;
747         RK_U32    used_by_lt_flg1 : 1;
748         RK_U32    used_by_lt_flg2 : 1;
749     } synt_ref_mark1;
750 
751     RK_U32 reserved_0x1bc; /* not used for a long time */
752 
753     /* 0x1c0 - OSD_CFG */
754     struct {
755         RK_U32    osd_en       : 8;
756         RK_U32    osd_inv      : 8;
757         RK_U32    osd_clk_sel  : 1;
758         RK_U32    osd_plt_type : 1;
759         RK_U32    reserved     : 14;
760     } osd_cfg;
761 
762     /* 0x1c4 - OSD_INV */
763     struct {
764         RK_U32    osd_inv_r0 : 4;
765         RK_U32    osd_inv_r1 : 4;
766         RK_U32    osd_inv_r2 : 4;
767         RK_U32    osd_inv_r3 : 4;
768         RK_U32    osd_inv_r4 : 4;
769         RK_U32    osd_inv_r5 : 4;
770         RK_U32    osd_inv_r6 : 4;
771         RK_U32    osd_inv_r7 : 4;
772     } osd_inv;
773 
774     /* 0x1c8 - SYNT_REF_MARK2 */
775     struct {
776         RK_U32    dlt_poc_s0_m10 : 16;
777         RK_U32    dlt_poc_s0_m11 : 16;
778     } synt_ref_mark2;
779 
780     /* 0x1cc - SYNT_REF_MARK3 */
781     struct {
782         RK_U32    dlt_poc_s0_m12 : 16;
783         RK_U32    dlt_poc_s0_m13 : 16;
784     } synt_ref_mark3;
785 
786     /* 0x1d0-0x1ec - OSD_POS0-OSD_POS7 */
787     OsdPos osd_pos[8];
788 
789     /* 0x1f0-0x20c - OSD_ADDR0-OSD_ADDR7 */
790     RK_U32    osd_addr[8];
791 
792     /* 0x210 - ST_BSL */
793     struct {
794         RK_U32    bs_lgth : 32;
795     } st_bsl;
796 
797     /* 0x214 - ST_SSE_L32 */
798     struct {
799         RK_U32    sse_l32 : 32;
800     } st_sse_l32;
801 
802     /* 0x218 - ST_SSE_QP */
803     struct {
804         RK_U32    qp_sum : 24;  /* sum of valid CU8x8s' QP */
805         RK_U32    sse_h8 : 8;
806     } st_sse_qp;
807 
808     /* 0x21c - ST_SAO */
809     struct {
810         RK_U32    slice_scnum : 12;
811         RK_U32    slice_slnum : 12;
812         RK_U32    reserve : 8;
813     } st_sao;
814 
815     /* 0x220 - MMU0_STA, used by hardware?? */
816     RK_U32 mmu0_sta;
817     RK_U32 mmu1_sta;
818 
819     /* 0x228 - ST_ENC */
820     struct {
821         RK_U32    st_enc : 2;
822         RK_U32    axiw_cln : 2;
823         RK_U32    axir_cln : 2;
824         RK_U32    reserve : 26;
825     } st_enc;
826 
827     /* 0x22c - ST_LKT */
828     struct {
829         RK_U32    fnum_enc : 8;
830         RK_U32    fnum_cfg : 8;
831         RK_U32    fnum_int : 8;
832         RK_U32    reserve : 8;
833     } st_lkt;
834 
835     /* 0x230 - ST_NOD */
836     struct {
837         RK_U32    node_addr : 32;
838     } st_nod;
839 
840     /* 0x234 - ST_BSB */
841     struct {
842         RK_U32    Bsbw_ovfl : 1;
843         RK_U32    reserve : 2;
844         RK_U32    bsbw_addr : 29;
845     } st_bsb;
846 
847     /* 0x238 - ST_DTRNS */
848     struct {
849         RK_U32    axib_idl : 7;
850         RK_U32    axib_ful : 7;
851         RK_U32    axib_err : 7;
852         RK_U32    axir_err : 6;
853         RK_U32    reserve : 5;
854     } st_dtrns;
855 
856     /* 0x23c - ST_SNUM */
857     struct {
858         RK_U32    slice_num : 6;
859         RK_U32    reserve : 26;
860     } st_snum;
861 
862     /* 0x240 - ST_SLEN */
863     struct {
864         RK_U32    slice_len : 23;
865         RK_U32    reserve : 9;
866     } st_slen;
867 
868     /* 0x244-0x340 - debug registers
869      * ST_LVL64_INTER_NUM etc.
870      */
871     RK_U32 st_lvl64_inter_num;
872     RK_U32 st_lvl32_inter_num;
873     RK_U32 st_lvl16_inter_num;
874     RK_U32 st_lvl8_inter_num;
875     RK_U32 st_lvl32_intra_num;
876     RK_U32 st_lvl16_intra_num;
877     RK_U32 st_lvl8_intra_num;
878     RK_U32 st_lvl4_intra_num;
879     RK_U32 st_cu_num_qp[52];
880     RK_U32 st_madp;
881     RK_U32 st_ctu_num; /* used for MADP calculation */
882     RK_U32 st_madi;
883     RK_U32 st_mb_num; /* used for MADI calculation */
884 
885 } H265eV541RegSet;
886 
887 typedef struct H265eV541IoctlExtraInfoElem_t {
888     RK_U32 reg_idx;
889     RK_U32 offset;
890 } H265eV541IoctlExtraInfoElem;
891 
892 typedef struct H265eV541IoctlExtraInfo_t {
893     RK_U32                          magic;
894     RK_U32                          cnt;
895     H265eV541IoctlExtraInfoElem     elem[20];
896 } H265eV541IoctlExtraInfo;
897 
898 typedef struct H265eV541IoctlOutputElem_t {
899     RK_U32 hw_status;
900 
901     struct {
902         RK_U32    bs_lgth : 32;
903     } st_bsl;
904 
905     /* 0x214 - ST_SSE_L32 */
906     struct {
907         RK_U32    sse_l32 : 32;
908     } st_sse_l32;
909 
910     /* 0x218 - ST_SSE_QP */
911     struct {
912         RK_U32    qp_sum : 24;  /* sum of valid CU8x8s' QP */
913         RK_U32    sse_h8 : 8;
914     } st_sse_qp;
915 
916     /* 0x21c - ST_SAO */
917     struct {
918         RK_U32    slice_scnum : 12;
919         RK_U32    slice_slnum : 12;
920         RK_U32    reserve : 8;
921     } st_sao;
922 
923     /* 0x220 - MMU0_STA, used by hardware?? */
924     RK_U32 mmu0_sta;
925     RK_U32 mmu1_sta;
926 
927     /* 0x228 - ST_ENC */
928     struct {
929         RK_U32    st_enc : 2;
930         RK_U32    axiw_cln : 2;
931         RK_U32    axir_cln : 2;
932         RK_U32    reserve : 26;
933     } st_enc;
934 
935     /* 0x22c - ST_LKT */
936     struct {
937         RK_U32    fnum_enc : 8;
938         RK_U32    fnum_cfg : 8;
939         RK_U32    fnum_int : 8;
940         RK_U32    reserve : 8;
941     } st_lkt;
942 
943     /* 0x230 - ST_NOD */
944     struct {
945         RK_U32    node_addr : 32;
946     } st_nod;
947 
948     /* 0x234 - ST_BSB */
949     struct {
950         RK_U32    Bsbw_ovfl : 1;
951         RK_U32    reserve : 2;
952         RK_U32    bsbw_addr : 29;
953     } st_bsb;
954 
955     /* 0x238 - ST_DTRNS */
956     struct {
957         RK_U32    axib_idl : 7;
958         RK_U32    axib_ful : 7;
959         RK_U32    axib_err : 7;
960         RK_U32    axir_err : 6;
961         RK_U32    reserve : 5;
962     } st_dtrns;
963 
964     /* 0x23c - ST_SNUM */
965     struct {
966         RK_U32    slice_num : 6;
967         RK_U32    reserve : 26;
968     } st_snum;
969 
970     /* 0x240 - ST_SLEN */
971     struct {
972         RK_U32    slice_len : 23;
973         RK_U32    reserve : 9;
974     } st_slen;
975     RK_U32 st_lvl64_inter_num;
976     RK_U32 st_lvl32_inter_num;
977     RK_U32 st_lvl16_inter_num;
978     RK_U32 st_lvl8_inter_num;
979     RK_U32 st_lvl32_intra_num;
980     RK_U32 st_lvl16_intra_num;
981     RK_U32 st_lvl8_intra_num;
982     RK_U32 st_lvl4_intra_num;
983     RK_U32 st_cu_num_qp[52];
984     RK_U32 st_madp;
985     RK_U32 st_ctu_num; /* used for MADP calculation */
986     RK_U32 st_madi;
987     RK_U32 st_mb_num; /* used for MADI calculation */
988 } H265eV541IoctlOutputElem;
989 
990 #endif
991