aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/media/hantro/hantro_g2_regs.h
blob: b7c6f9877b9d5412e1f483af080a72d0a83d6533 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2021, Collabora
 *
 * Author: Benjamin Gaignard <benjamin.gaignard@collabora.com>
 */

#ifndef HANTRO_G2_REGS_H_
#define HANTRO_G2_REGS_H_

#include "hantro.h"

#define G2_SWREG(nr)	((nr) * 4)

#define G2_DEC_REG(b, s, m) \
	((const struct hantro_reg) { \
		.base = G2_SWREG(b), \
		.shift = s, \
		.mask = m, \
	})

#define G2_REG_VERSION			G2_SWREG(0)

#define G2_REG_INTERRUPT		G2_SWREG(1)
#define G2_REG_INTERRUPT_DEC_RDY_INT	BIT(12)
#define G2_REG_INTERRUPT_DEC_ABORT_E	BIT(5)
#define G2_REG_INTERRUPT_DEC_IRQ_DIS	BIT(4)
#define G2_REG_INTERRUPT_DEC_E		BIT(0)

#define HEVC_DEC_MODE			0xc
#define VP9_DEC_MODE			0xd

#define BUS_WIDTH_32			0
#define BUS_WIDTH_64			1
#define BUS_WIDTH_128			2
#define BUS_WIDTH_256			3

#define g2_strm_swap		G2_DEC_REG(2, 28, 0xf)
#define g2_strm_swap_old	G2_DEC_REG(2, 27, 0x1f)
#define g2_pic_swap		G2_DEC_REG(2, 22, 0x1f)
#define g2_dirmv_swap		G2_DEC_REG(2, 20, 0xf)
#define g2_dirmv_swap_old	G2_DEC_REG(2, 17, 0x1f)
#define g2_tab0_swap_old	G2_DEC_REG(2, 12, 0x1f)
#define g2_tab1_swap_old	G2_DEC_REG(2, 7, 0x1f)
#define g2_tab2_swap_old	G2_DEC_REG(2, 2, 0x1f)

#define g2_mode			G2_DEC_REG(3, 27, 0x1f)
#define g2_compress_swap	G2_DEC_REG(3, 20, 0xf)
#define g2_ref_compress_bypass	G2_DEC_REG(3, 17, 0x1)
#define g2_out_rs_e		G2_DEC_REG(3, 16, 0x1)
#define g2_out_dis		G2_DEC_REG(3, 15, 0x1)
#define g2_out_filtering_dis	G2_DEC_REG(3, 14, 0x1)
#define g2_write_mvs_e		G2_DEC_REG(3, 12, 0x1)
#define g2_tab3_swap_old	G2_DEC_REG(3, 7, 0x1f)
#define g2_rscan_swap		G2_DEC_REG(3, 2, 0x1f)

#define g2_pic_width_in_cbs	G2_DEC_REG(4, 19, 0x1fff)
#define g2_pic_height_in_cbs	G2_DEC_REG(4, 6,  0x1fff)
#define g2_num_ref_frames	G2_DEC_REG(4, 0,  0x1f)

#define g2_start_bit		G2_DEC_REG(5, 25, 0x7f)
#define g2_scaling_list_e	G2_DEC_REG(5, 24, 0x1)
#define g2_cb_qp_offset		G2_DEC_REG(5, 19, 0x1f)
#define g2_cr_qp_offset		G2_DEC_REG(5, 14, 0x1f)
#define g2_sign_data_hide	G2_DEC_REG(5, 12, 0x1)
#define g2_tempor_mvp_e		G2_DEC_REG(5, 11, 0x1)
#define g2_max_cu_qpd_depth	G2_DEC_REG(5, 5,  0x3f)
#define g2_cu_qpd_e		G2_DEC_REG(5, 4,  0x1)
#define g2_pix_shift		G2_DEC_REG(5, 0,  0xf)

#define g2_stream_len		G2_DEC_REG(6, 0,  0xffffffff)

