• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Cedrus VPU driver
4  *
5  * Copyright (c) 2013-2016 Jens Kuske <jenskuske@gmail.com>
6  * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
7  * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
8  */
9 
10 #ifndef _CEDRUS_REGS_H_
11 #define _CEDRUS_REGS_H_
12 
13 #define SHIFT_AND_MASK_BITS(v, h, l) \
14 	(((unsigned long)(v) << (l)) & GENMASK(h, l))
15 
16 /*
17  * Common acronyms and contractions used in register descriptions:
18  * * VLD : Variable-Length Decoder
19  * * IQ: Inverse Quantization
20  * * IDCT: Inverse Discrete Cosine Transform
21  * * MC: Motion Compensation
22  * * STCD: Start Code Detect
23  * * SDRT: Scale Down and Rotate
24  * * WB: Writeback
25  * * BITS/BS: Bitstream
26  * * MB: Macroblock
27  * * CTU: Coding Tree Unit
28  * * CTB: Coding Tree Block
29  * * IDX: Index
30  */
31 
32 #define VE_ENGINE_DEC_MPEG			0x100
33 #define VE_ENGINE_DEC_H264			0x200
34 #define VE_ENGINE_DEC_H265			0x500
35 
36 #define VE_MODE					0x00
37 
38 #define VE_MODE_PIC_WIDTH_IS_4096		BIT(22)
39 #define VE_MODE_PIC_WIDTH_MORE_2048		BIT(21)
40 #define VE_MODE_REC_WR_MODE_2MB			(0x01 << 20)
41 #define VE_MODE_REC_WR_MODE_1MB			(0x00 << 20)
42 #define VE_MODE_DDR_MODE_BW_128			(0x03 << 16)
43 #define VE_MODE_DDR_MODE_BW_256			(0x02 << 16)
44 #define VE_MODE_DISABLED			(0x07 << 0)
45 #define VE_MODE_DEC_H265			(0x04 << 0)
46 #define VE_MODE_DEC_H264			(0x01 << 0)
47 #define VE_MODE_DEC_MPEG			(0x00 << 0)
48 
49 #define VE_BUF_CTRL				0x50
50 
51 #define VE_BUF_CTRL_INTRAPRED_EXT_RAM		(0x02 << 2)
52 #define VE_BUF_CTRL_INTRAPRED_MIXED_RAM		(0x01 << 2)
53 #define VE_BUF_CTRL_INTRAPRED_INT_SRAM		(0x00 << 2)
54 #define VE_BUF_CTRL_DBLK_EXT_RAM		(0x02 << 0)
55 #define VE_BUF_CTRL_DBLK_MIXED_RAM		(0x01 << 0)
56 #define VE_BUF_CTRL_DBLK_INT_SRAM		(0x00 << 0)
57 
58 #define VE_DBLK_DRAM_BUF_ADDR			0x54
59 #define VE_INTRAPRED_DRAM_BUF_ADDR		0x58
60 #define VE_PRIMARY_CHROMA_BUF_LEN		0xc4
61 #define VE_PRIMARY_FB_LINE_STRIDE		0xc8
62 
63 #define VE_PRIMARY_FB_LINE_STRIDE_CHROMA(s)	SHIFT_AND_MASK_BITS(s, 31, 16)
64 #define VE_PRIMARY_FB_LINE_STRIDE_LUMA(s)	SHIFT_AND_MASK_BITS(s, 15, 0)
65 
66 #define VE_CHROMA_BUF_LEN			0xe8
67 
68 #define VE_SECONDARY_OUT_FMT_TILED_32_NV12	(0x00 << 30)
69 #define VE_SECONDARY_OUT_FMT_EXT		(0x01 << 30)
70 #define VE_SECONDARY_OUT_FMT_YU12		(0x02 << 30)
71 #define VE_SECONDARY_OUT_FMT_YV12		(0x03 << 30)
72 #define VE_CHROMA_BUF_LEN_SDRT(l)		SHIFT_AND_MASK_BITS(l, 27, 0)
73 
74 #define VE_PRIMARY_OUT_FMT			0xec
75 
76 #define VE_PRIMARY_OUT_FMT_TILED_32_NV12	(0x00 << 4)
77 #define VE_PRIMARY_OUT_FMT_TILED_128_NV12	(0x01 << 4)
78 #define VE_PRIMARY_OUT_FMT_YU12			(0x02 << 4)
79 #define VE_PRIMARY_OUT_FMT_YV12			(0x03 << 4)
80 #define VE_PRIMARY_OUT_FMT_NV12			(0x04 << 4)
81 #define VE_PRIMARY_OUT_FMT_NV21			(0x05 << 4)
82 #define VE_SECONDARY_OUT_FMT_EXT_TILED_32_NV12	(0x00 << 0)
83 #define VE_SECONDARY_OUT_FMT_EXT_TILED_128_NV12	(0x01 << 0)
84 #define VE_SECONDARY_OUT_FMT_EXT_YU12		(0x02 << 0)
85 #define VE_SECONDARY_OUT_FMT_EXT_YV12		(0x03 << 0)
86 #define VE_SECONDARY_OUT_FMT_EXT_NV12		(0x04 << 0)
87 #define VE_SECONDARY_OUT_FMT_EXT_NV21		(0x05 << 0)
88 
89 #define VE_VERSION				0xf0
90 
91 #define VE_VERSION_SHIFT			16
92 
93 #define VE_DEC_MPEG_MP12HDR			(VE_ENGINE_DEC_MPEG + 0x00)
94 
95 #define VE_DEC_MPEG_MP12HDR_SLICE_TYPE(t)	SHIFT_AND_MASK_BITS(t, 30, 28)
96 #define VE_DEC_MPEG_MP12HDR_F_CODE_SHIFT(x, y)	(24 - 4 * (y) - 8 * (x))
97 #define VE_DEC_MPEG_MP12HDR_F_CODE(__x, __y, __v) \
98 	(((unsigned long)(__v) & GENMASK(3, 0)) << VE_DEC_MPEG_MP12HDR_F_CODE_SHIFT(__x, __y))
99 
100 #define VE_DEC_MPEG_MP12HDR_INTRA_DC_PRECISION(p) \
101 	SHIFT_AND_MASK_BITS(p, 11, 10)
102 #define VE_DEC_MPEG_MP12HDR_INTRA_PICTURE_STRUCTURE(s) \
103 	SHIFT_AND_MASK_BITS(s, 9, 8)
104 #define VE_DEC_MPEG_MP12HDR_TOP_FIELD_FIRST(v) \
105 	((v) ? BIT(7) : 0)
106 #define VE_DEC_MPEG_MP12HDR_FRAME_PRED_FRAME_DCT(v) \
107 	((v) ? BIT(6) : 0)
108 #define VE_DEC_MPEG_MP12HDR_CONCEALMENT_MOTION_VECTORS(v) \
109 	((v) ? BIT(5) : 0)
110 #define VE_DEC_MPEG_MP12HDR_Q_SCALE_TYPE(v) \
111 	((v) ? BIT(4) : 0)
112 #define VE_DEC_MPEG_MP12HDR_INTRA_VLC_FORMAT(v) \
113 	((v) ? BIT(3) : 0)
114 #define VE_DEC_MPEG_MP12HDR_ALTERNATE_SCAN(v) \
115 	((v) ? BIT(2) : 0)
116 #define VE_DEC_MPEG_MP12HDR_FULL_PEL_FORWARD_VECTOR(v) \
117 	((v) ? BIT(1) : 0)
118 #define VE_DEC_MPEG_MP12HDR_FULL_PEL_BACKWARD_VECTOR(v) \
119 	((v) ? BIT(0) : 0)
120 
121 #define VE_DEC_MPEG_PICCODEDSIZE		(VE_ENGINE_DEC_MPEG + 0x08)
122 
123 #define VE_DEC_MPEG_PICCODEDSIZE_WIDTH(w) \
124 	SHIFT_AND_MASK_BITS(DIV_ROUND_UP(w, 16), 15, 8)
125 #define VE_DEC_MPEG_PICCODEDSIZE_HEIGHT(h) \
126 	SHIFT_AND_MASK_BITS(DIV_ROUND_UP(h, 16), 7, 0)
127 
128 #define VE_DEC_MPEG_PICBOUNDSIZE		(VE_ENGINE_DEC_MPEG + 0x0c)
129 
130 #define VE_DEC_MPEG_PICBOUNDSIZE_WIDTH(w)	SHIFT_AND_MASK_BITS(w, 27, 16)
131 #define VE_DEC_MPEG_PICBOUNDSIZE_HEIGHT(h)	SHIFT_AND_MASK_BITS(h, 11, 0)
132 
133 #define VE_DEC_MPEG_MBADDR			(VE_ENGINE_DEC_MPEG + 0x10)
134 
135 #define VE_DEC_MPEG_MBADDR_X(w)			SHIFT_AND_MASK_BITS(w, 15, 8)
136 #define VE_DEC_MPEG_MBADDR_Y(h)			SHIFT_AND_MASK_BITS(h, 7, 0)
137 
138 #define VE_DEC_MPEG_CTRL			(VE_ENGINE_DEC_MPEG + 0x14)
139 
140 #define VE_DEC_MPEG_CTRL_MC_CACHE_EN		BIT(31)
141 #define VE_DEC_MPEG_CTRL_SW_VLD			BIT(27)
142 #define VE_DEC_MPEG_CTRL_SW_IQ_IS		BIT(17)
143 #define VE_DEC_MPEG_CTRL_QP_AC_DC_OUT_EN	BIT(14)
144 #define VE_DEC_MPEG_CTRL_ROTATE_SCALE_OUT_EN	BIT(8)
145 #define VE_DEC_MPEG_CTRL_MC_NO_WRITEBACK	BIT(7)
146 #define VE_DEC_MPEG_CTRL_ROTATE_IRQ_EN		BIT(6)
147 #define VE_DEC_MPEG_CTRL_VLD_DATA_REQ_IRQ_EN	BIT(5)
148 #define VE_DEC_MPEG_CTRL_ERROR_IRQ_EN		BIT(4)
149 #define VE_DEC_MPEG_CTRL_FINISH_IRQ_EN		BIT(3)
150 #define VE_DEC_MPEG_CTRL_IRQ_MASK \
151 	(VE_DEC_MPEG_CTRL_FINISH_IRQ_EN | VE_DEC_MPEG_CTRL_ERROR_IRQ_EN | \
152 	 VE_DEC_MPEG_CTRL_VLD_DATA_REQ_IRQ_EN)
153 
154 #define VE_DEC_MPEG_TRIGGER			(VE_ENGINE_DEC_MPEG + 0x18)
155 
156 #define VE_DEC_MPEG_TRIGGER_MB_BOUNDARY		BIT(31)
157 
158 #define VE_DEC_MPEG_TRIGGER_CHROMA_FMT_420	(0x00 << 27)
159 #define VE_DEC_MPEG_TRIGGER_CHROMA_FMT_411	(0x01 << 27)
160 #define VE_DEC_MPEG_TRIGGER_CHROMA_FMT_422	(0x02 << 27)
161 #define VE_DEC_MPEG_TRIGGER_CHROMA_FMT_444	(0x03 << 27)
162 #define VE_DEC_MPEG_TRIGGER_CHROMA_FMT_422T	(0x04 << 27)
163 
164 #define VE_DEC_MPEG_TRIGGER_MPEG1		(0x01 << 24)
165 #define VE_DEC_MPEG_TRIGGER_MPEG2		(0x02 << 24)
166 #define VE_DEC_MPEG_TRIGGER_JPEG		(0x03 << 24)
167 #define VE_DEC_MPEG_TRIGGER_MPEG4		(0x04 << 24)
168 #define VE_DEC_MPEG_TRIGGER_VP62		(0x05 << 24)
169 
170 #define VE_DEC_MPEG_TRIGGER_VP62_AC_GET_BITS	BIT(7)
171 
172 #define VE_DEC_MPEG_TRIGGER_STCD_VC1		(0x02 << 4)
173 #define VE_DEC_MPEG_TRIGGER_STCD_MPEG2		(0x01 << 4)
174 #define VE_DEC_MPEG_TRIGGER_STCD_AVC		(0x00 << 4)
175 
176 #define VE_DEC_MPEG_TRIGGER_HW_MPEG_VLD		(0x0f << 0)
177 #define VE_DEC_MPEG_TRIGGER_HW_JPEG_VLD		(0x0e << 0)
178 #define VE_DEC_MPEG_TRIGGER_HW_MB		(0x0d << 0)
179 #define VE_DEC_MPEG_TRIGGER_HW_ROTATE		(0x0c << 0)
180 #define VE_DEC_MPEG_TRIGGER_HW_VP6_VLD		(0x0b << 0)
181 #define VE_DEC_MPEG_TRIGGER_HW_MAF		(0x0a << 0)
182 #define VE_DEC_MPEG_TRIGGER_HW_STCD_END		(0x09 << 0)
183 #define VE_DEC_MPEG_TRIGGER_HW_STCD_BEGIN	(0x08 << 0)
184 #define VE_DEC_MPEG_TRIGGER_SW_MC		(0x07 << 0)
185 #define VE_DEC_MPEG_TRIGGER_SW_IQ		(0x06 << 0)
186 #define VE_DEC_MPEG_TRIGGER_SW_IDCT		(0x05 << 0)
187 #define VE_DEC_MPEG_TRIGGER_SW_SCALE		(0x04 << 0)
188 #define VE_DEC_MPEG_TRIGGER_SW_VP6		(0x03 << 0)
189 #define VE_DEC_MPEG_TRIGGER_SW_VP62_AC_GET_BITS	(0x02 << 0)
190 
191 #define VE_DEC_MPEG_STATUS			(VE_ENGINE_DEC_MPEG + 0x1c)
192 
193 #define VE_DEC_MPEG_STATUS_START_DETECT_BUSY	BIT(27)
194 #define VE_DEC_MPEG_STATUS_VP6_BIT		BIT(26)
195 #define VE_DEC_MPEG_STATUS_VP6_BIT_BUSY		BIT(25)
196 #define VE_DEC_MPEG_STATUS_MAF_BUSY		BIT(23)
197 #define VE_DEC_MPEG_STATUS_VP6_MVP_BUSY		BIT(22)
198 #define VE_DEC_MPEG_STATUS_JPEG_BIT_END		BIT(21)
199 #define VE_DEC_MPEG_STATUS_JPEG_RESTART_ERROR	BIT(20)
200 #define VE_DEC_MPEG_STATUS_JPEG_MARKER		BIT(19)
201 #define VE_DEC_MPEG_STATUS_ROTATE_BUSY		BIT(18)
202 #define VE_DEC_MPEG_STATUS_DEBLOCKING_BUSY	BIT(17)
203 #define VE_DEC_MPEG_STATUS_SCALE_DOWN_BUSY	BIT(16)
204 #define VE_DEC_MPEG_STATUS_IQIS_BUF_EMPTY	BIT(15)
205 #define VE_DEC_MPEG_STATUS_IDCT_BUF_EMPTY	BIT(14)
206 #define VE_DEC_MPEG_STATUS_VE_BUSY		BIT(13)
207 #define VE_DEC_MPEG_STATUS_MC_BUSY		BIT(12)
208 #define VE_DEC_MPEG_STATUS_IDCT_BUSY		BIT(11)
209 #define VE_DEC_MPEG_STATUS_IQIS_BUSY		BIT(10)
210 #define VE_DEC_MPEG_STATUS_DCAC_BUSY		BIT(9)
211 #define VE_DEC_MPEG_STATUS_VLD_BUSY		BIT(8)
212 #define VE_DEC_MPEG_STATUS_ROTATE_SUCCESS	BIT(3)
213 #define VE_DEC_MPEG_STATUS_VLD_DATA_REQ		BIT(2)
214 #define VE_DEC_MPEG_STATUS_ERROR		BIT(1)
215 #define VE_DEC_MPEG_STATUS_SUCCESS		BIT(0)
216 #define VE_DEC_MPEG_STATUS_CHECK_MASK \
217 	(VE_DEC_MPEG_STATUS_SUCCESS | VE_DEC_MPEG_STATUS_ERROR | \
218 	 VE_DEC_MPEG_STATUS_VLD_DATA_REQ)
219 #define VE_DEC_MPEG_STATUS_CHECK_ERROR \
220 	(VE_DEC_MPEG_STATUS_ERROR | VE_DEC_MPEG_STATUS_VLD_DATA_REQ)
221 
222 #define VE_DEC_MPEG_VLD_ADDR			(VE_ENGINE_DEC_MPEG + 0x28)
223 
224 #define VE_DEC_MPEG_VLD_ADDR_FIRST_PIC_DATA	BIT(30)
225 #define VE_DEC_MPEG_VLD_ADDR_LAST_PIC_DATA	BIT(29)
226 #define VE_DEC_MPEG_VLD_ADDR_VALID_PIC_DATA	BIT(28)
227 #define VE_DEC_MPEG_VLD_ADDR_BASE(a)					\
228 	({								\
229 		u32 _tmp = (a);						\
230 		u32 _lo = _tmp & GENMASK(27, 4);			\
231 		u32 _hi = (_tmp >> 28) & GENMASK(3, 0);			\
232 		(_lo | _hi);						\
233 	})
234 
235 #define VE_DEC_MPEG_VLD_OFFSET			(VE_ENGINE_DEC_MPEG + 0x2c)
236 #define VE_DEC_MPEG_VLD_LEN			(VE_ENGINE_DEC_MPEG + 0x30)
237 #define VE_DEC_MPEG_VLD_END_ADDR		(VE_ENGINE_DEC_MPEG + 0x34)
238 
239 #define VE_DEC_MPEG_REC_LUMA			(VE_ENGINE_DEC_MPEG + 0x48)
240 #define VE_DEC_MPEG_REC_CHROMA			(VE_ENGINE_DEC_MPEG + 0x4c)
241 #define VE_DEC_MPEG_FWD_REF_LUMA_ADDR		(VE_ENGINE_DEC_MPEG + 0x50)
242 #define VE_DEC_MPEG_FWD_REF_CHROMA_ADDR		(VE_ENGINE_DEC_MPEG + 0x54)
243 #define VE_DEC_MPEG_BWD_REF_LUMA_ADDR		(VE_ENGINE_DEC_MPEG + 0x58)
244 #define VE_DEC_MPEG_BWD_REF_CHROMA_ADDR		(VE_ENGINE_DEC_MPEG + 0x5c)
245 
246 #define VE_DEC_MPEG_IQMINPUT			(VE_ENGINE_DEC_MPEG + 0x80)
247 
248 #define VE_DEC_MPEG_IQMINPUT_FLAG_INTRA		(0x01 << 14)
249 #define VE_DEC_MPEG_IQMINPUT_FLAG_NON_INTRA	(0x00 << 14)
250 #define VE_DEC_MPEG_IQMINPUT_WEIGHT(i, v) \
251 	(SHIFT_AND_MASK_BITS(i, 13, 8) | SHIFT_AND_MASK_BITS(v, 7, 0))
252 
253 #define VE_DEC_MPEG_ERROR			(VE_ENGINE_DEC_MPEG + 0xc4)
254 #define VE_DEC_MPEG_CRTMBADDR			(VE_ENGINE_DEC_MPEG + 0xc8)
255 #define VE_DEC_MPEG_ROT_LUMA			(VE_ENGINE_DEC_MPEG + 0xcc)
256 #define VE_DEC_MPEG_ROT_CHROMA			(VE_ENGINE_DEC_MPEG + 0xd0)
257 
258 #define VE_DEC_H265_DEC_NAL_HDR			(VE_ENGINE_DEC_H265 + 0x00)
259 
260 #define VE_DEC_H265_DEC_NAL_HDR_NUH_TEMPORAL_ID_PLUS1(v) \
261 	SHIFT_AND_MASK_BITS(v, 8, 6)
262 #define VE_DEC_H265_DEC_NAL_HDR_NAL_UNIT_TYPE(v) \
263 	SHIFT_AND_MASK_BITS(v, 5, 0)
264 
265 #define VE_DEC_H265_FLAG(reg_flag, ctrl_flag, flags) \
266 	(((flags) & (ctrl_flag)) ? reg_flag : 0)
267 
268 #define VE_DEC_H265_DEC_SPS_HDR			(VE_ENGINE_DEC_H265 + 0x04)
269 
270 #define VE_DEC_H265_DEC_SPS_HDR_FLAG_STRONG_INTRA_SMOOTHING_ENABLE	BIT(26)
271 #define VE_DEC_H265_DEC_SPS_HDR_FLAG_SPS_TEMPORAL_MVP_ENABLED		BIT(25)
272 #define VE_DEC_H265_DEC_SPS_HDR_FLAG_SAMPLE_ADAPTIVE_OFFSET_ENABLED	BIT(24)
273 #define VE_DEC_H265_DEC_SPS_HDR_FLAG_AMP_ENABLED			BIT(23)
274 #define VE_DEC_H265_DEC_SPS_HDR_FLAG_SEPARATE_COLOUR_PLANE		BIT(2)
275 
276 #define VE_DEC_H265_DEC_SPS_HDR_MAX_TRANSFORM_HIERARCHY_DEPTH_INTRA(v) \
277 	SHIFT_AND_MASK_BITS(v, 22, 20)
278 #define VE_DEC_H265_DEC_SPS_HDR_MAX_TRANSFORM_HIERARCHY_DEPTH_INTER(v) \
279 	SHIFT_AND_MASK_BITS(v, 19, 17)
280 #define VE_DEC_H265_DEC_SPS_HDR_LOG2_DIFF_MAX_MIN_TRANSFORM_BLOCK_SIZE(v) \
281 	SHIFT_AND_MASK_BITS(v, 16, 15)
282 #define VE_DEC_H265_DEC_SPS_HDR_LOG2_MIN_TRANSFORM_BLOCK_SIZE_MINUS2(v) \
283 	SHIFT_AND_MASK_BITS(v, 14, 13)
284 #define VE_DEC_H265_DEC_SPS_HDR_LOG2_DIFF_MAX_MIN_LUMA_CODING_BLOCK_SIZE(v) \
285 	SHIFT_AND_MASK_BITS(v, 12, 11)
286 #define VE_DEC_H265_DEC_SPS_HDR_LOG2_MIN_LUMA_CODING_BLOCK_SIZE_MINUS3(v) \
287 	SHIFT_AND_MASK_BITS(v, 10, 9)
288 #define VE_DEC_H265_DEC_SPS_HDR_BIT_DEPTH_CHROMA_MINUS8(v) \
289 	SHIFT_AND_MASK_BITS(v, 8, 6)
290 #define VE_DEC_H265_DEC_SPS_HDR_BIT_DEPTH_LUMA_MINUS8(v) \
291 	SHIFT_AND_MASK_BITS(v, 5, 3)
292 #define VE_DEC_H265_DEC_SPS_HDR_CHROMA_FORMAT_IDC(v) \
293 	SHIFT_AND_MASK_BITS(v, 1, 0)
294 
295 #define VE_DEC_H265_DEC_PIC_SIZE		(VE_ENGINE_DEC_H265 + 0x08)
296 
297 #define VE_DEC_H265_DEC_PIC_SIZE_WIDTH(w)	(((w) << 0) & GENMASK(13, 0))
298 #define VE_DEC_H265_DEC_PIC_SIZE_HEIGHT(h)	(((h) << 16) & GENMASK(29, 16))
299 
300 #define VE_DEC_H265_DEC_PCM_CTRL		(VE_ENGINE_DEC_H265 + 0x0c)
301 
302 #define VE_DEC_H265_DEC_PCM_CTRL_FLAG_PCM_ENABLED		BIT(15)
303 #define VE_DEC_H265_DEC_PCM_CTRL_FLAG_PCM_LOOP_FILTER_DISABLED	BIT(14)
304 
305 #define VE_DEC_H265_DEC_PCM_CTRL_LOG2_DIFF_MAX_MIN_PCM_LUMA_CODING_BLOCK_SIZE(v) \
306 	SHIFT_AND_MASK_BITS(v, 11, 10)
307 #define VE_DEC_H265_DEC_PCM_CTRL_LOG2_MIN_PCM_LUMA_CODING_BLOCK_SIZE_MINUS3(v) \
308 	SHIFT_AND_MASK_BITS(v, 9, 8)
309 #define VE_DEC_H265_DEC_PCM_CTRL_PCM_SAMPLE_BIT_DEPTH_CHROMA_MINUS1(v) \
310 	SHIFT_AND_MASK_BITS(v, 7, 4)
311 #define VE_DEC_H265_DEC_PCM_CTRL_PCM_SAMPLE_BIT_DEPTH_LUMA_MINUS1(v) \
312 	SHIFT_AND_MASK_BITS(v, 3, 0)
313 
314 #define VE_DEC_H265_DEC_PPS_CTRL0		(VE_ENGINE_DEC_H265 + 0x10)
315 
316 #define VE_DEC_H265_DEC_PPS_CTRL0_FLAG_CU_QP_DELTA_ENABLED	BIT(3)
317 #define VE_DEC_H265_DEC_PPS_CTRL0_FLAG_TRANSFORM_SKIP_ENABLED	BIT(2)
318 #define VE_DEC_H265_DEC_PPS_CTRL0_FLAG_CONSTRAINED_INTRA_PRED	BIT(1)
319 #define VE_DEC_H265_DEC_PPS_CTRL0_FLAG_SIGN_DATA_HIDING_ENABLED	BIT(0)
320 
321 #define VE_DEC_H265_DEC_PPS_CTRL0_PPS_CR_QP_OFFSET(v) \
322 	SHIFT_AND_MASK_BITS(v, 29, 24)
323 #define VE_DEC_H265_DEC_PPS_CTRL0_PPS_CB_QP_OFFSET(v) \
324 	SHIFT_AND_MASK_BITS(v, 21, 16)
325 #define VE_DEC_H265_DEC_PPS_CTRL0_INIT_QP_MINUS26(v) \
326 	SHIFT_AND_MASK_BITS(v, 14, 8)
327 #define VE_DEC_H265_DEC_PPS_CTRL0_DIFF_CU_QP_DELTA_DEPTH(v) \
328 	SHIFT_AND_MASK_BITS(v, 5, 4)
329 
330 #define VE_DEC_H265_DEC_PPS_CTRL1		(VE_ENGINE_DEC_H265 + 0x14)
331 
332 #define VE_DEC_H265_DEC_PPS_CTRL1_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED BIT(6)
333 #define VE_DEC_H265_DEC_PPS_CTRL1_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED	BIT(5)
334 #define VE_DEC_H265_DEC_PPS_CTRL1_FLAG_ENTROPY_CODING_SYNC_ENABLED	BIT(4)
335 #define VE_DEC_H265_DEC_PPS_CTRL1_FLAG_TILES_ENABLED			BIT(3)
336 #define VE_DEC_H265_DEC_PPS_CTRL1_FLAG_TRANSQUANT_BYPASS_ENABLED	BIT(2)
337 #define VE_DEC_H265_DEC_PPS_CTRL1_FLAG_WEIGHTED_BIPRED			BIT(1)
338 #define VE_DEC_H265_DEC_PPS_CTRL1_FLAG_WEIGHTED_PRED			BIT(0)
339 
340 #define VE_DEC_H265_DEC_PPS_CTRL1_LOG2_PARALLEL_MERGE_LEVEL_MINUS2(v) \
341 	SHIFT_AND_MASK_BITS(v, 10, 8)
342 
343 #define VE_DEC_H265_SCALING_LIST_CTRL0		(VE_ENGINE_DEC_H265 + 0x18)
344 
345 #define VE_DEC_H265_SCALING_LIST_CTRL0_FLAG_ENABLED			BIT(31)
346 
347 #define VE_DEC_H265_SCALING_LIST_CTRL0_SRAM	(0 << 30)
348 #define VE_DEC_H265_SCALING_LIST_CTRL0_DEFAULT	(1 << 30)
349 
350 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0		(VE_ENGINE_DEC_H265 + 0x20)
351 
352 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_FLAG_COLLOCATED_FROM_L0		BIT(11)
353 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_FLAG_CABAC_INIT			BIT(10)
354 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_FLAG_MVD_L1_ZERO		BIT(9)
355 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_FLAG_SLICE_SAO_CHROMA		BIT(8)
356 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_FLAG_SLICE_SAO_LUMA		BIT(7)
357 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_FLAG_SLICE_TEMPORAL_MVP_ENABLE	BIT(6)
358 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_FLAG_DEPENDENT_SLICE_SEGMENT	BIT(1)
359 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_FLAG_FIRST_SLICE_SEGMENT_IN_PIC	BIT(0)
360 
361 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_PICTURE_TYPE(v) \
362 	SHIFT_AND_MASK_BITS(v, 29, 28)
363 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_FIVE_MINUS_MAX_NUM_MERGE_CAND(v) \
364 	SHIFT_AND_MASK_BITS(v, 26, 24)
365 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_NUM_REF_IDX_L1_ACTIVE_MINUS1(v) \
366 	SHIFT_AND_MASK_BITS(v, 23, 20)
367 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_NUM_REF_IDX_L0_ACTIVE_MINUS1(v) \
368 	SHIFT_AND_MASK_BITS(v, 19, 16)
369 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_COLLOCATED_REF_IDX(v) \
370 	SHIFT_AND_MASK_BITS(v, 15, 12)
371 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_COLOUR_PLANE_ID(v) \
372 	SHIFT_AND_MASK_BITS(v, 5, 4)
373 #define VE_DEC_H265_DEC_SLICE_HDR_INFO0_SLICE_TYPE(v) \
374 	SHIFT_AND_MASK_BITS(v, 3, 2)
375 
376 #define VE_DEC_H265_DEC_SLICE_HDR_INFO1		(VE_ENGINE_DEC_H265 + 0x24)
377 
378 #define VE_DEC_H265_DEC_SLICE_HDR_INFO1_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED BIT(23)
379 #define VE_DEC_H265_DEC_SLICE_HDR_INFO1_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED BIT(22)
380 
381 #define VE_DEC_H265_DEC_SLICE_HDR_INFO1_SLICE_TC_OFFSET_DIV2(v) \
382 	SHIFT_AND_MASK_BITS(v, 31, 28)
383 #define VE_DEC_H265_DEC_SLICE_HDR_INFO1_SLICE_BETA_OFFSET_DIV2(v) \
384 	SHIFT_AND_MASK_BITS(v, 27, 24)
385 #define VE_DEC_H265_DEC_SLICE_HDR_INFO1_SLICE_POC_BIGEST_IN_RPS_ST(v) \
386 	((v) ? BIT(21) : 0)
387 #define VE_DEC_H265_DEC_SLICE_HDR_INFO1_SLICE_CR_QP_OFFSET(v) \
388 	SHIFT_AND_MASK_BITS(v, 20, 16)
389 #define VE_DEC_H265_DEC_SLICE_HDR_INFO1_SLICE_CB_QP_OFFSET(v) \
390 	SHIFT_AND_MASK_BITS(v, 12, 8)
391 #define VE_DEC_H265_DEC_SLICE_HDR_INFO1_SLICE_QP_DELTA(v) \
392 	SHIFT_AND_MASK_BITS(v, 6, 0)
393 
394 #define VE_DEC_H265_DEC_SLICE_HDR_INFO2		(VE_ENGINE_DEC_H265 + 0x28)
395 
396 #define VE_DEC_H265_DEC_SLICE_HDR_INFO2_NUM_ENTRY_POINT_OFFSETS(v) \
397 	SHIFT_AND_MASK_BITS(v, 21, 8)
398 #define VE_DEC_H265_DEC_SLICE_HDR_INFO2_CHROMA_LOG2_WEIGHT_DENOM(v) \
399 	SHIFT_AND_MASK_BITS(v, 6, 4)
400 #define VE_DEC_H265_DEC_SLICE_HDR_INFO2_LUMA_LOG2_WEIGHT_DENOM(v) \
401 	SHIFT_AND_MASK_BITS(v, 2, 0)
402 
403 #define VE_DEC_H265_DEC_CTB_ADDR		(VE_ENGINE_DEC_H265 + 0x2c)
404 
405 #define VE_DEC_H265_DEC_CTB_ADDR_Y(y)		SHIFT_AND_MASK_BITS(y, 25, 16)
406 #define VE_DEC_H265_DEC_CTB_ADDR_X(x)		SHIFT_AND_MASK_BITS(x, 9, 0)
407 
408 #define VE_DEC_H265_CTRL			(VE_ENGINE_DEC_H265 + 0x30)
409 
410 #define VE_DEC_H265_CTRL_DDR_CONSISTENCY_EN	BIT(31)
411 #define VE_DEC_H265_CTRL_STCD_EN		BIT(25)
412 #define VE_DEC_H265_CTRL_EPTB_DEC_BYPASS_EN	BIT(24)
413 #define VE_DEC_H265_CTRL_TQ_BYPASS_EN		BIT(12)
414 #define VE_DEC_H265_CTRL_VLD_BYPASS_EN		BIT(11)
415 #define VE_DEC_H265_CTRL_NCRI_CACHE_DISABLE	BIT(10)
416 #define VE_DEC_H265_CTRL_ROTATE_SCALE_OUT_EN	BIT(9)
417 #define VE_DEC_H265_CTRL_MC_NO_WRITEBACK	BIT(8)
418 #define VE_DEC_H265_CTRL_VLD_DATA_REQ_IRQ_EN	BIT(2)
419 #define VE_DEC_H265_CTRL_ERROR_IRQ_EN		BIT(1)
420 #define VE_DEC_H265_CTRL_FINISH_IRQ_EN		BIT(0)
421 #define VE_DEC_H265_CTRL_IRQ_MASK \
422 	(VE_DEC_H265_CTRL_FINISH_IRQ_EN | VE_DEC_H265_CTRL_ERROR_IRQ_EN | \
423 	 VE_DEC_H265_CTRL_VLD_DATA_REQ_IRQ_EN)
424 
425 #define VE_DEC_H265_TRIGGER			(VE_ENGINE_DEC_H265 + 0x34)
426 
427 #define VE_DEC_H265_TRIGGER_TYPE_N_BITS(x)	(((x) & 0x3f) << 8)
428 #define VE_DEC_H265_TRIGGER_STCD_VC1		(0x02 << 4)
429 #define VE_DEC_H265_TRIGGER_STCD_AVS		(0x01 << 4)
430 #define VE_DEC_H265_TRIGGER_STCD_HEVC		(0x00 << 4)
431 #define VE_DEC_H265_TRIGGER_DEC_SLICE		(0x08 << 0)
432 #define VE_DEC_H265_TRIGGER_INIT_SWDEC		(0x07 << 0)
433 #define VE_DEC_H265_TRIGGER_BYTE_ALIGN		(0x06 << 0)
434 #define VE_DEC_H265_TRIGGER_GET_VLCUE		(0x05 << 0)
435 #define VE_DEC_H265_TRIGGER_GET_VLCSE		(0x04 << 0)
436 #define VE_DEC_H265_TRIGGER_FLUSH_BITS		(0x03 << 0)
437 #define VE_DEC_H265_TRIGGER_GET_BITS		(0x02 << 0)
438 #define VE_DEC_H265_TRIGGER_SHOW_BITS		(0x01 << 0)
439 
440 #define VE_DEC_H265_STATUS			(VE_ENGINE_DEC_H265 + 0x38)
441 
442 #define VE_DEC_H265_STATUS_STCD			BIT(24)
443 #define VE_DEC_H265_STATUS_STCD_BUSY		BIT(21)
444 #define VE_DEC_H265_STATUS_WB_BUSY		BIT(20)
445 #define VE_DEC_H265_STATUS_BS_DMA_BUSY		BIT(19)
446 #define VE_DEC_H265_STATUS_IT_BUSY		BIT(18)
447 #define VE_DEC_H265_STATUS_INTER_BUSY		BIT(17)
448 #define VE_DEC_H265_STATUS_MORE_DATA		BIT(16)
449 #define VE_DEC_H265_STATUS_DBLK_BUSY		BIT(15)
450 #define VE_DEC_H265_STATUS_IREC_BUSY		BIT(14)
451 #define VE_DEC_H265_STATUS_INTRA_BUSY		BIT(13)
452 #define VE_DEC_H265_STATUS_MCRI_BUSY		BIT(12)
453 #define VE_DEC_H265_STATUS_IQIT_BUSY		BIT(11)
454 #define VE_DEC_H265_STATUS_MVP_BUSY		BIT(10)
455 #define VE_DEC_H265_STATUS_IS_BUSY		BIT(9)
456 #define VE_DEC_H265_STATUS_VLD_BUSY		BIT(8)
457 #define VE_DEC_H265_STATUS_OVER_TIME		BIT(3)
458 #define VE_DEC_H265_STATUS_VLD_DATA_REQ		BIT(2)
459 #define VE_DEC_H265_STATUS_ERROR		BIT(1)
460 #define VE_DEC_H265_STATUS_SUCCESS		BIT(0)
461 #define VE_DEC_H265_STATUS_STCD_TYPE_MASK	GENMASK(23, 22)
462 #define VE_DEC_H265_STATUS_CHECK_MASK \
463 	(VE_DEC_H265_STATUS_SUCCESS | VE_DEC_H265_STATUS_ERROR | \
464 	 VE_DEC_H265_STATUS_VLD_DATA_REQ)
465 #define VE_DEC_H265_STATUS_CHECK_ERROR \
466 	(VE_DEC_H265_STATUS_ERROR | VE_DEC_H265_STATUS_VLD_DATA_REQ)
467 
468 #define VE_DEC_H265_DEC_CTB_NUM			(VE_ENGINE_DEC_H265 + 0x3c)
469 
470 #define VE_DEC_H265_BITS_ADDR			(VE_ENGINE_DEC_H265 + 0x40)
471 
472 #define VE_DEC_H265_BITS_ADDR_FIRST_SLICE_DATA	BIT(30)
473 #define VE_DEC_H265_BITS_ADDR_LAST_SLICE_DATA	BIT(29)
474 #define VE_DEC_H265_BITS_ADDR_VALID_SLICE_DATA	BIT(28)
475 #define VE_DEC_H265_BITS_ADDR_BASE(a)		(((a) >> 8) & GENMASK(27, 0))
476 
477 #define VE_DEC_H265_BITS_OFFSET			(VE_ENGINE_DEC_H265 + 0x44)
478 #define VE_DEC_H265_BITS_LEN			(VE_ENGINE_DEC_H265 + 0x48)
479 
480 #define VE_DEC_H265_BITS_END_ADDR		(VE_ENGINE_DEC_H265 + 0x4c)
481 
482 #define VE_DEC_H265_BITS_END_ADDR_BASE(a)	((a) >> 8)
483 
484 #define VE_DEC_H265_SDRT_CTRL			(VE_ENGINE_DEC_H265 + 0x50)
485 #define VE_DEC_H265_SDRT_LUMA_ADDR		(VE_ENGINE_DEC_H265 + 0x54)
486 #define VE_DEC_H265_SDRT_CHROMA_ADDR		(VE_ENGINE_DEC_H265 + 0x58)
487 
488 #define VE_DEC_H265_OUTPUT_FRAME_IDX		(VE_ENGINE_DEC_H265 + 0x5c)
489 
490 #define VE_DEC_H265_NEIGHBOR_INFO_ADDR		(VE_ENGINE_DEC_H265 + 0x60)
491 
492 #define VE_DEC_H265_NEIGHBOR_INFO_ADDR_BASE(a)	((a) >> 8)
493 
494 #define VE_DEC_H265_ENTRY_POINT_OFFSET_ADDR	(VE_ENGINE_DEC_H265 + 0x64)
495 #define VE_DEC_H265_TILE_START_CTB		(VE_ENGINE_DEC_H265 + 0x68)
496 #define VE_DEC_H265_TILE_END_CTB		(VE_ENGINE_DEC_H265 + 0x6c)
497 
498 #define VE_DEC_H265_LOW_ADDR			(VE_ENGINE_DEC_H265 + 0x80)
499 
500 #define VE_DEC_H265_LOW_ADDR_PRIMARY_CHROMA(a) \
501 	SHIFT_AND_MASK_BITS(a, 31, 24)
502 #define VE_DEC_H265_LOW_ADDR_SECONDARY_CHROMA(a) \
503 	SHIFT_AND_MASK_BITS(a, 23, 16)
504 #define VE_DEC_H265_LOW_ADDR_ENTRY_POINTS_BUF(a) \
505 	SHIFT_AND_MASK_BITS(a, 7, 0)
506 
507 #define VE_DEC_H265_SRAM_OFFSET			(VE_ENGINE_DEC_H265 + 0xe0)
508 
509 #define VE_DEC_H265_SRAM_OFFSET_PRED_WEIGHT_LUMA_L0	0x00
510 #define VE_DEC_H265_SRAM_OFFSET_PRED_WEIGHT_CHROMA_L0	0x20
511 #define VE_DEC_H265_SRAM_OFFSET_PRED_WEIGHT_LUMA_L1	0x60
512 #define VE_DEC_H265_SRAM_OFFSET_PRED_WEIGHT_CHROMA_L1	0x80
513 #define VE_DEC_H265_SRAM_OFFSET_FRAME_INFO		0x400
514 #define VE_DEC_H265_SRAM_OFFSET_FRAME_INFO_UNIT		0x20
515 #define VE_DEC_H265_SRAM_OFFSET_SCALING_LISTS		0x800
516 #define VE_DEC_H265_SRAM_OFFSET_REF_PIC_LIST0		0xc00
517 #define VE_DEC_H265_SRAM_OFFSET_REF_PIC_LIST1		0xc10
518 
519 #define VE_DEC_H265_SRAM_DATA			(VE_ENGINE_DEC_H265 + 0xe4)
520 
521 #define VE_DEC_H265_SRAM_DATA_ADDR_BASE(a)	((a) >> 8)
522 #define VE_DEC_H265_SRAM_REF_PIC_LIST_LT_REF	BIT(7)
523 
524 #define VE_H264_SPS			0x200
525 #define VE_H264_SPS_MBS_ONLY			BIT(18)
526 #define VE_H264_SPS_MB_ADAPTIVE_FRAME_FIELD	BIT(17)
527 #define VE_H264_SPS_DIRECT_8X8_INFERENCE	BIT(16)
528 
529 #define VE_H264_PPS			0x204
530 #define VE_H264_PPS_ENTROPY_CODING_MODE		BIT(15)
531 #define VE_H264_PPS_WEIGHTED_PRED		BIT(4)
532 #define VE_H264_PPS_CONSTRAINED_INTRA_PRED	BIT(1)
533 #define VE_H264_PPS_TRANSFORM_8X8_MODE		BIT(0)
534 
535 #define VE_H264_SHS			0x208
536 #define VE_H264_SHS_FIRST_SLICE_IN_PIC		BIT(5)
537 #define VE_H264_SHS_FIELD_PIC			BIT(4)
538 #define VE_H264_SHS_BOTTOM_FIELD		BIT(3)
539 #define VE_H264_SHS_DIRECT_SPATIAL_MV_PRED	BIT(2)
540 
541 #define VE_H264_SHS2			0x20c
542 #define VE_H264_SHS2_NUM_REF_IDX_ACTIVE_OVRD	BIT(12)
543 
544 #define VE_H264_SHS_WP			0x210
545 
546 #define VE_H264_SHS_QP			0x21c
547 #define VE_H264_SHS_QP_SCALING_MATRIX_DEFAULT	BIT(24)
548 
549 #define VE_H264_CTRL			0x220
550 #define VE_H264_CTRL_VLD_DATA_REQ_INT		BIT(2)
551 #define VE_H264_CTRL_DECODE_ERR_INT		BIT(1)
552 #define VE_H264_CTRL_SLICE_DECODE_INT		BIT(0)
553 
554 #define VE_H264_CTRL_INT_MASK		(VE_H264_CTRL_VLD_DATA_REQ_INT | \
555 					 VE_H264_CTRL_DECODE_ERR_INT | \
556 					 VE_H264_CTRL_SLICE_DECODE_INT)
557 
558 #define VE_H264_TRIGGER_TYPE		0x224
559 #define VE_H264_TRIGGER_TYPE_N_BITS(x)		(((x) & 0x3f) << 8)
560 #define VE_H264_TRIGGER_TYPE_AVC_SLICE_DECODE	(8 << 0)
561 #define VE_H264_TRIGGER_TYPE_INIT_SWDEC		(7 << 0)
562 #define VE_H264_TRIGGER_TYPE_FLUSH_BITS		(3 << 0)
563 
564 #define VE_H264_STATUS			0x228
565 #define VE_H264_STATUS_VLD_DATA_REQ_INT		VE_H264_CTRL_VLD_DATA_REQ_INT
566 #define VE_H264_STATUS_DECODE_ERR_INT		VE_H264_CTRL_DECODE_ERR_INT
567 #define VE_H264_STATUS_SLICE_DECODE_INT		VE_H264_CTRL_SLICE_DECODE_INT
568 #define VE_H264_STATUS_VLD_BUSY			BIT(8)
569 
570 #define VE_H264_STATUS_INT_MASK			VE_H264_CTRL_INT_MASK
571 
572 #define VE_H264_CUR_MB_NUM		0x22c
573 
574 #define VE_H264_VLD_ADDR		0x230
575 #define VE_H264_VLD_ADDR_FIRST			BIT(30)
576 #define VE_H264_VLD_ADDR_LAST			BIT(29)
577 #define VE_H264_VLD_ADDR_VALID			BIT(28)
578 #define VE_H264_VLD_ADDR_VAL(x)			(((x) & 0x0ffffff0) | ((x) >> 28))
579 
580 #define VE_H264_VLD_OFFSET		0x234
581 #define VE_H264_VLD_LEN			0x238
582 #define VE_H264_VLD_END			0x23c
583 #define VE_H264_SDROT_CTRL		0x240
584 #define VE_H264_OUTPUT_FRAME_IDX	0x24c
585 #define VE_H264_EXTRA_BUFFER1		0x250
586 #define VE_H264_EXTRA_BUFFER2		0x254
587 #define VE_H264_BASIC_BITS		0x2dc
588 #define VE_AVC_SRAM_PORT_OFFSET		0x2e0
589 #define VE_AVC_SRAM_PORT_DATA		0x2e4
590 
591 #define VE_ISP_INPUT_SIZE		0xa00
592 #define VE_ISP_INPUT_STRIDE		0xa04
593 #define VE_ISP_CTRL			0xa08
594 #define VE_ISP_INPUT_LUMA		0xa78
595 #define VE_ISP_INPUT_CHROMA		0xa7c
596 
597 #define VE_AVC_PARAM			0xb04
598 #define VE_AVC_QP			0xb08
599 #define VE_AVC_MOTION_EST		0xb10
600 #define VE_AVC_CTRL			0xb14
601 #define VE_AVC_TRIGGER			0xb18
602 #define VE_AVC_STATUS			0xb1c
603 #define VE_AVC_BASIC_BITS		0xb20
604 #define VE_AVC_UNK_BUF			0xb60
605 #define VE_AVC_VLE_ADDR			0xb80
606 #define VE_AVC_VLE_END			0xb84
607 #define VE_AVC_VLE_OFFSET		0xb88
608 #define VE_AVC_VLE_MAX			0xb8c
609 #define VE_AVC_VLE_LENGTH		0xb90
610 #define VE_AVC_REF_LUMA			0xba0
611 #define VE_AVC_REF_CHROMA		0xba4
612 #define VE_AVC_REC_LUMA			0xbb0
613 #define VE_AVC_REC_CHROMA		0xbb4
614 #define VE_AVC_REF_SLUMA		0xbb8
615 #define VE_AVC_REC_SLUMA		0xbbc
616 #define VE_AVC_MB_INFO			0xbc0
617 
618 #endif
619