1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Copyright (c) 2021, Collabora |
4 | * |
5 | * Author: Benjamin Gaignard <benjamin.gaignard@collabora.com> |
6 | */ |
7 | |
8 | #ifndef HANTRO_G2_REGS_H_ |
9 | #define HANTRO_G2_REGS_H_ |
10 | |
11 | #include "hantro.h" |
12 | |
13 | #define G2_SWREG(nr) ((nr) * 4) |
14 | |
15 | #define G2_DEC_REG(b, s, m) \ |
16 | ((const struct hantro_reg) { \ |
17 | .base = G2_SWREG(b), \ |
18 | .shift = s, \ |
19 | .mask = m, \ |
20 | }) |
21 | |
22 | #define G2_REG_VERSION G2_SWREG(0) |
23 | |
24 | #define G2_REG_INTERRUPT G2_SWREG(1) |
25 | #define G2_REG_INTERRUPT_DEC_RDY_INT BIT(12) |
26 | #define G2_REG_INTERRUPT_DEC_ABORT_E BIT(5) |
27 | #define G2_REG_INTERRUPT_DEC_IRQ_DIS BIT(4) |
28 | #define G2_REG_INTERRUPT_DEC_E BIT(0) |
29 | |
30 | #define HEVC_DEC_MODE 0xc |
31 | #define VP9_DEC_MODE 0xd |
32 | |
33 | #define BUS_WIDTH_32 0 |
34 | #define BUS_WIDTH_64 1 |
35 | #define BUS_WIDTH_128 2 |
36 | #define BUS_WIDTH_256 3 |
37 | |
38 | #define g2_strm_swap G2_DEC_REG(2, 28, 0xf) |
39 | #define g2_strm_swap_old G2_DEC_REG(2, 27, 0x1f) |
40 | #define g2_pic_swap G2_DEC_REG(2, 22, 0x1f) |
41 | #define g2_dirmv_swap G2_DEC_REG(2, 20, 0xf) |
42 | #define g2_dirmv_swap_old G2_DEC_REG(2, 17, 0x1f) |
43 | #define g2_tab0_swap_old G2_DEC_REG(2, 12, 0x1f) |
44 | #define g2_tab1_swap_old G2_DEC_REG(2, 7, 0x1f) |
45 | #define g2_tab2_swap_old G2_DEC_REG(2, 2, 0x1f) |
46 | |
47 | #define g2_mode G2_DEC_REG(3, 27, 0x1f) |
48 | #define g2_compress_swap G2_DEC_REG(3, 20, 0xf) |
49 | #define g2_ref_compress_bypass G2_DEC_REG(3, 17, 0x1) |
50 | #define g2_out_rs_e G2_DEC_REG(3, 16, 0x1) |
51 | #define g2_out_dis G2_DEC_REG(3, 15, 0x1) |
52 | #define g2_out_filtering_dis G2_DEC_REG(3, 14, 0x1) |
53 | #define g2_write_mvs_e G2_DEC_REG(3, 12, 0x1) |
54 | #define g2_tab3_swap_old G2_DEC_REG(3, 7, 0x1f) |
55 | #define g2_rscan_swap G2_DEC_REG(3, 2, 0x1f) |
56 | |
57 | #define g2_pic_width_in_cbs G2_DEC_REG(4, 19, 0x1fff) |
58 | #define g2_pic_height_in_cbs G2_DEC_REG(4, 6, 0x1fff) |
59 | #define g2_num_ref_frames G2_DEC_REG(4, 0, 0x1f) |
60 | |
61 | #define g2_start_bit G2_DEC_REG(5, 25, 0x7f) |
62 | #define g2_scaling_list_e G2_DEC_REG(5, 24, 0x1) |
63 | #define g2_cb_qp_offset G2_DEC_REG(5, 19, 0x1f) |
64 | #define g2_cr_qp_offset G2_DEC_REG(5, 14, 0x1f) |
65 | #define g2_sign_data_hide G2_DEC_REG(5, 12, 0x1) |
66 | #define g2_tempor_mvp_e G2_DEC_REG(5, 11, 0x1) |
67 | #define g2_max_cu_qpd_depth G2_DEC_REG(5, 5, 0x3f) |
68 | #define g2_cu_qpd_e G2_DEC_REG(5, 4, 0x1) |
69 | #define g2_pix_shift G2_DEC_REG(5, 0, 0xf) |
70 | |
71 | #define g2_stream_len G2_DEC_REG(6, 0, 0xffffffff) |
72 | |
73 | #define g2_cabac_init_present G2_DEC_REG(7, 31, 0x1) |
74 | #define g2_weight_pred_e G2_DEC_REG(7, 28, 0x1) |
75 | #define g2_weight_bipr_idc G2_DEC_REG(7, 26, 0x3) |
76 | #define g2_filter_over_slices G2_DEC_REG(7, 25, 0x1) |
77 | #define g2_filter_over_tiles G2_DEC_REG(7, 24, 0x1) |
78 | #define g2_asym_pred_e G2_DEC_REG(7, 23, 0x1) |
79 | #define g2_sao_e G2_DEC_REG(7, 22, 0x1) |
80 | #define g2_pcm_filt_d G2_DEC_REG(7, 21, 0x1) |
81 | #define g2_slice_chqp_present G2_DEC_REG(7, 20, 0x1) |
82 | #define g2_dependent_slice G2_DEC_REG(7, 19, 0x1) |
83 | #define g2_filter_override G2_DEC_REG(7, 18, 0x1) |
84 | #define g2_strong_smooth_e G2_DEC_REG(7, 17, 0x1) |
85 | #define g2_filt_offset_beta G2_DEC_REG(7, 12, 0x1f) |
86 | #define g2_filt_offset_tc G2_DEC_REG(7, 7, 0x1f) |
87 | #define g2_slice_hdr_ext_e G2_DEC_REG(7, 6, 0x1) |
88 | #define g2_slice_hdr_ext_bits G2_DEC_REG(7, 3, 0x7) |
89 | |
90 | #define g2_const_intra_e G2_DEC_REG(8, 31, 0x1) |
91 | #define g2_filt_ctrl_pres G2_DEC_REG(8, 30, 0x1) |
92 | #define g2_bit_depth_y G2_DEC_REG(8, 21, 0xf) |
93 | #define g2_bit_depth_c G2_DEC_REG(8, 17, 0xf) |
94 | #define g2_idr_pic_e G2_DEC_REG(8, 16, 0x1) |
95 | #define g2_bit_depth_pcm_y G2_DEC_REG(8, 12, 0xf) |
96 | #define g2_bit_depth_pcm_c G2_DEC_REG(8, 8, 0xf) |
97 | #define g2_bit_depth_y_minus8 G2_DEC_REG(8, 6, 0x3) |
98 | #define g2_bit_depth_c_minus8 G2_DEC_REG(8, 4, 0x3) |
99 | #define g2_rs_out_bit_depth G2_DEC_REG(8, 4, 0xf) |
100 | #define g2_output_8_bits G2_DEC_REG(8, 3, 0x1) |
101 | #define g2_output_format G2_DEC_REG(8, 0, 0x7) |
102 | #define g2_pp_pix_shift G2_DEC_REG(8, 0, 0xf) |
103 | |
104 | #define g2_refidx1_active G2_DEC_REG(9, 19, 0x1f) |
105 | #define g2_refidx0_active G2_DEC_REG(9, 14, 0x1f) |
106 | #define g2_hdr_skip_length G2_DEC_REG(9, 0, 0x3fff) |
107 | |
108 | #define g2_start_code_e G2_DEC_REG(10, 31, 0x1) |
109 | #define g2_init_qp_old G2_DEC_REG(10, 25, 0x3f) |
110 | #define g2_init_qp G2_DEC_REG(10, 24, 0x7f) |
111 | #define g2_num_tile_cols_old G2_DEC_REG(10, 20, 0x1f) |
112 | #define g2_num_tile_cols G2_DEC_REG(10, 19, 0x1f) |
113 | #define g2_num_tile_rows_old G2_DEC_REG(10, 15, 0x1f) |
114 | #define g2_num_tile_rows G2_DEC_REG(10, 14, 0x1f) |
115 | #define g2_tile_e G2_DEC_REG(10, 1, 0x1) |
116 | #define g2_entropy_sync_e G2_DEC_REG(10, 0, 0x1) |
117 | |
118 | #define vp9_transform_mode G2_DEC_REG(11, 27, 0x7) |
119 | #define vp9_filt_sharpness G2_DEC_REG(11, 21, 0x7) |
120 | #define vp9_mcomp_filt_type G2_DEC_REG(11, 8, 0x7) |
121 | #define vp9_high_prec_mv_e G2_DEC_REG(11, 7, 0x1) |
122 | #define vp9_comp_pred_mode G2_DEC_REG(11, 4, 0x3) |
123 | #define vp9_gref_sign_bias G2_DEC_REG(11, 2, 0x1) |
124 | #define vp9_aref_sign_bias G2_DEC_REG(11, 0, 0x1) |
125 | |
126 | #define g2_refer_lterm_e G2_DEC_REG(12, 16, 0xffff) |
127 | #define g2_min_cb_size G2_DEC_REG(12, 13, 0x7) |
128 | #define g2_max_cb_size G2_DEC_REG(12, 10, 0x7) |
129 | #define g2_min_pcm_size G2_DEC_REG(12, 7, 0x7) |
130 | #define g2_max_pcm_size G2_DEC_REG(12, 4, 0x7) |
131 | #define g2_pcm_e G2_DEC_REG(12, 3, 0x1) |
132 | #define g2_transform_skip G2_DEC_REG(12, 2, 0x1) |
133 | #define g2_transq_bypass G2_DEC_REG(12, 1, 0x1) |
134 | #define g2_list_mod_e G2_DEC_REG(12, 0, 0x1) |
135 | |
136 | #define hevc_min_trb_size G2_DEC_REG(13, 13, 0x7) |
137 | #define hevc_max_trb_size G2_DEC_REG(13, 10, 0x7) |
138 | #define hevc_max_intra_hierdepth G2_DEC_REG(13, 7, 0x7) |
139 | #define hevc_max_inter_hierdepth G2_DEC_REG(13, 4, 0x7) |
140 | #define hevc_parallel_merge G2_DEC_REG(13, 0, 0xf) |
141 | |
142 | #define hevc_rlist_f0 G2_DEC_REG(14, 0, 0x1f) |
143 | #define hevc_rlist_f1 G2_DEC_REG(14, 10, 0x1f) |
144 | #define hevc_rlist_f2 G2_DEC_REG(14, 20, 0x1f) |
145 | #define hevc_rlist_b0 G2_DEC_REG(14, 5, 0x1f) |
146 | #define hevc_rlist_b1 G2_DEC_REG(14, 15, 0x1f) |
147 | #define hevc_rlist_b2 G2_DEC_REG(14, 25, 0x1f) |
148 | |
149 | #define hevc_rlist_f3 G2_DEC_REG(15, 0, 0x1f) |
150 | #define hevc_rlist_f4 G2_DEC_REG(15, 10, 0x1f) |
151 | #define hevc_rlist_f5 G2_DEC_REG(15, 20, 0x1f) |
152 | #define hevc_rlist_b3 G2_DEC_REG(15, 5, 0x1f) |
153 | #define hevc_rlist_b4 G2_DEC_REG(15, 15, 0x1f) |
154 | #define hevc_rlist_b5 G2_DEC_REG(15, 25, 0x1f) |
155 | |
156 | #define hevc_rlist_f6 G2_DEC_REG(16, 0, 0x1f) |
157 | #define hevc_rlist_f7 G2_DEC_REG(16, 10, 0x1f) |
158 | #define hevc_rlist_f8 G2_DEC_REG(16, 20, 0x1f) |
159 | #define hevc_rlist_b6 G2_DEC_REG(16, 5, 0x1f) |
160 | #define hevc_rlist_b7 G2_DEC_REG(16, 15, 0x1f) |
161 | #define hevc_rlist_b8 G2_DEC_REG(16, 25, 0x1f) |
162 | |
163 | #define hevc_rlist_f9 G2_DEC_REG(17, 0, 0x1f) |
164 | #define hevc_rlist_f10 G2_DEC_REG(17, 10, 0x1f) |
165 | #define hevc_rlist_f11 G2_DEC_REG(17, 20, 0x1f) |
166 | #define hevc_rlist_b9 G2_DEC_REG(17, 5, 0x1f) |
167 | #define hevc_rlist_b10 G2_DEC_REG(17, 15, 0x1f) |
168 | #define hevc_rlist_b11 G2_DEC_REG(17, 25, 0x1f) |
169 | |
170 | #define hevc_rlist_f12 G2_DEC_REG(18, 0, 0x1f) |
171 | #define hevc_rlist_f13 G2_DEC_REG(18, 10, 0x1f) |
172 | #define hevc_rlist_f14 G2_DEC_REG(18, 20, 0x1f) |
173 | #define hevc_rlist_b12 G2_DEC_REG(18, 5, 0x1f) |
174 | #define hevc_rlist_b13 G2_DEC_REG(18, 15, 0x1f) |
175 | #define hevc_rlist_b14 G2_DEC_REG(18, 25, 0x1f) |
176 | |
177 | #define hevc_rlist_f15 G2_DEC_REG(19, 0, 0x1f) |
178 | #define hevc_rlist_b15 G2_DEC_REG(19, 5, 0x1f) |
179 | |
180 | #define g2_partial_ctb_x G2_DEC_REG(20, 31, 0x1) |
181 | #define g2_partial_ctb_y G2_DEC_REG(20, 30, 0x1) |
182 | #define g2_pic_width_4x4 G2_DEC_REG(20, 16, 0xfff) |
183 | #define g2_pic_height_4x4 G2_DEC_REG(20, 0, 0xfff) |
184 | |
185 | #define vp9_qp_delta_y_dc G2_DEC_REG(13, 23, 0x3f) |
186 | #define vp9_qp_delta_ch_dc G2_DEC_REG(13, 17, 0x3f) |
187 | #define vp9_qp_delta_ch_ac G2_DEC_REG(13, 11, 0x3f) |
188 | #define vp9_last_sign_bias G2_DEC_REG(13, 10, 0x1) |
189 | #define vp9_lossless_e G2_DEC_REG(13, 9, 0x1) |
190 | #define vp9_comp_pred_var_ref1 G2_DEC_REG(13, 7, 0x3) |
191 | #define vp9_comp_pred_var_ref0 G2_DEC_REG(13, 5, 0x3) |
192 | #define vp9_comp_pred_fixed_ref G2_DEC_REG(13, 3, 0x3) |
193 | #define vp9_segment_temp_upd_e G2_DEC_REG(13, 2, 0x1) |
194 | #define vp9_segment_upd_e G2_DEC_REG(13, 1, 0x1) |
195 | #define vp9_segment_e G2_DEC_REG(13, 0, 0x1) |
196 | |
197 | #define vp9_filt_level G2_DEC_REG(14, 18, 0x3f) |
198 | #define vp9_refpic_seg0 G2_DEC_REG(14, 15, 0x7) |
199 | #define vp9_skip_seg0 G2_DEC_REG(14, 14, 0x1) |
200 | #define vp9_filt_level_seg0 G2_DEC_REG(14, 8, 0x3f) |
201 | #define vp9_quant_seg0 G2_DEC_REG(14, 0, 0xff) |
202 | |
203 | #define vp9_refpic_seg1 G2_DEC_REG(15, 15, 0x7) |
204 | #define vp9_skip_seg1 G2_DEC_REG(15, 14, 0x1) |
205 | #define vp9_filt_level_seg1 G2_DEC_REG(15, 8, 0x3f) |
206 | #define vp9_quant_seg1 G2_DEC_REG(15, 0, 0xff) |
207 | |
208 | #define vp9_refpic_seg2 G2_DEC_REG(16, 15, 0x7) |
209 | #define vp9_skip_seg2 G2_DEC_REG(16, 14, 0x1) |
210 | #define vp9_filt_level_seg2 G2_DEC_REG(16, 8, 0x3f) |
211 | #define vp9_quant_seg2 G2_DEC_REG(16, 0, 0xff) |
212 | |
213 | #define vp9_refpic_seg3 G2_DEC_REG(17, 15, 0x7) |
214 | #define vp9_skip_seg3 G2_DEC_REG(17, 14, 0x1) |
215 | #define vp9_filt_level_seg3 G2_DEC_REG(17, 8, 0x3f) |
216 | #define vp9_quant_seg3 G2_DEC_REG(17, 0, 0xff) |
217 | |
218 | #define vp9_refpic_seg4 G2_DEC_REG(18, 15, 0x7) |
219 | #define vp9_skip_seg4 G2_DEC_REG(18, 14, 0x1) |
220 | #define vp9_filt_level_seg4 G2_DEC_REG(18, 8, 0x3f) |
221 | #define vp9_quant_seg4 G2_DEC_REG(18, 0, 0xff) |
222 | |
223 | #define vp9_refpic_seg5 G2_DEC_REG(19, 15, 0x7) |
224 | #define vp9_skip_seg5 G2_DEC_REG(19, 14, 0x1) |
225 | #define vp9_filt_level_seg5 G2_DEC_REG(19, 8, 0x3f) |
226 | #define vp9_quant_seg5 G2_DEC_REG(19, 0, 0xff) |
227 | |
228 | #define hevc_cur_poc_00 G2_DEC_REG(46, 24, 0xff) |
229 | #define hevc_cur_poc_01 G2_DEC_REG(46, 16, 0xff) |
230 | #define hevc_cur_poc_02 G2_DEC_REG(46, 8, 0xff) |
231 | #define hevc_cur_poc_03 G2_DEC_REG(46, 0, 0xff) |
232 | |
233 | #define hevc_cur_poc_04 G2_DEC_REG(47, 24, 0xff) |
234 | #define hevc_cur_poc_05 G2_DEC_REG(47, 16, 0xff) |
235 | #define hevc_cur_poc_06 G2_DEC_REG(47, 8, 0xff) |
236 | #define hevc_cur_poc_07 G2_DEC_REG(47, 0, 0xff) |
237 | |
238 | #define hevc_cur_poc_08 G2_DEC_REG(48, 24, 0xff) |
239 | #define hevc_cur_poc_09 G2_DEC_REG(48, 16, 0xff) |
240 | #define hevc_cur_poc_10 G2_DEC_REG(48, 8, 0xff) |
241 | #define hevc_cur_poc_11 G2_DEC_REG(48, 0, 0xff) |
242 | |
243 | #define hevc_cur_poc_12 G2_DEC_REG(49, 24, 0xff) |
244 | #define hevc_cur_poc_13 G2_DEC_REG(49, 16, 0xff) |
245 | #define hevc_cur_poc_14 G2_DEC_REG(49, 8, 0xff) |
246 | #define hevc_cur_poc_15 G2_DEC_REG(49, 0, 0xff) |
247 | |
248 | #define vp9_refpic_seg6 G2_DEC_REG(31, 15, 0x7) |
249 | #define vp9_skip_seg6 G2_DEC_REG(31, 14, 0x1) |
250 | #define vp9_filt_level_seg6 G2_DEC_REG(31, 8, 0x3f) |
251 | #define vp9_quant_seg6 G2_DEC_REG(31, 0, 0xff) |
252 | |
253 | #define vp9_refpic_seg7 G2_DEC_REG(32, 15, 0x7) |
254 | #define vp9_skip_seg7 G2_DEC_REG(32, 14, 0x1) |
255 | #define vp9_filt_level_seg7 G2_DEC_REG(32, 8, 0x3f) |
256 | #define vp9_quant_seg7 G2_DEC_REG(32, 0, 0xff) |
257 | |
258 | #define vp9_lref_width G2_DEC_REG(33, 16, 0xffff) |
259 | #define vp9_lref_height G2_DEC_REG(33, 0, 0xffff) |
260 | |
261 | #define vp9_gref_width G2_DEC_REG(34, 16, 0xffff) |
262 | #define vp9_gref_height G2_DEC_REG(34, 0, 0xffff) |
263 | |
264 | #define vp9_aref_width G2_DEC_REG(35, 16, 0xffff) |
265 | #define vp9_aref_height G2_DEC_REG(35, 0, 0xffff) |
266 | |
267 | #define vp9_lref_hor_scale G2_DEC_REG(36, 16, 0xffff) |
268 | #define vp9_lref_ver_scale G2_DEC_REG(36, 0, 0xffff) |
269 | |
270 | #define vp9_gref_hor_scale G2_DEC_REG(37, 16, 0xffff) |
271 | #define vp9_gref_ver_scale G2_DEC_REG(37, 0, 0xffff) |
272 | |
273 | #define vp9_aref_hor_scale G2_DEC_REG(38, 16, 0xffff) |
274 | #define vp9_aref_ver_scale G2_DEC_REG(38, 0, 0xffff) |
275 | |
276 | #define vp9_filt_ref_adj_0 G2_DEC_REG(46, 24, 0x7f) |
277 | #define vp9_filt_ref_adj_1 G2_DEC_REG(46, 16, 0x7f) |
278 | #define vp9_filt_ref_adj_2 G2_DEC_REG(46, 8, 0x7f) |
279 | #define vp9_filt_ref_adj_3 G2_DEC_REG(46, 0, 0x7f) |
280 | |
281 | #define vp9_filt_mb_adj_0 G2_DEC_REG(47, 24, 0x7f) |
282 | #define vp9_filt_mb_adj_1 G2_DEC_REG(47, 16, 0x7f) |
283 | #define vp9_filt_mb_adj_2 G2_DEC_REG(47, 8, 0x7f) |
284 | #define vp9_filt_mb_adj_3 G2_DEC_REG(47, 0, 0x7f) |
285 | |
286 | #define g2_apf_threshold G2_DEC_REG(55, 0, 0xffff) |
287 | |
288 | #define g2_clk_gate_e G2_DEC_REG(58, 16, 0x1) |
289 | #define g2_double_buffer_e G2_DEC_REG(58, 15, 0x1) |
290 | #define g2_buswidth G2_DEC_REG(58, 8, 0x7) |
291 | #define g2_max_burst G2_DEC_REG(58, 0, 0xff) |
292 | |
293 | #define g2_down_scale_e G2_DEC_REG(184, 7, 0x1) |
294 | #define g2_down_scale_y G2_DEC_REG(184, 2, 0x3) |
295 | #define g2_down_scale_x G2_DEC_REG(184, 0, 0x3) |
296 | |
297 | #define G2_REG_CONFIG G2_SWREG(58) |
298 | #define G2_REG_CONFIG_DEC_CLK_GATE_E BIT(16) |
299 | #define G2_REG_CONFIG_DEC_CLK_GATE_IDLE_E BIT(17) |
300 | |
301 | #define G2_OUT_LUMA_ADDR (G2_SWREG(65)) |
302 | #define G2_REF_LUMA_ADDR(i) (G2_SWREG(67) + ((i) * 0x8)) |
303 | #define G2_VP9_SEGMENT_WRITE_ADDR (G2_SWREG(79)) |
304 | #define G2_VP9_SEGMENT_READ_ADDR (G2_SWREG(81)) |
305 | #define G2_OUT_CHROMA_ADDR (G2_SWREG(99)) |
306 | #define G2_REF_CHROMA_ADDR(i) (G2_SWREG(101) + ((i) * 0x8)) |
307 | #define G2_OUT_MV_ADDR (G2_SWREG(133)) |
308 | #define G2_REF_MV_ADDR(i) (G2_SWREG(135) + ((i) * 0x8)) |
309 | #define G2_TILE_SIZES_ADDR (G2_SWREG(167)) |
310 | #define G2_STREAM_ADDR (G2_SWREG(169)) |
311 | #define G2_HEVC_SCALING_LIST_ADDR (G2_SWREG(171)) |
312 | #define G2_VP9_CTX_COUNT_ADDR (G2_SWREG(171)) |
313 | #define G2_VP9_PROBS_ADDR (G2_SWREG(173)) |
314 | #define G2_RS_OUT_LUMA_ADDR (G2_SWREG(175)) |
315 | #define G2_RS_OUT_CHROMA_ADDR (G2_SWREG(177)) |
316 | #define G2_TILE_FILTER_ADDR (G2_SWREG(179)) |
317 | #define G2_TILE_SAO_ADDR (G2_SWREG(181)) |
318 | #define G2_TILE_BSD_ADDR (G2_SWREG(183)) |
319 | #define G2_DS_DST (G2_SWREG(186)) |
320 | #define G2_DS_DST_CHR (G2_SWREG(188)) |
321 | |
322 | #define g2_strm_buffer_len G2_DEC_REG(258, 0, 0xffffffff) |
323 | #define g2_strm_start_offset G2_DEC_REG(259, 0, 0xffffffff) |
324 | |
325 | #endif |
326 | |