#define g2_cabac_init_present	G2_DEC_REG(7, 31, 0x1)
#define g2_weight_pred_e	G2_DEC_REG(7, 28, 0x1)
#define g2_weight_bipr_idc	G2_DEC_REG(7, 26, 0x3)
#define g2_filter_over_slices	G2_DEC_REG(7, 25, 0x1)
#define g2_filter_over_tiles	G2_DEC_REG(7, 24, 0x1)
#define g2_asym_pred_e		G2_DEC_REG(7, 23, 0x1)
#define g2_sao_e		G2_DEC_REG(7, 22, 0x1)
#define g2_pcm_filt_d		G2_DEC_REG(7, 21, 0x1)
#define g2_slice_chqp_present	G2_DEC_REG(7, 20, 0x1)
#define g2_dependent_slice	G2_DEC_REG(7, 19, 0x1)
#define g2_filter_override	G2_DEC_REG(7, 18, 0x1)
#define g2_strong_smooth_e	G2_DEC_REG(7, 17, 0x1)
#define g2_filt_offset_beta	G2_DEC_REG(7, 12, 0x1f)
#define g2_filt_offset_tc	G2_DEC_REG(7, 7,  0x1f)
#define g2_slice_hdr_ext_e	G2_DEC_REG(7, 6,  0x1)
#define g2_slice_hdr_ext_bits	G2_DEC_REG(7, 3,  0x7)

#define g2_const_intra_e	G2_DEC_REG(8, 31, 0x1)
#define g2_filt_ctrl_pres	G2_DEC_REG(8, 30, 0x1)
#define g2_bit_depth_y		G2_DEC_REG(8, 21, 0xf)
#define g2_bit_depth_c		G2_DEC_REG(8, 17, 0xf)
#define g2_idr_pic_e		G2_DEC_REG(8, 16, 0x1)
#define g2_bit_depth_pcm_y	G2_DEC_REG(8, 12, 0xf)
#define g2_bit_depth_pcm_c	G2_DEC_REG(8, 8,  0xf)
#define g2_bit_depth_y_minus8	G2_DEC_REG(8, 6,  0x3)
#define g2_bit_depth_c_minus8	G2_DEC_REG(8, 4,  0x3)
#define g2_rs_out_bit_depth	G2_DEC_REG(8, 4,  0xf)
#define g2_output_8_bits	G2_DEC_REG(8, 3,  0x1)
#define g2_output_format	G2_DEC_REG(8, 0,  0x7)
#define g2_pp_pix_shift		G2_DEC_REG(8, 0,  0xf)

#define g2_refidx1_active	G2_DEC_REG(9, 19, 0x1f)
#define g2_refidx0_active	G2_DEC_REG(9, 14, 0x1f)
#define g2_hdr_skip_length	G2_DEC_REG(9, 0,  0x3fff)

#define g2_start_code_e		G2_DEC_REG(10, 31, 0x1)
#define g2_init_qp_old		G2_DEC_REG(10, 25, 0x3f)
#define g2_init_qp		G2_DEC_REG(10, 24, 0x3f)
#define g2_num_tile_cols_old	G2_DEC_REG(10, 20, 0x1f)
#define g2_num_tile_cols	G2_DEC_REG(10, 19, 0x1f)
#define g2_num_tile_rows_old	G2_DEC_REG(10, 15, 0x1f)
#define g2_num_tile_rows	G2_DEC_REG(10, 14, 0x1f)
#define g2_tile_e		G2_DEC_REG(10, 1,  0x1)
#define g2_entropy_sync_e	G2_DEC_REG(10, 0,  0x1)

#define vp9_transform_mode	G2_DEC_REG(11, 27, 0x7)
#define vp9_filt_sharpness	G2_DEC_REG(11, 21, 0x7)
#define vp9_mcomp_filt_type	G2_DEC_REG(11,  8, 0x7)
#define vp9_high_prec_mv_e	G2_DEC_REG(11,  7, 0x1)
#define vp9_comp_pred_mode	G2_DEC_REG(11,  4, 0x3)
#define vp9_gref_sign_bias	G2_DEC_REG(11,  2, 0x1)
#define vp9_aref_sign_bias	G2_DEC_REG(11,  0, 0x1)

#define g2_refer_lterm_e	G2_DEC_REG(12, 16, 0xffff)
#define g2_min_cb_size		G2_DEC_REG(12, 13, 0x7)
#define g2_max_cb_size		G2_DEC_REG(12, 10, 0x7)
#define g2_min_pcm_size		G2_DEC_REG(12, 7,  0x7)
#define g2_max_pcm_size		G2_DEC_REG(12, 4,  0x7)
#define g2_pcm_e		G2_DEC_REG(12, 3,  0x1)
#define g2_transform_skip	G2_DEC_REG(12, 2,  0x1)
#define g2_transq_bypass	G2_DEC_REG(12, 1,  0x1)
#define g2_list_mod_e		G2_DEC_REG(12, 0,  0x1)

