xref: /linux/drivers/media/platform/qcom/iris/iris_hfi_gen2.c (revision bba2c3615bd6cfee7456d1130f2e6b01b3f4e9ba)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4  * Copyright (c) 2025 Linaro Ltd
5  */
6 
7 #include "iris_ctrls.h"
8 #include "iris_hfi_gen2.h"
9 #include "iris_hfi_gen2_defines.h"
10 #include "iris_platform_common.h"
11 #include "iris_vpu_buffer.h"
12 
13 #define VIDEO_ARCH_LX 1
14 #define BITRATE_MAX				245000000
15 
16 static const struct platform_inst_fw_cap inst_fw_cap_sm8550_dec[] = {
17 	{
18 		.cap_id = PROFILE_H264,
19 		.min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
20 		.max = V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH,
21 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
22 				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) |
23 				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
24 				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH) |
25 				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH),
26 		.value = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
27 		.hfi_id = HFI_PROP_PROFILE,
28 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
29 		.set = iris_set_u32_enum,
30 	},
31 	{
32 		.cap_id = PROFILE_HEVC,
33 		.min = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
34 		.max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10,
35 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) |
36 				BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) |
37 				BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10),
38 		.value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
39 		.hfi_id = HFI_PROP_PROFILE,
40 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
41 		.set = iris_set_u32_enum,
42 	},
43 	{
44 		.cap_id = PROFILE_AV1,
45 		.min = V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN,
46 		.max = V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN,
47 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN),
48 		.value = V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN,
49 		.hfi_id = HFI_PROP_PROFILE,
50 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
51 		.set = iris_set_u32_enum,
52 	},
53 	{
54 		.cap_id = PROFILE_VP9,
55 		.min = V4L2_MPEG_VIDEO_VP9_PROFILE_0,
56 		.max = V4L2_MPEG_VIDEO_VP9_PROFILE_2,
57 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_0) |
58 				BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_2),
59 		.value = V4L2_MPEG_VIDEO_VP9_PROFILE_0,
60 		.hfi_id = HFI_PROP_PROFILE,
61 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
62 		.set = iris_set_u32_enum,
63 	},
64 	{
65 		.cap_id = LEVEL_H264,
66 		.min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
67 		.max = V4L2_MPEG_VIDEO_H264_LEVEL_6_2,
68 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
69 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) |
70 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) |
71 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) |
72 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) |
73 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
74 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) |
75 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) |
76 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
77 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
78 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
79 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
80 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
81 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) |
82 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) |
83 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) |
84 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) |
85 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0) |
86 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_1) |
87 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_2),
88 		.value = V4L2_MPEG_VIDEO_H264_LEVEL_6_1,
89 		.hfi_id = HFI_PROP_LEVEL,
90 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
91 		.set = iris_set_u32_enum,
92 	},
93 	{
94 		.cap_id = LEVEL_HEVC,
95 		.min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
96 		.max = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2,
97 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) |
98 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) |
99 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) |
100 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) |
101 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) |
102 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) |
103 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) |
104 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) |
105 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) |
106 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) |
107 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) |
108 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1) |
109 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2),
110 		.value = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1,
111 		.hfi_id = HFI_PROP_LEVEL,
112 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
113 		.set = iris_set_u32_enum,
114 	},
115 	{
116 		.cap_id = LEVEL_VP9,
117 		.min = V4L2_MPEG_VIDEO_VP9_LEVEL_1_0,
118 		.max = V4L2_MPEG_VIDEO_VP9_LEVEL_6_0,
119 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_0) |
120 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_1) |
121 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_0) |
122 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_1) |
123 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_0) |
124 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_1) |
125 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_0) |
126 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_1) |
127 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_0) |
128 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_1) |
129 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_2) |
130 				BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_6_0),
131 		.value = V4L2_MPEG_VIDEO_VP9_LEVEL_6_0,
132 		.hfi_id = HFI_PROP_LEVEL,
133 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
134 		.set = iris_set_u32_enum,
135 	},
136 	{
137 		.cap_id = LEVEL_AV1,
138 		.min = V4L2_MPEG_VIDEO_AV1_LEVEL_2_0,
139 		.max = V4L2_MPEG_VIDEO_AV1_LEVEL_6_1,
140 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_2_0) |
141 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_2_1) |
142 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_2_2) |
143 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_2_3) |
144 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_3_0) |
145 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_3_1) |
146 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_3_2) |
147 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_3_3) |
148 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_4_0) |
149 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_4_1) |
150 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_4_2) |
151 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_4_3) |
152 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_5_0) |
153 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_5_1) |
154 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_5_2) |
155 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_5_3) |
156 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_6_0) |
157 				BIT(V4L2_MPEG_VIDEO_AV1_LEVEL_6_1),
158 		.value = V4L2_MPEG_VIDEO_AV1_LEVEL_6_1,
159 		.hfi_id = HFI_PROP_LEVEL,
160 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
161 		.set = iris_set_u32_enum,
162 	},
163 	{
164 		.cap_id = TIER,
165 		.min = V4L2_MPEG_VIDEO_HEVC_TIER_MAIN,
166 		.max = V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
167 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_TIER_MAIN) |
168 				BIT(V4L2_MPEG_VIDEO_HEVC_TIER_HIGH),
169 		.value = V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
170 		.hfi_id = HFI_PROP_TIER,
171 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
172 		.set = iris_set_u32_enum,
173 	},
174 	{
175 		.cap_id = TIER_AV1,
176 		.min = 0,
177 		.max = 1,
178 		.step_or_mask = 1,
179 		.value = 0,
180 		.hfi_id = HFI_PROP_TIER,
181 		.flags = CAP_FLAG_INPUT_PORT,
182 		.set = iris_set_u32,
183 	},
184 	{
185 		.cap_id = DRAP,
186 		.min = 0,
187 		.max = 1,
188 		.step_or_mask = 1,
189 		.value = 0,
190 		.hfi_id = HFI_PROP_AV1_DRAP_CONFIG,
191 		.flags = CAP_FLAG_INPUT_PORT,
192 		.set = iris_set_u32,
193 	},
194 	{
195 		.cap_id = FILM_GRAIN,
196 		.min = 0,
197 		.max = 1,
198 		.step_or_mask = 1,
199 		.value = 0,
200 		.hfi_id = HFI_PROP_AV1_FILM_GRAIN_PRESENT,
201 		.flags = CAP_FLAG_VOLATILE,
202 	},
203 	{
204 		.cap_id = SUPER_BLOCK,
205 		.min = 0,
206 		.max = 1,
207 		.step_or_mask = 1,
208 		.value = 0,
209 		.hfi_id = HFI_PROP_AV1_SUPER_BLOCK_ENABLED,
210 	},
211 	{
212 		.cap_id = ENH_LAYER_COUNT,
213 		.min = 0,
214 		.max = 1,
215 		.step_or_mask = 1,
216 		.value = 0,
217 		.hfi_id = HFI_PROP_AV1_OP_POINT,
218 		.flags = CAP_FLAG_INPUT_PORT,
219 		.set = iris_set_u32,
220 	},
221 	{
222 		.cap_id = INPUT_BUF_HOST_MAX_COUNT,
223 		.min = DEFAULT_MAX_HOST_BUF_COUNT,
224 		.max = DEFAULT_MAX_HOST_BURST_BUF_COUNT,
225 		.step_or_mask = 1,
226 		.value = DEFAULT_MAX_HOST_BUF_COUNT,
227 		.hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT,
228 		.flags = CAP_FLAG_INPUT_PORT,
229 		.set = iris_set_u32,
230 	},
231 	{
232 		.cap_id = STAGE,
233 		.min = STAGE_1,
234 		.max = STAGE_2,
235 		.step_or_mask = 1,
236 		.value = STAGE_2,
237 		.hfi_id = HFI_PROP_STAGE,
238 		.set = iris_set_stage,
239 	},
240 	{
241 		.cap_id = PIPE,
242 		/* .max, .min and .value are set via platform data */
243 		.step_or_mask = 1,
244 		.hfi_id = HFI_PROP_PIPE,
245 		.set = iris_set_pipe,
246 	},
247 	{
248 		.cap_id = POC,
249 		.min = 0,
250 		.max = 2,
251 		.step_or_mask = 1,
252 		.value = 1,
253 		.hfi_id = HFI_PROP_PIC_ORDER_CNT_TYPE,
254 	},
255 	{
256 		.cap_id = CODED_FRAMES,
257 		.min = CODED_FRAMES_PROGRESSIVE,
258 		.max = CODED_FRAMES_PROGRESSIVE,
259 		.step_or_mask = 0,
260 		.value = CODED_FRAMES_PROGRESSIVE,
261 		.hfi_id = HFI_PROP_CODED_FRAMES,
262 	},
263 	{
264 		.cap_id = BIT_DEPTH,
265 		.min = BIT_DEPTH_8,
266 		.max = BIT_DEPTH_10,
267 		.step_or_mask = 1,
268 		.value = BIT_DEPTH_8,
269 		.hfi_id = HFI_PROP_LUMA_CHROMA_BIT_DEPTH,
270 	},
271 	{
272 		.cap_id = RAP_FRAME,
273 		.min = 0,
274 		.max = 1,
275 		.step_or_mask = 1,
276 		.value = 1,
277 		.hfi_id = HFI_PROP_DEC_START_FROM_RAP_FRAME,
278 		.flags = CAP_FLAG_INPUT_PORT,
279 		.set = iris_set_u32,
280 	},
281 };
282 
283 static const struct platform_inst_fw_cap inst_fw_cap_sm8550_enc[] = {
284 	{
285 		.cap_id = PROFILE_H264,
286 		.min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
287 		.max = V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH,
288 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
289 				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH) |
290 				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) |
291 				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
292 				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH),
293 		.value = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
294 		.hfi_id = HFI_PROP_PROFILE,
295 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
296 		.set = iris_set_profile,
297 	},
298 	{
299 		.cap_id = PROFILE_HEVC,
300 		.min = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
301 		.max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10,
302 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) |
303 				BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) |
304 				BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10),
305 		.value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
306 		.hfi_id = HFI_PROP_PROFILE,
307 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
308 		.set = iris_set_profile,
309 	},
310 	{
311 		.cap_id = LEVEL_H264,
312 		.min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
313 		.max = V4L2_MPEG_VIDEO_H264_LEVEL_6_0,
314 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
315 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) |
316 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) |
317 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) |
318 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) |
319 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
320 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) |
321 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) |
322 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
323 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
324 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
325 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
326 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
327 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) |
328 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) |
329 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) |
330 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) |
331 				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0),
332 		.value = V4L2_MPEG_VIDEO_H264_LEVEL_5_0,
333 		.hfi_id = HFI_PROP_LEVEL,
334 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
335 		.set = iris_set_level,
336 	},
337 	{
338 		.cap_id = LEVEL_HEVC,
339 		.min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
340 		.max = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2,
341 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) |
342 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) |
343 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) |
344 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) |
345 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) |
346 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) |
347 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) |
348 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) |
349 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) |
350 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) |
351 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) |
352 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1) |
353 				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2),
354 		.value = V4L2_MPEG_VIDEO_HEVC_LEVEL_5,
355 		.hfi_id = HFI_PROP_LEVEL,
356 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
357 		.set = iris_set_level,
358 	},
359 	{
360 		.cap_id = STAGE,
361 		.min = STAGE_1,
362 		.max = STAGE_2,
363 		.step_or_mask = 1,
364 		.value = STAGE_2,
365 		.hfi_id = HFI_PROP_STAGE,
366 		.set = iris_set_stage,
367 	},
368 	{
369 		.cap_id = HEADER_MODE,
370 		.min = V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
371 		.max = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
372 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE) |
373 				BIT(V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME),
374 		.value = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
375 		.hfi_id = HFI_PROP_SEQ_HEADER_MODE,
376 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
377 		.set = iris_set_header_mode_gen2,
378 	},
379 	{
380 		.cap_id = PREPEND_SPSPPS_TO_IDR,
381 		.min = 0,
382 		.max = 1,
383 		.step_or_mask = 1,
384 		.value = 0,
385 	},
386 	{
387 		.cap_id = BITRATE,
388 		.min = 1,
389 		.max = BITRATE_MAX,
390 		.step_or_mask = 1,
391 		.value = BITRATE_DEFAULT,
392 		.hfi_id = HFI_PROP_TOTAL_BITRATE,
393 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
394 			CAP_FLAG_DYNAMIC_ALLOWED,
395 		.set = iris_set_bitrate_gen2,
396 	},
397 	{
398 		.cap_id = BITRATE_PEAK,
399 		.min = 1,
400 		.max = BITRATE_MAX,
401 		.step_or_mask = 1,
402 		.value = BITRATE_DEFAULT,
403 		.hfi_id = HFI_PROP_TOTAL_PEAK_BITRATE,
404 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
405 			CAP_FLAG_DYNAMIC_ALLOWED,
406 		.set = iris_set_peak_bitrate,
407 	},
408 	{
409 		.cap_id = BITRATE_MODE,
410 		.min = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
411 		.max = V4L2_MPEG_VIDEO_BITRATE_MODE_CBR,
412 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) |
413 				BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CBR),
414 		.value = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
415 		.hfi_id = HFI_PROP_RATE_CONTROL,
416 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
417 		.set = iris_set_bitrate_mode_gen2,
418 	},
419 	{
420 		.cap_id = FRAME_SKIP_MODE,
421 		.min = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
422 		.max = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT,
423 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED) |
424 				BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT) |
425 				BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT),
426 		.value = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
427 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
428 	},
429 	{
430 		.cap_id = FRAME_RC_ENABLE,
431 		.min = 0,
432 		.max = 1,
433 		.step_or_mask = 1,
434 		.value = 1,
435 	},
436 	{
437 		.cap_id = GOP_SIZE,
438 		.min = 0,
439 		.max = INT_MAX,
440 		.step_or_mask = 1,
441 		.value = 2 * DEFAULT_FPS - 1,
442 		.hfi_id = HFI_PROP_MAX_GOP_FRAMES,
443 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
444 			CAP_FLAG_DYNAMIC_ALLOWED,
445 		.set = iris_set_u32,
446 	},
447 	{
448 		.cap_id = ENTROPY_MODE,
449 		.min = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
450 		.max = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
451 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC) |
452 				BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC),
453 		.value = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
454 		.hfi_id = HFI_PROP_CABAC_SESSION,
455 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
456 		.set = iris_set_entropy_mode_gen2,
457 	},
458 	{
459 		.cap_id = MIN_FRAME_QP_H264,
460 		.min = MIN_QP_8BIT,
461 		.max = MAX_QP,
462 		.step_or_mask = 1,
463 		.value = MIN_QP_8BIT,
464 		.hfi_id = HFI_PROP_MIN_QP_PACKED,
465 		.flags = CAP_FLAG_OUTPUT_PORT,
466 		.set = iris_set_min_qp,
467 	},
468 	{
469 		.cap_id = MIN_FRAME_QP_HEVC,
470 		.min = MIN_QP_8BIT,
471 		.max = MAX_QP,
472 		.step_or_mask = 1,
473 		.value = MIN_QP_8BIT,
474 		.hfi_id = HFI_PROP_MIN_QP_PACKED,
475 		.flags = CAP_FLAG_OUTPUT_PORT,
476 		.set = iris_set_min_qp,
477 	},
478 	{
479 		.cap_id = MAX_FRAME_QP_H264,
480 		.min = MIN_QP_8BIT,
481 		.max = MAX_QP,
482 		.step_or_mask = 1,
483 		.value = MAX_QP,
484 		.hfi_id = HFI_PROP_MAX_QP_PACKED,
485 		.flags = CAP_FLAG_OUTPUT_PORT,
486 		.set = iris_set_max_qp,
487 	},
488 	{
489 		.cap_id = MAX_FRAME_QP_HEVC,
490 		.min = MIN_QP_8BIT,
491 		.max = MAX_QP,
492 		.step_or_mask = 1,
493 		.value = MAX_QP,
494 		.hfi_id = HFI_PROP_MAX_QP_PACKED,
495 		.flags = CAP_FLAG_OUTPUT_PORT,
496 		.set = iris_set_max_qp,
497 	},
498 	{
499 		.cap_id = I_FRAME_MIN_QP_H264,
500 		.min = MIN_QP_8BIT,
501 		.max = MAX_QP,
502 		.step_or_mask = 1,
503 		.value = MIN_QP_8BIT,
504 	},
505 	{
506 		.cap_id = I_FRAME_MIN_QP_HEVC,
507 		.min = MIN_QP_8BIT,
508 		.max = MAX_QP,
509 		.step_or_mask = 1,
510 		.value = MIN_QP_8BIT,
511 	},
512 	{
513 		.cap_id = P_FRAME_MIN_QP_H264,
514 		.min = MIN_QP_8BIT,
515 		.max = MAX_QP,
516 		.step_or_mask = 1,
517 		.value = MIN_QP_8BIT,
518 	},
519 	{
520 		.cap_id = P_FRAME_MIN_QP_HEVC,
521 		.min = MIN_QP_8BIT,
522 		.max = MAX_QP,
523 		.step_or_mask = 1,
524 		.value = MIN_QP_8BIT,
525 	},
526 	{
527 		.cap_id = B_FRAME_MIN_QP_H264,
528 		.min = MIN_QP_8BIT,
529 		.max = MAX_QP,
530 		.step_or_mask = 1,
531 		.value = MIN_QP_8BIT,
532 	},
533 	{
534 		.cap_id = B_FRAME_MIN_QP_HEVC,
535 		.min = MIN_QP_8BIT,
536 		.max = MAX_QP,
537 		.step_or_mask = 1,
538 		.value = MIN_QP_8BIT,
539 	},
540 	{
541 		.cap_id = I_FRAME_MAX_QP_H264,
542 		.min = MIN_QP_8BIT,
543 		.max = MAX_QP,
544 		.step_or_mask = 1,
545 		.value = MAX_QP,
546 	},
547 	{
548 		.cap_id = I_FRAME_MAX_QP_HEVC,
549 		.min = MIN_QP_8BIT,
550 		.max = MAX_QP,
551 		.step_or_mask = 1,
552 		.value = MAX_QP,
553 	},
554 	{
555 		.cap_id = P_FRAME_MAX_QP_H264,
556 		.min = MIN_QP_8BIT,
557 		.max = MAX_QP,
558 		.step_or_mask = 1,
559 		.value = MAX_QP,
560 	},
561 	{
562 		.cap_id = P_FRAME_MAX_QP_HEVC,
563 		.min = MIN_QP_8BIT,
564 		.max = MAX_QP,
565 		.step_or_mask = 1,
566 		.value = MAX_QP,
567 	},
568 	{
569 		.cap_id = B_FRAME_MAX_QP_H264,
570 		.min = MIN_QP_8BIT,
571 		.max = MAX_QP,
572 		.step_or_mask = 1,
573 		.value = MAX_QP,
574 	},
575 	{
576 		.cap_id = B_FRAME_MAX_QP_HEVC,
577 		.min = MIN_QP_8BIT,
578 		.max = MAX_QP,
579 		.step_or_mask = 1,
580 		.value = MAX_QP,
581 	},
582 	{
583 		.cap_id = I_FRAME_QP_H264,
584 		.min = MIN_QP_8BIT,
585 		.max = MAX_QP,
586 		.step_or_mask = 1,
587 		.value = DEFAULT_QP,
588 		.hfi_id = HFI_PROP_QP_PACKED,
589 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
590 			CAP_FLAG_DYNAMIC_ALLOWED,
591 		.set = iris_set_frame_qp,
592 	},
593 	{
594 		.cap_id = I_FRAME_QP_HEVC,
595 		.min = MIN_QP_8BIT,
596 		.max = MAX_QP,
597 		.step_or_mask = 1,
598 		.value = DEFAULT_QP,
599 		.hfi_id = HFI_PROP_QP_PACKED,
600 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
601 			CAP_FLAG_DYNAMIC_ALLOWED,
602 		.set = iris_set_frame_qp,
603 	},
604 	{
605 		.cap_id = P_FRAME_QP_H264,
606 		.min = MIN_QP_8BIT,
607 		.max = MAX_QP,
608 		.step_or_mask = 1,
609 		.value = DEFAULT_QP,
610 		.hfi_id = HFI_PROP_QP_PACKED,
611 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
612 			CAP_FLAG_DYNAMIC_ALLOWED,
613 		.set = iris_set_frame_qp,
614 	},
615 	{
616 		.cap_id = P_FRAME_QP_HEVC,
617 		.min = MIN_QP_8BIT,
618 		.max = MAX_QP,
619 		.step_or_mask = 1,
620 		.value = DEFAULT_QP,
621 		.hfi_id = HFI_PROP_QP_PACKED,
622 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
623 			CAP_FLAG_DYNAMIC_ALLOWED,
624 		.set = iris_set_frame_qp,
625 	},
626 	{
627 		.cap_id = B_FRAME_QP_H264,
628 		.min = MIN_QP_8BIT,
629 		.max = MAX_QP,
630 		.step_or_mask = 1,
631 		.value = DEFAULT_QP,
632 		.hfi_id = HFI_PROP_QP_PACKED,
633 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
634 			CAP_FLAG_DYNAMIC_ALLOWED,
635 		.set = iris_set_frame_qp,
636 	},
637 	{
638 		.cap_id = B_FRAME_QP_HEVC,
639 		.min = MIN_QP_8BIT,
640 		.max = MAX_QP,
641 		.step_or_mask = 1,
642 		.value = DEFAULT_QP,
643 		.hfi_id = HFI_PROP_QP_PACKED,
644 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
645 			CAP_FLAG_DYNAMIC_ALLOWED,
646 		.set = iris_set_frame_qp,
647 	},
648 	{
649 		.cap_id = INPUT_BUF_HOST_MAX_COUNT,
650 		.min = DEFAULT_MAX_HOST_BUF_COUNT,
651 		.max = DEFAULT_MAX_HOST_BURST_BUF_COUNT,
652 		.step_or_mask = 1,
653 		.value = DEFAULT_MAX_HOST_BUF_COUNT,
654 		.hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT,
655 		.flags = CAP_FLAG_INPUT_PORT,
656 		.set = iris_set_u32,
657 	},
658 	{
659 		.cap_id = OUTPUT_BUF_HOST_MAX_COUNT,
660 		.min = DEFAULT_MAX_HOST_BUF_COUNT,
661 		.max = DEFAULT_MAX_HOST_BURST_BUF_COUNT,
662 		.step_or_mask = 1,
663 		.value = DEFAULT_MAX_HOST_BUF_COUNT,
664 		.hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT,
665 		.flags = CAP_FLAG_OUTPUT_PORT,
666 		.set = iris_set_u32,
667 	},
668 	{
669 		.cap_id = ROTATION,
670 		.min = 0,
671 		.max = 270,
672 		.step_or_mask = 90,
673 		.value = 0,
674 		.hfi_id = HFI_PROP_ROTATION,
675 		.flags = CAP_FLAG_OUTPUT_PORT,
676 		.set = iris_set_rotation,
677 	},
678 	{
679 		.cap_id = HFLIP,
680 		.min = 0,
681 		.max = 1,
682 		.step_or_mask = 1,
683 		.value = 0,
684 		.hfi_id = HFI_PROP_FLIP,
685 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
686 			CAP_FLAG_DYNAMIC_ALLOWED,
687 		.set = iris_set_flip,
688 	},
689 	{
690 		.cap_id = VFLIP,
691 		.min = 0,
692 		.max = 1,
693 		.step_or_mask = 1,
694 		.value = 0,
695 		.hfi_id = HFI_PROP_FLIP,
696 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
697 			CAP_FLAG_DYNAMIC_ALLOWED,
698 		.set = iris_set_flip,
699 	},
700 	{
701 		.cap_id = IR_TYPE,
702 		.min = V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM,
703 		.max = V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC,
704 		.step_or_mask = BIT(V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM) |
705 			BIT(V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC),
706 		.value = V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM,
707 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
708 	},
709 	{
710 		.cap_id = IR_PERIOD,
711 		.min = 0,
712 		.max = INT_MAX,
713 		.step_or_mask = 1,
714 		.value = 0,
715 		.flags = CAP_FLAG_OUTPUT_PORT |
716 			CAP_FLAG_DYNAMIC_ALLOWED,
717 		.set = iris_set_ir_period_gen2,
718 	},
719 	{
720 		.cap_id = LTR_COUNT,
721 		.min = 0,
722 		.max = MAX_LTR_FRAME_COUNT_GEN2,
723 		.step_or_mask = 1,
724 		.value = 0,
725 		.hfi_id = HFI_PROP_LTR_COUNT,
726 		.flags = CAP_FLAG_OUTPUT_PORT,
727 		.set = iris_set_ltr_count_gen2,
728 	},
729 	{
730 		.cap_id = USE_LTR,
731 		.min = 0,
732 		.max = ((1 << MAX_LTR_FRAME_COUNT_GEN2) - 1),
733 		.step_or_mask = 0,
734 		.value = 0,
735 		.hfi_id = HFI_PROP_LTR_USE,
736 		.flags = CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
737 		.set = iris_set_use_and_mark_ltr,
738 	},
739 	{
740 		.cap_id = MARK_LTR,
741 		.min = INVALID_DEFAULT_MARK_OR_USE_LTR,
742 		.max = (MAX_LTR_FRAME_COUNT_GEN2 - 1),
743 		.step_or_mask = 1,
744 		.value = INVALID_DEFAULT_MARK_OR_USE_LTR,
745 		.hfi_id = HFI_PROP_LTR_MARK,
746 		.flags = CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
747 		.set = iris_set_use_and_mark_ltr,
748 	},
749 	{
750 		.cap_id = B_FRAME,
751 		.min = 0,
752 		.max = 1,
753 		.step_or_mask = 1,
754 		.value = 0,
755 		.hfi_id = HFI_PROP_MAX_B_FRAMES,
756 		.flags = CAP_FLAG_OUTPUT_PORT,
757 		.set = iris_set_u32,
758 	},
759 	{
760 		.cap_id = LAYER_ENABLE,
761 		.min = 0,
762 		.max = 1,
763 		.step_or_mask = 1,
764 		.value = 0,
765 		.flags = CAP_FLAG_OUTPUT_PORT,
766 	},
767 	{
768 		.cap_id = LAYER_TYPE_H264,
769 		.min = V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B,
770 		.max = V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P,
771 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B) |
772 				BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P),
773 		.value = V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P,
774 		.hfi_id = HFI_PROP_LAYER_ENCODING_TYPE,
775 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
776 		.set = iris_set_layer_type,
777 	},
778 	{
779 		.cap_id = LAYER_TYPE_HEVC,
780 		.min = V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B,
781 		.max = V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P,
782 		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B) |
783 				BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P),
784 		.value = V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P,
785 		.hfi_id = HFI_PROP_LAYER_ENCODING_TYPE,
786 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
787 		.set = iris_set_layer_type,
788 	},
789 	{
790 		.cap_id = LAYER_COUNT_H264,
791 		.min = 0,
792 		.max = 5,
793 		.step_or_mask = 1,
794 		.value = 0,
795 		.hfi_id = HFI_PROP_LAYER_COUNT,
796 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
797 		.set = iris_set_layer_count_gen2,
798 	},
799 	{
800 		.cap_id = LAYER_COUNT_HEVC,
801 		.min = 0,
802 		.max = 5,
803 		.step_or_mask = 1,
804 		.value = 0,
805 		.hfi_id = HFI_PROP_LAYER_COUNT,
806 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
807 		.set = iris_set_layer_count_gen2,
808 	},
809 	{
810 		.cap_id = LAYER0_BITRATE_H264,
811 		.min = 1,
812 		.max = BITRATE_MAX,
813 		.step_or_mask = 1,
814 		.value = BITRATE_DEFAULT,
815 		.hfi_id = HFI_PROP_BITRATE_LAYER1,
816 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
817 			CAP_FLAG_DYNAMIC_ALLOWED,
818 		.set = iris_set_layer_bitrate,
819 	},
820 	{
821 		.cap_id = LAYER1_BITRATE_H264,
822 		.min = 1,
823 		.max = BITRATE_MAX,
824 		.step_or_mask = 1,
825 		.value = BITRATE_DEFAULT,
826 		.hfi_id = HFI_PROP_BITRATE_LAYER2,
827 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
828 			CAP_FLAG_DYNAMIC_ALLOWED,
829 		.set = iris_set_layer_bitrate,
830 	},
831 	{
832 		.cap_id = LAYER2_BITRATE_H264,
833 		.min = 1,
834 		.max = BITRATE_MAX,
835 		.step_or_mask = 1,
836 		.value = BITRATE_DEFAULT,
837 		.hfi_id = HFI_PROP_BITRATE_LAYER3,
838 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
839 			CAP_FLAG_DYNAMIC_ALLOWED,
840 		.set = iris_set_layer_bitrate,
841 	},
842 	{
843 		.cap_id = LAYER3_BITRATE_H264,
844 		.min = 1,
845 		.max = BITRATE_MAX,
846 		.step_or_mask = 1,
847 		.value = BITRATE_DEFAULT,
848 		.hfi_id = HFI_PROP_BITRATE_LAYER4,
849 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
850 			CAP_FLAG_DYNAMIC_ALLOWED,
851 		.set = iris_set_layer_bitrate,
852 	},
853 	{
854 		.cap_id = LAYER4_BITRATE_H264,
855 		.min = 1,
856 		.max = BITRATE_MAX,
857 		.step_or_mask = 1,
858 		.value = BITRATE_DEFAULT,
859 		.hfi_id = HFI_PROP_BITRATE_LAYER5,
860 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
861 			CAP_FLAG_DYNAMIC_ALLOWED,
862 		.set = iris_set_layer_bitrate,
863 	},
864 	{
865 		.cap_id = LAYER5_BITRATE_H264,
866 		.min = 1,
867 		.max = BITRATE_MAX,
868 		.step_or_mask = 1,
869 		.value = BITRATE_DEFAULT,
870 		.hfi_id = HFI_PROP_BITRATE_LAYER6,
871 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
872 			CAP_FLAG_DYNAMIC_ALLOWED,
873 		.set = iris_set_layer_bitrate,
874 	},
875 	{
876 		.cap_id = LAYER0_BITRATE_HEVC,
877 		.min = 1,
878 		.max = BITRATE_MAX,
879 		.step_or_mask = 1,
880 		.value = BITRATE_DEFAULT,
881 		.hfi_id = HFI_PROP_BITRATE_LAYER1,
882 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
883 			CAP_FLAG_DYNAMIC_ALLOWED,
884 		.set = iris_set_layer_bitrate,
885 	},
886 	{
887 		.cap_id = LAYER1_BITRATE_HEVC,
888 		.min = 1,
889 		.max = BITRATE_MAX,
890 		.step_or_mask = 1,
891 		.value = BITRATE_DEFAULT,
892 		.hfi_id = HFI_PROP_BITRATE_LAYER2,
893 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
894 			CAP_FLAG_DYNAMIC_ALLOWED,
895 		.set = iris_set_layer_bitrate,
896 	},
897 	{
898 		.cap_id = LAYER2_BITRATE_HEVC,
899 		.min = 1,
900 		.max = BITRATE_MAX,
901 		.step_or_mask = 1,
902 		.value = BITRATE_DEFAULT,
903 		.hfi_id = HFI_PROP_BITRATE_LAYER3,
904 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
905 			CAP_FLAG_DYNAMIC_ALLOWED,
906 		.set = iris_set_layer_bitrate,
907 	},
908 	{
909 		.cap_id = LAYER3_BITRATE_HEVC,
910 		.min = 1,
911 		.max = BITRATE_MAX,
912 		.step_or_mask = 1,
913 		.value = BITRATE_DEFAULT,
914 		.hfi_id = HFI_PROP_BITRATE_LAYER4,
915 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
916 			CAP_FLAG_DYNAMIC_ALLOWED,
917 		.set = iris_set_layer_bitrate,
918 	},
919 	{
920 		.cap_id = LAYER4_BITRATE_HEVC,
921 		.min = 1,
922 		.max = BITRATE_MAX,
923 		.step_or_mask = 1,
924 		.value = BITRATE_DEFAULT,
925 		.hfi_id = HFI_PROP_BITRATE_LAYER5,
926 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
927 			CAP_FLAG_DYNAMIC_ALLOWED,
928 		.set = iris_set_layer_bitrate,
929 	},
930 	{
931 		.cap_id = LAYER5_BITRATE_HEVC,
932 		.min = 1,
933 		.max = BITRATE_MAX,
934 		.step_or_mask = 1,
935 		.value = BITRATE_DEFAULT,
936 		.hfi_id = HFI_PROP_BITRATE_LAYER6,
937 		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
938 			CAP_FLAG_DYNAMIC_ALLOWED,
939 		.set = iris_set_layer_bitrate,
940 	}
941 };
942 
943 static const u32 sm8550_vdec_input_config_params_default[] = {
944 	HFI_PROP_BITSTREAM_RESOLUTION,
945 	HFI_PROP_CROP_OFFSETS,
946 	HFI_PROP_LUMA_CHROMA_BIT_DEPTH,
947 	HFI_PROP_CODED_FRAMES,
948 	HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT,
949 	HFI_PROP_PIC_ORDER_CNT_TYPE,
950 	HFI_PROP_PROFILE,
951 	HFI_PROP_LEVEL,
952 	HFI_PROP_SIGNAL_COLOR_INFO,
953 };
954 
955 static const u32 sm8550_vdec_input_config_param_hevc[] = {
956 	HFI_PROP_BITSTREAM_RESOLUTION,
957 	HFI_PROP_CROP_OFFSETS,
958 	HFI_PROP_LUMA_CHROMA_BIT_DEPTH,
959 	HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT,
960 	HFI_PROP_PROFILE,
961 	HFI_PROP_LEVEL,
962 	HFI_PROP_TIER,
963 	HFI_PROP_SIGNAL_COLOR_INFO,
964 };
965 
966 static const u32 sm8550_vdec_input_config_param_vp9[] = {
967 	HFI_PROP_BITSTREAM_RESOLUTION,
968 	HFI_PROP_CROP_OFFSETS,
969 	HFI_PROP_LUMA_CHROMA_BIT_DEPTH,
970 	HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT,
971 	HFI_PROP_PROFILE,
972 	HFI_PROP_LEVEL,
973 };
974 
975 static const u32 sm8550_vdec_input_config_param_av1[] = {
976 	HFI_PROP_BITSTREAM_RESOLUTION,
977 	HFI_PROP_CROP_OFFSETS,
978 	HFI_PROP_LUMA_CHROMA_BIT_DEPTH,
979 	HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT,
980 	HFI_PROP_PROFILE,
981 	HFI_PROP_LEVEL,
982 	HFI_PROP_TIER,
983 	HFI_PROP_AV1_FILM_GRAIN_PRESENT,
984 	HFI_PROP_AV1_SUPER_BLOCK_ENABLED,
985 	HFI_PROP_SIGNAL_COLOR_INFO,
986 };
987 
988 static const u32 sm8550_venc_input_config_params[] = {
989 	HFI_PROP_COLOR_FORMAT,
990 	HFI_PROP_RAW_RESOLUTION,
991 	HFI_PROP_CROP_OFFSETS,
992 	HFI_PROP_LINEAR_STRIDE_SCANLINE,
993 	HFI_PROP_SIGNAL_COLOR_INFO,
994 };
995 
996 static const u32 sm8550_vdec_output_config_params[] = {
997 	HFI_PROP_OPB_ENABLE,
998 	HFI_PROP_COLOR_FORMAT,
999 	HFI_PROP_LINEAR_STRIDE_SCANLINE,
1000 	HFI_PROP_UBWC_STRIDE_SCANLINE,
1001 };
1002 
1003 static const u32 sm8550_venc_output_config_params[] = {
1004 	HFI_PROP_BITSTREAM_RESOLUTION,
1005 	HFI_PROP_CROP_OFFSETS,
1006 	HFI_PROP_FRAME_RATE,
1007 };
1008 
1009 static const u32 sm8550_vdec_subscribe_input_properties[] = {
1010 	HFI_PROP_NO_OUTPUT,
1011 };
1012 
1013 static const u32 sm8550_vdec_subscribe_output_properties_avc[] = {
1014 	HFI_PROP_PICTURE_TYPE,
1015 	HFI_PROP_CABAC_SESSION,
1016 };
1017 
1018 static const u32 sm8550_vdec_subscribe_output_properties_hevc[] = {
1019 	HFI_PROP_PICTURE_TYPE,
1020 };
1021 
1022 static const u32 sm8550_vdec_subscribe_output_properties_vp9[] = {
1023 	HFI_PROP_PICTURE_TYPE,
1024 };
1025 
1026 static const u32 sm8550_vdec_subscribe_output_properties_av1[] = {
1027 	HFI_PROP_PICTURE_TYPE,
1028 	HFI_PROP_WORST_COMPRESSION_RATIO,
1029 	HFI_PROP_WORST_COMPLEXITY_FACTOR,
1030 };
1031 
1032 static const u32 sm8550_dec_ip_int_buf_tbl[] = {
1033 	BUF_BIN,
1034 	BUF_COMV,
1035 	BUF_NON_COMV,
1036 	BUF_LINE,
1037 	BUF_PARTIAL,
1038 };
1039 
1040 static const u32 sm8550_dec_op_int_buf_tbl[] = {
1041 	BUF_DPB,
1042 };
1043 
1044 static const u32 sm8550_enc_ip_int_buf_tbl[] = {
1045 	BUF_VPSS,
1046 };
1047 
1048 static const u32 sm8550_enc_op_int_buf_tbl[] = {
1049 	BUF_BIN,
1050 	BUF_COMV,
1051 	BUF_NON_COMV,
1052 	BUF_LINE,
1053 	BUF_SCRATCH_2,
1054 };
1055 
1056 const struct iris_firmware_data iris_hfi_gen2_data = {
1057 	.init_hfi_ops = iris_hfi_gen2_sys_ops_init,
1058 
1059 	.core_arch = VIDEO_ARCH_LX,
1060 
1061 	.inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
1062 	.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
1063 	.inst_fw_caps_enc = inst_fw_cap_sm8550_enc,
1064 	.inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc),
1065 
1066 	.dec_input_config_params_default =
1067 		sm8550_vdec_input_config_params_default,
1068 	.dec_input_config_params_default_size =
1069 		ARRAY_SIZE(sm8550_vdec_input_config_params_default),
1070 	.dec_input_config_params_hevc =
1071 		sm8550_vdec_input_config_param_hevc,
1072 	.dec_input_config_params_hevc_size =
1073 		ARRAY_SIZE(sm8550_vdec_input_config_param_hevc),
1074 	.dec_input_config_params_vp9 =
1075 		sm8550_vdec_input_config_param_vp9,
1076 	.dec_input_config_params_vp9_size =
1077 		ARRAY_SIZE(sm8550_vdec_input_config_param_vp9),
1078 	.dec_input_config_params_av1 =
1079 		sm8550_vdec_input_config_param_av1,
1080 	.dec_input_config_params_av1_size =
1081 		ARRAY_SIZE(sm8550_vdec_input_config_param_av1),
1082 	.dec_output_config_params =
1083 		sm8550_vdec_output_config_params,
1084 	.dec_output_config_params_size =
1085 		ARRAY_SIZE(sm8550_vdec_output_config_params),
1086 
1087 	.enc_input_config_params =
1088 		sm8550_venc_input_config_params,
1089 	.enc_input_config_params_size =
1090 		ARRAY_SIZE(sm8550_venc_input_config_params),
1091 	.enc_output_config_params =
1092 		sm8550_venc_output_config_params,
1093 	.enc_output_config_params_size =
1094 		ARRAY_SIZE(sm8550_venc_output_config_params),
1095 
1096 	.dec_input_prop = sm8550_vdec_subscribe_input_properties,
1097 	.dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties),
1098 	.dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc,
1099 	.dec_output_prop_avc_size =
1100 		ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc),
1101 	.dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc,
1102 	.dec_output_prop_hevc_size =
1103 		ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc),
1104 	.dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9,
1105 	.dec_output_prop_vp9_size =
1106 		ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9),
1107 	.dec_output_prop_av1 = sm8550_vdec_subscribe_output_properties_av1,
1108 	.dec_output_prop_av1_size =
1109 		ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_av1),
1110 
1111 	.dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl,
1112 	.dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl),
1113 	.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
1114 	.dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
1115 
1116 	.enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
1117 	.enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
1118 	.enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
1119 	.enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
1120 };
1121