xref: /rockchip-linux_mpp/mpp/hal/rkdec/h265d/hal_h265d_rkv_reg.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  *
3*437bfbebSnyanmisaka  * Copyright 2015 Rockchip Electronics Co. LTD
4*437bfbebSnyanmisaka  *
5*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
6*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
7*437bfbebSnyanmisaka  * You may obtain a copy of the License at
8*437bfbebSnyanmisaka  *
9*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
10*437bfbebSnyanmisaka  *
11*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
12*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
13*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
15*437bfbebSnyanmisaka  * limitations under the License.
16*437bfbebSnyanmisaka  */
17*437bfbebSnyanmisaka 
18*437bfbebSnyanmisaka /*
19*437bfbebSnyanmisaka  * @file       hal_h265d_reg.h
20*437bfbebSnyanmisaka  * @brief
21*437bfbebSnyanmisaka  * @author      csy(csy@rock-chips.com)
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka  * @version     1.0.0
24*437bfbebSnyanmisaka  * @history
25*437bfbebSnyanmisaka  *   2015.7.15 : Create
26*437bfbebSnyanmisaka  */
27*437bfbebSnyanmisaka 
28*437bfbebSnyanmisaka #ifndef __HAL_H265D_REG_H__
29*437bfbebSnyanmisaka #define __HAL_H265D_REG_H__
30*437bfbebSnyanmisaka 
31*437bfbebSnyanmisaka #include "rk_type.h"
32*437bfbebSnyanmisaka 
33*437bfbebSnyanmisaka #define HEVC_DECODER_REG_NUM        (48)
34*437bfbebSnyanmisaka #define RKVDEC_REG_PERF_CYCLE_INDEX (64)
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka #define RKVDEC_HEVC_REGISTERS       (68)
37*437bfbebSnyanmisaka #define RKVDEC_V1_REGISTERS         (78)
38*437bfbebSnyanmisaka #define V345_HEVC_REGISTERS         (108)
39*437bfbebSnyanmisaka 
40*437bfbebSnyanmisaka typedef struct RKV_HEVC_REG_END {
41*437bfbebSnyanmisaka     RK_U32        performance_cycle; //65
42*437bfbebSnyanmisaka     RK_U32        axi_ddr_rdata;
43*437bfbebSnyanmisaka     RK_U32        axi_ddr_wdata;
44*437bfbebSnyanmisaka     RK_U32        fpgadebug_reset;
45*437bfbebSnyanmisaka     RK_U32        reserve[9];
46*437bfbebSnyanmisaka     RK_U32        extern_error_en;
47*437bfbebSnyanmisaka } rkv_reg_end;
48*437bfbebSnyanmisaka 
49*437bfbebSnyanmisaka typedef struct V345_HEVC_REG_END {
50*437bfbebSnyanmisaka     struct hevc_mvc0 {
51*437bfbebSnyanmisaka         RK_U32    refp_layer_same_with_cur : 16  ;
52*437bfbebSnyanmisaka         RK_U32    reserve           : 16  ;
53*437bfbebSnyanmisaka     } reg064_mvc0;
54*437bfbebSnyanmisaka     RK_U32 reserve[55];
55*437bfbebSnyanmisaka } v345_reg_end;
56*437bfbebSnyanmisaka 
57*437bfbebSnyanmisaka typedef struct {
58*437bfbebSnyanmisaka     struct swreg_id {
59*437bfbebSnyanmisaka         RK_U32    minor_ver           : 8  ;
60*437bfbebSnyanmisaka         RK_U32    major_ver           : 8  ;
61*437bfbebSnyanmisaka         RK_U32    prod_num            : 16 ;
62*437bfbebSnyanmisaka     } sw_id;
63*437bfbebSnyanmisaka 
64*437bfbebSnyanmisaka     struct swreg_int {
65*437bfbebSnyanmisaka         RK_U32    sw_dec_e            : 1  ;
66*437bfbebSnyanmisaka         RK_U32    sw_dec_clkgate_e    : 1  ;
67*437bfbebSnyanmisaka         RK_U32    reserve0            : 2  ;
68*437bfbebSnyanmisaka         RK_U32    sw_dec_irq_dis      : 1  ;
69*437bfbebSnyanmisaka         RK_U32    sw_dec_timeout_e    : 1  ;
70*437bfbebSnyanmisaka         RK_U32    sw_buf_empty_en     : 1  ;
71*437bfbebSnyanmisaka         RK_U32    reserve1            : 1  ;
72*437bfbebSnyanmisaka         RK_U32    sw_dec_irq          : 1  ;
73*437bfbebSnyanmisaka         RK_U32    sw_dec_irq_raw      : 1  ;
74*437bfbebSnyanmisaka         RK_U32    reserve2            : 2  ;
75*437bfbebSnyanmisaka         RK_U32    sw_dec_rdy_sta      : 1  ;
76*437bfbebSnyanmisaka         RK_U32    sw_dec_bus_sta      : 1  ;
77*437bfbebSnyanmisaka         RK_U32    sw_dec_error_sta    : 1  ;
78*437bfbebSnyanmisaka         RK_U32    sw_dec_timeout_sta  : 1  ;
79*437bfbebSnyanmisaka         RK_U32    sw_dec_empty_sta    : 1  ;
80*437bfbebSnyanmisaka         RK_U32    reserve4            : 3  ;
81*437bfbebSnyanmisaka         RK_U32    sw_softrst_en_p     : 1  ;
82*437bfbebSnyanmisaka         RK_U32    sw_force_softreset_valid: 1 ;
83*437bfbebSnyanmisaka         RK_U32    sw_softreset_rdy    : 1  ;
84*437bfbebSnyanmisaka         RK_U32    sw_wr_ddr_align_en  : 1;
85*437bfbebSnyanmisaka         RK_U32    sw_scl_down_en      : 1;
86*437bfbebSnyanmisaka         RK_U32    sw_allow_not_wr_unref_bframe : 1;
87*437bfbebSnyanmisaka     } sw_interrupt; ///<- zrh: do nothing in C Model
88*437bfbebSnyanmisaka 
89*437bfbebSnyanmisaka     struct swreg_sysctrl {
90*437bfbebSnyanmisaka         RK_U32    sw_in_endian        : 1  ;
91*437bfbebSnyanmisaka         RK_U32    sw_in_swap32_e      : 1  ;
92*437bfbebSnyanmisaka         RK_U32    sw_in_swap64_e      : 1  ;
93*437bfbebSnyanmisaka         RK_U32    sw_str_endian       : 1  ;
94*437bfbebSnyanmisaka         RK_U32    sw_str_swap32_e     : 1  ;
95*437bfbebSnyanmisaka         RK_U32    sw_str_swap64_e     : 1  ;
96*437bfbebSnyanmisaka         RK_U32    sw_out_endian       : 1  ;
97*437bfbebSnyanmisaka         RK_U32    sw_out_swap32_e     : 1  ;
98*437bfbebSnyanmisaka         RK_U32    sw_out_cbcr_swap    : 1  ;
99*437bfbebSnyanmisaka         RK_U32    sw_error_info_en    : 1  ;
100*437bfbebSnyanmisaka         RK_U32    sw_rlc_mode_direct_write : 1;
101*437bfbebSnyanmisaka         RK_U32    sw_rlc_mode         : 1  ;
102*437bfbebSnyanmisaka         RK_U32    sw_strm_start_bit   : 7  ;
103*437bfbebSnyanmisaka         RK_U32    sw_inter_error_prc_mode : 1;
104*437bfbebSnyanmisaka         RK_U32    sw_dec_mode         : 2  ;
105*437bfbebSnyanmisaka         RK_U32    sw_info_collect_en  : 1  ;
106*437bfbebSnyanmisaka         RK_U32    sw_wait_reset_en    : 1  ;
107*437bfbebSnyanmisaka         RK_U32    sw_h26x_rps_mode    : 1  ;
108*437bfbebSnyanmisaka         RK_U32    reserve2            : 5  ;
109*437bfbebSnyanmisaka         RK_U32    sw_colmv_mode       : 1  ;
110*437bfbebSnyanmisaka         RK_U32    sw_head_prior_high_en : 1;
111*437bfbebSnyanmisaka     } sw_sysctrl;
112*437bfbebSnyanmisaka 
113*437bfbebSnyanmisaka     struct swreg_pic {
114*437bfbebSnyanmisaka         RK_U32    sw_y_hor_virstride  : 9 ;
115*437bfbebSnyanmisaka         RK_U32    reserve             : 3 ;
116*437bfbebSnyanmisaka         RK_U32    sw_uv_hor_virstride : 9 ;
117*437bfbebSnyanmisaka         RK_U32    sw_slice_num        : 8 ;
118*437bfbebSnyanmisaka     } sw_picparameter;
119*437bfbebSnyanmisaka 
120*437bfbebSnyanmisaka     RK_U32        sw_strm_rlc_base        ;///<- zrh: do nothing in C Model
121*437bfbebSnyanmisaka     RK_U32        sw_stream_len           ;///<- zrh: do nothing in C Model
122*437bfbebSnyanmisaka     RK_U32        sw_cabactbl_base        ;///<- zrh: do nothing in C Model
123*437bfbebSnyanmisaka     RK_U32        sw_decout_base          ;
124*437bfbebSnyanmisaka     RK_U32        sw_y_virstride          ;
125*437bfbebSnyanmisaka     RK_U32        sw_yuv_virstride        ;
126*437bfbebSnyanmisaka     RK_U32        sw_refer_base[15]       ;
127*437bfbebSnyanmisaka     RK_S32        sw_refer_poc[15]        ;
128*437bfbebSnyanmisaka     RK_S32        sw_cur_poc              ;
129*437bfbebSnyanmisaka     RK_U32        sw_rlcwrite_base        ;///<- zrh: do nothing in C Model
130*437bfbebSnyanmisaka     RK_U32        sw_pps_base             ;///<- zrh: do nothing in C Model
131*437bfbebSnyanmisaka     RK_U32        sw_rps_base             ;///<- zrh: do nothing in C Model
132*437bfbebSnyanmisaka     RK_U32        cabac_error_en          ;///<- zrh add
133*437bfbebSnyanmisaka     RK_U32        cabac_error_status      ;///<- zrh add
134*437bfbebSnyanmisaka 
135*437bfbebSnyanmisaka     struct cabac_error_ctu      {
136*437bfbebSnyanmisaka         RK_U32   sw_cabac_error_ctu_xoffset    : 8;
137*437bfbebSnyanmisaka         RK_U32   sw_cabac_error_ctu_yoffset    : 8;
138*437bfbebSnyanmisaka         RK_U32   sw_streamfifo_space2full      : 7;
139*437bfbebSnyanmisaka         RK_U32   reversed0                     : 9;
140*437bfbebSnyanmisaka     } cabac_error_ctu;
141*437bfbebSnyanmisaka 
142*437bfbebSnyanmisaka     struct sao_ctu_position     {
143*437bfbebSnyanmisaka         RK_U32   sw_saowr_xoffset              : 9;
144*437bfbebSnyanmisaka         RK_U32   reversed0                     : 7;
145*437bfbebSnyanmisaka         RK_U32   sw_saowr_yoffset             : 10;
146*437bfbebSnyanmisaka         RK_U32   reversed1                     : 6;
147*437bfbebSnyanmisaka     } sao_ctu_position;
148*437bfbebSnyanmisaka 
149*437bfbebSnyanmisaka     RK_U32        reg_not_use0[RKVDEC_REG_PERF_CYCLE_INDEX - HEVC_DECODER_REG_NUM];
150*437bfbebSnyanmisaka     union {
151*437bfbebSnyanmisaka         rkv_reg_end rkv_reg_ends;
152*437bfbebSnyanmisaka         v345_reg_end v345_reg_ends;
153*437bfbebSnyanmisaka     };
154*437bfbebSnyanmisaka } H265d_REGS_t;
155*437bfbebSnyanmisaka 
156*437bfbebSnyanmisaka #endif
157