#define hevc_min_trb_size		G2_DEC_REG(13, 13, 0x7)
#define hevc_max_trb_size		G2_DEC_REG(13, 10, 0x7)
#define hevc_max_intra_hierdepth	G2_DEC_REG(13, 7,  0x7)
#define hevc_max_inter_hierdepth	G2_DEC_REG(13, 4,  0x7)
#define hevc_parallel_merge		G2_DEC_REG(13, 0,  0xf)

#define hevc_rlist_f0		G2_DEC_REG(14, 0,  0x1f)
#define hevc_rlist_f1		G2_DEC_REG(14, 10, 0x1f)
#define hevc_rlist_f2		G2_DEC_REG(14, 20, 0x1f)
#define hevc_rlist_b0		G2_DEC_REG(14, 5,  0x1f)
#define hevc_rlist_b1		G2_DEC_REG(14, 15, 0x1f)
#define hevc_rlist_b2		G2_DEC_REG(14, 25, 0x1f)

#define hevc_rlist_f3		G2_DEC_REG(15, 0,  0x1f)
#define hevc_rlist_f4		G2_DEC_REG(15, 10, 0x1f)
#define hevc_rlist_f5		G2_DEC_REG(15, 20, 0x1f)
#define hevc_rlist_b3		G2_DEC_REG(15, 5,  0x1f)
#define hevc_rlist_b4		G2_DEC_REG(15, 15, 0x1f)
#define hevc_rlist_b5		G2_DEC_REG(15, 25, 0x1f)

#define hevc_rlist_f6		G2_DEC_REG(16, 0,  0x1f)
#define hevc_rlist_f7		G2_DEC_REG(16, 10, 0x1f)
#define hevc_rlist_f8		G2_DEC_REG(16, 20, 0x1f)
#define hevc_rlist_b6		G2_DEC_REG(16, 5,  0x1f)
#define hevc_rlist_b7		G2_DEC_REG(16, 15, 0x1f)
#define hevc_rlist_b8		G2_DEC_REG(16, 25, 0x1f)

#define hevc_rlist_f9		G2_DEC_REG(17, 0,  0x1f)
#define hevc_rlist_f10		G2_DEC_REG(17, 10, 0x1f)
#define hevc_rlist_f11		G2_DEC_REG(17, 20, 0x1f)
#define hevc_rlist_b9		G2_DEC_REG(17, 5,  0x1f)
#define hevc_rlist_b10		G2_DEC_REG(17, 15, 0x1f)
#define hevc_rlist_b11		G2_DEC_REG(17, 25, 0x1f)

#define hevc_rlist_f12		G2_DEC_REG(18, 0,  0x1f)
#define hevc_rlist_f13		G2_DEC_REG(18, 10, 0x1f)
#define hevc_rlist_f14		G2_DEC_REG(18, 20, 0x1f)
#define hevc_rlist_b12		G2_DEC_REG(18, 5,  0x1f)
#define hevc_rlist_b13		G2_DEC_REG(18, 15, 0x1f)
#define hevc_rlist_b14		G2_DEC_REG(18, 25, 0x1f)

#define hevc_rlist_f15		G2_DEC_REG(19, 0,  0x1f)
#define hevc_rlist_b15		G2_DEC_REG(19, 5,  0x1f)

#define g2_partial_ctb_x	G2_DEC_REG(20, 31, 0x1)
#define g2_partial_ctb_y	G2_DEC_REG(20, 30, 0x1)
#define g2_pic_width_4x4	G2_DEC_REG(20, 16, 0xfff)
#define g2_pic_height_4x4	G2_DEC_REG(20, 0,  0xfff)

#define vp9_qp_delta_y_dc	G2_DEC_REG(13, 23, 0x3f)
#define vp9_qp_delta_ch_dc	G2_DEC_REG(13, 17, 0x3f)
#define vp9_qp_delta_ch_ac	G2_DEC_REG(13, 11, 0x3f)
#define vp9_last_sign_bias	G2_DEC_REG(13, 10, 0x1)
#define vp9_lossless_e		G2_DEC_REG(13,  9, 0x1)
#define vp9_comp_pred_var_ref1	G2_DEC_REG(13,  7, 0x3)
#define vp9_comp_pred_var_ref0	G2_DEC_REG(13,  5, 0x3)
#define vp9_comp_pred_fixed_ref	G2_DEC_REG(13,  3, 0x3)
#define vp9_segment_temp_upd_e	G2_DEC_REG(13,  2, 0x1)
#define vp9_segment_upd_e	G2_DEC_REG(13,  1, 0x1)
#define vp9_segment_e		G2_DEC_REG(13,  0, 0x1)

#define vp9_filt_level		G2_DEC_REG(14, 18, 0x3f)
#define vp9_refpic_seg0		G2_DEC_REG(14, 15, 0x7)
#define vp9_skip_seg0		G2_DEC_REG(14, 14, 0x1)
#define vp9_filt_level_seg0	G2_DEC_REG(14,  8, 0x3f)
#define vp9_quant_seg0		G2_DEC_REG(14,  0, 0xff)

#define vp9_refpic_seg1		G2_DEC_REG(15, 15, 0x7)
#define vp9_skip_seg1		G2_DEC_REG(15, 14, 0x1)
#define vp9_filt_level_seg1	G2_DEC_REG(15,  8, 0x3f)
#define vp9_quant_seg1		G2_DEC_REG(15,  0, 0xff)

#define vp9_refpic_seg2		G2_DEC_REG(16, 15, 0x7)
#define vp9_skip_seg2		G2_DEC_REG(16, 14, 0x1)
#define vp9_filt_level_seg2	G2_DEC_REG(16,  8, 0x3f)
#define vp9_quant_seg2		G2_DEC_REG(16,  0, 0xff)

#define vp9_refpic_seg3		G2_DEC_REG(17, 15, 0x7)
#define vp9_skip_seg3		G2_DEC_REG(17, 14, 0x1)
#define vp9_filt_level_seg3	G2_DEC_REG(17,  8, 0x3f)
#define vp9_quant_seg3		G2_DEC_REG(17,  0, 0xff)

#define vp9_refpic_seg4		G2_DEC_REG(18, 15, 0x7)
#define vp9_skip_seg4		G2_DEC_REG(18, 14, 0x1)
#define vp9_filt_level_seg4	G2_DEC_REG(18,  8, 0x3f)
#define vp9_quant_seg4		G2_DEC_REG(18,  0, 0xff)

#define vp9_refpic_seg5		G2_DEC_REG(19, 15, 0x7)
#define vp9_skip_seg5		G2_DEC_REG(19, 14, 0x1)
#define vp9_filt_level_seg5	G2_DEC_REG(19,  8, 0x3f)
#define vp9_quant_seg5		G2_DEC_REG(19,  0, 0xff)

#define hevc_cur_poc_00		G2_DEC_REG(46, 24, 0xff)
#define hevc_cur_poc_01		G2_DEC_REG(46, 16, 0xff)
#define hevc_cur_poc_02		G2_DEC_REG(46, 8,  0xff)
#define hevc_cur_poc_03		G2_DEC_REG(46, 0,  0xff)

#define hevc_cur_poc_04		G2_DEC_REG(47, 24, 0xff)
#define hevc_cur_poc_05		G2_DEC_REG(47, 16, 0xff)
#define hevc_cur_poc_06		G2_DEC_REG(47, 8,  0xff)
#define hevc_cur_poc_07		G2_DEC_REG(47, 0,  0xff)

#define hevc_cur_poc_08		G2_DEC_REG(48, 24, 0xff)
#define hevc_cur_poc_09		G2_DEC_REG(48, 16, 0xff)
#define hevc_cur_poc_10		G2_DEC_REG(48, 8,  0xff)
#define hevc_cur_poc_11		G2_DEC_REG(48, 0,  0xff)

#define hevc_cur_poc_12		G2_DEC_REG(49, 24, 0xff)
#define hevc_cur_poc_13		G2_DEC_REG(49, 16, 0xff)
#define hevc_cur_poc_14		G2_DEC_REG(49, 8,  0xff)
#define hevc_cur_poc_15		G2_DEC_REG(49, 0,  0xff)

#define vp9_refpic_seg6		G2_DEC_REG(31, 15, 0x7)
#define vp9_skip_seg6		G2_DEC_REG(31, 14, 0x1)
#define vp9_filt_level_seg6	G2_DEC_REG(31,  8, 0x3f)
#define vp9_quant_seg6		G2_DEC_REG(31,  0, 0xff)

#define vp9_refpic_seg7		G2_DEC_REG(32, 15, 0x7)
#define vp9_skip_seg7		G2_DEC_REG(32, 14, 0x1)
#define vp9_filt_level_seg7	G2_DEC_REG(32,  8, 0x3f)
#define vp9_quant_seg7		G2_DEC_REG(32,  0, 0xff)

#define vp9_lref_width		G2_DEC_REG(33, 16, 0xffff)
#define vp9_lref_height		G2_DEC_REG(33,  0, 0xffff)

#define vp9_gref_width		G2_DEC_REG(34, 16, 0xffff)
#define vp9_gref_height		G2_DEC_REG(34,  0, 0xffff)

#define vp9_aref_width		G2_DEC_REG(35, 16, 0xffff)
#define vp9_aref_height		G2_DEC_REG(35,  0, 0xffff)

#define vp9_lref_hor_scale	G2_DEC_REG(36, 16, 0xffff)
#define vp9_lref_ver_scale	G2_DEC_REG(36,  0, 0xffff)

#define vp9_gref_hor_scale	G2_DEC_REG(37, 16, 0xffff)
#define vp9_gref_ver_scale	G2_DEC_REG(37,  0, 0xffff)

#define vp9_aref_hor_scale	G2_DEC_REG(38, 16, 0xffff)
#define vp9_aref_ver_scale	G2_DEC_REG(38,  0, 0xffff)

#define vp9_filt_ref_adj_0	G2_DEC_REG(46, 24, 0x7f)
#define vp9_filt_ref_adj_1	G2_DEC_REG(46, 16, 0x7f)
#define vp9_filt_ref_adj_2	G2_DEC_REG(46,  8, 0x7f)
#define vp9_filt_ref_adj_3	G2_DEC_REG(46,  0, 0x7f)

#define vp9_filt_mb_adj_0	G2_DEC_REG(47, 24, 0x7f)
#define vp9_filt_mb_adj_1	G2_DEC_REG(47, 16, 0x7f)
#define vp9_filt_mb_adj_2	G2_DEC_REG(47,  8, 0x7f)
#define vp9_filt_mb_adj_3	G2_DEC_REG(47,  0, 0x7f)

#define g2_apf_threshold	G2_DEC_REG(55, 0, 0xffff)

#define g2_clk_gate_e		G2_DEC_REG(58, 16, 0x1)
#define g2_double_buffer_e	G2_DEC_REG(58, 15, 0x1)
#define g2_buswidth		G2_DEC_REG(58, 8,  0x7)
#define g2_max_burst		G2_DEC_REG(58, 0,  0xff)

#define G2_REG_CONFIG				G2_SWREG(58)
#define G2_REG_CONFIG_DEC_CLK_GATE_E		BIT(16)
#define G2_REG_CONFIG_DEC_CLK_GATE_IDLE_E	BIT(17)

#define G2_OUT_LUMA_ADDR		(G2_SWREG(65))
#define G2_REF_LUMA_ADDR(i)		(G2_SWREG(67)  + ((i) * 0x8))
#define G2_VP9_SEGMENT_WRITE_ADDR	(G2_SWREG(79))
#define G2_VP9_SEGMENT_READ_ADDR	(G2_SWREG(81))
#define G2_OUT_CHROMA_ADDR		(G2_SWREG(99))
#define G2_REF_CHROMA_ADDR(i)		(G2_SWREG(101) + ((i) * 0x8))
#define G2_OUT_MV_ADDR			(G2_SWREG(133))
#define G2_REF_MV_ADDR(i)		(G2_SWREG(135) + ((i) * 0x8))
#define G2_TILE_SIZES_ADDR		(G2_SWREG(167))
#define G2_STREAM_ADDR			(G2_SWREG(169))
#define G2_HEVC_SCALING_LIST_ADDR	(G2_SWREG(171))
#define G2_VP9_CTX_COUNT_ADDR		(G2_SWREG(171))
#define G2_VP9_PROBS_ADDR		(G2_SWREG(173))
#define G2_RS_OUT_LUMA_ADDR		(G2_SWREG(175))
#define G2_RS_OUT_CHROMA_ADDR		(G2_SWREG(177))
#define G2_TILE_FILTER_ADDR		(G2_SWREG(179))
#define G2_TILE_SAO_ADDR		(G2_SWREG(181))
#define G2_TILE_BSD_ADDR		(G2_SWREG(183))

#define g2_strm_buffer_len	G2_DEC_REG(258, 0, 0xffffffff)
#define g2_strm_start_offset	G2_DEC_REG(259, 0, 0xffffffff)

#endif