FILE
iris_platform_gen2.c
File preview with syntax highlighting.
linux-6.19.14/drivers/media/platform/qcom/iris/iris_platform_gen2.c
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_core.h" 8#include "iris_ctrls.h" 9#include "iris_hfi_gen2.h" 10#include "iris_hfi_gen2_defines.h" 11#include "iris_platform_common.h" 12#include "iris_vpu_buffer.h" 13#include "iris_vpu_common.h" 14 15#include "iris_platform_qcs8300.h" 16#include "iris_platform_sm8650.h" 17#include "iris_platform_sm8750.h" 18 19#define VIDEO_ARCH_LX 1 20#define BITRATE_MAX 245000000 21 22static const struct platform_inst_fw_cap inst_fw_cap_sm8550_dec[] = { 23 { 24 .cap_id = PROFILE_H264, 25 .min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE, 26 .max = V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH, 27 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) | 28 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) | 29 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) | 30 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH) | 31 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH), 32 .value = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH, 33 .hfi_id = HFI_PROP_PROFILE, 34 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 35 .set = iris_set_u32_enum, 36 }, 37 { 38 .cap_id = PROFILE_HEVC, 39 .min = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN, 40 .max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE, 41 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) | 42 BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE), 43 .value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN, 44 .hfi_id = HFI_PROP_PROFILE, 45 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 46 .set = iris_set_u32_enum, 47 }, 48 { 49 .cap_id = PROFILE_VP9, 50 .min = V4L2_MPEG_VIDEO_VP9_PROFILE_0, 51 .max = V4L2_MPEG_VIDEO_VP9_PROFILE_2, 52 .step_or_mask = BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_0) | 53 BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_2), 54 .value = V4L2_MPEG_VIDEO_VP9_PROFILE_0, 55 .hfi_id = HFI_PROP_PROFILE, 56 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 57 .set = iris_set_u32_enum, 58 }, 59 { 60 .cap_id = LEVEL_H264, 61 .min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0, 62 .max = V4L2_MPEG_VIDEO_H264_LEVEL_6_2, 63 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) | 64 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) | 65 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) | 66 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) | 67 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) | 68 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) | 69 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) | 70 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) | 71 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) | 72 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) | 73 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) | 74 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) | 75 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) | 76 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) | 77 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) | 78 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) | 79 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) | 80 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0) | 81 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_1) | 82 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_2), 83 .value = V4L2_MPEG_VIDEO_H264_LEVEL_6_1, 84 .hfi_id = HFI_PROP_LEVEL, 85 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 86 .set = iris_set_u32_enum, 87 }, 88 { 89 .cap_id = LEVEL_HEVC, 90 .min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1, 91 .max = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2, 92 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) | 93 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) | 94 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) | 95 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) | 96 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) | 97 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) | 98 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) | 99 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) | 100 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) | 101 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) | 102 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) | 103 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1) | 104 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2), 105 .value = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1, 106 .hfi_id = HFI_PROP_LEVEL, 107 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 108 .set = iris_set_u32_enum, 109 }, 110 { 111 .cap_id = LEVEL_VP9, 112 .min = V4L2_MPEG_VIDEO_VP9_LEVEL_1_0, 113 .max = V4L2_MPEG_VIDEO_VP9_LEVEL_6_0, 114 .step_or_mask = BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_0) | 115 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_1) | 116 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_0) | 117 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_1) | 118 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_0) | 119 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_1) | 120 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_0) | 121 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_1) | 122 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_0) | 123 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_1) | 124 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_2) | 125 BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_6_0), 126 .value = V4L2_MPEG_VIDEO_VP9_LEVEL_6_0, 127 .hfi_id = HFI_PROP_LEVEL, 128 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 129 .set = iris_set_u32_enum, 130 }, 131 { 132 .cap_id = TIER, 133 .min = V4L2_MPEG_VIDEO_HEVC_TIER_MAIN, 134 .max = V4L2_MPEG_VIDEO_HEVC_TIER_HIGH, 135 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_TIER_MAIN) | 136 BIT(V4L2_MPEG_VIDEO_HEVC_TIER_HIGH), 137 .value = V4L2_MPEG_VIDEO_HEVC_TIER_HIGH, 138 .hfi_id = HFI_PROP_TIER, 139 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 140 .set = iris_set_u32_enum, 141 }, 142 { 143 .cap_id = INPUT_BUF_HOST_MAX_COUNT, 144 .min = DEFAULT_MAX_HOST_BUF_COUNT, 145 .max = DEFAULT_MAX_HOST_BURST_BUF_COUNT, 146 .step_or_mask = 1, 147 .value = DEFAULT_MAX_HOST_BUF_COUNT, 148 .hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT, 149 .flags = CAP_FLAG_INPUT_PORT, 150 .set = iris_set_u32, 151 }, 152 { 153 .cap_id = STAGE, 154 .min = STAGE_1, 155 .max = STAGE_2, 156 .step_or_mask = 1, 157 .value = STAGE_2, 158 .hfi_id = HFI_PROP_STAGE, 159 .set = iris_set_stage, 160 }, 161 { 162 .cap_id = PIPE, 163 /* .max, .min and .value are set via platform data */ 164 .step_or_mask = 1, 165 .hfi_id = HFI_PROP_PIPE, 166 .set = iris_set_pipe, 167 }, 168 { 169 .cap_id = POC, 170 .min = 0, 171 .max = 2, 172 .step_or_mask = 1, 173 .value = 1, 174 .hfi_id = HFI_PROP_PIC_ORDER_CNT_TYPE, 175 }, 176 { 177 .cap_id = CODED_FRAMES, 178 .min = CODED_FRAMES_PROGRESSIVE, 179 .max = CODED_FRAMES_PROGRESSIVE, 180 .step_or_mask = 0, 181 .value = CODED_FRAMES_PROGRESSIVE, 182 .hfi_id = HFI_PROP_CODED_FRAMES, 183 }, 184 { 185 .cap_id = BIT_DEPTH, 186 .min = BIT_DEPTH_8, 187 .max = BIT_DEPTH_8, 188 .step_or_mask = 1, 189 .value = BIT_DEPTH_8, 190 .hfi_id = HFI_PROP_LUMA_CHROMA_BIT_DEPTH, 191 }, 192 { 193 .cap_id = RAP_FRAME, 194 .min = 0, 195 .max = 1, 196 .step_or_mask = 1, 197 .value = 1, 198 .hfi_id = HFI_PROP_DEC_START_FROM_RAP_FRAME, 199 .flags = CAP_FLAG_INPUT_PORT, 200 .set = iris_set_u32, 201 }, 202}; 203 204static const struct platform_inst_fw_cap inst_fw_cap_sm8550_enc[] = { 205 { 206 .cap_id = PROFILE_H264, 207 .min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE, 208 .max = V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH, 209 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) | 210 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH) | 211 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) | 212 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) | 213 BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH), 214 .value = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH, 215 .hfi_id = HFI_PROP_PROFILE, 216 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 217 .set = iris_set_profile, 218 }, 219 { 220 .cap_id = PROFILE_HEVC, 221 .min = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN, 222 .max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10, 223 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) | 224 BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) | 225 BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10), 226 .value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN, 227 .hfi_id = HFI_PROP_PROFILE, 228 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 229 .set = iris_set_profile, 230 }, 231 { 232 .cap_id = LEVEL_H264, 233 .min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0, 234 .max = V4L2_MPEG_VIDEO_H264_LEVEL_6_0, 235 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) | 236 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) | 237 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) | 238 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) | 239 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) | 240 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) | 241 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) | 242 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) | 243 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) | 244 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) | 245 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) | 246 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) | 247 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) | 248 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) | 249 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) | 250 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) | 251 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) | 252 BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0), 253 .value = V4L2_MPEG_VIDEO_H264_LEVEL_5_0, 254 .hfi_id = HFI_PROP_LEVEL, 255 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 256 .set = iris_set_level, 257 }, 258 { 259 .cap_id = LEVEL_HEVC, 260 .min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1, 261 .max = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2, 262 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) | 263 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) | 264 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) | 265 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) | 266 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) | 267 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) | 268 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) | 269 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) | 270 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) | 271 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) | 272 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) | 273 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1) | 274 BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2), 275 .value = V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 276 .hfi_id = HFI_PROP_LEVEL, 277 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 278 .set = iris_set_level, 279 }, 280 { 281 .cap_id = STAGE, 282 .min = STAGE_1, 283 .max = STAGE_2, 284 .step_or_mask = 1, 285 .value = STAGE_2, 286 .hfi_id = HFI_PROP_STAGE, 287 .set = iris_set_stage, 288 }, 289 { 290 .cap_id = HEADER_MODE, 291 .min = V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE, 292 .max = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME, 293 .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE) | 294 BIT(V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME), 295 .value = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME, 296 .hfi_id = HFI_PROP_SEQ_HEADER_MODE, 297 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 298 .set = iris_set_header_mode_gen2, 299 }, 300 { 301 .cap_id = PREPEND_SPSPPS_TO_IDR, 302 .min = 0, 303 .max = 1, 304 .step_or_mask = 1, 305 .value = 0, 306 }, 307 { 308 .cap_id = BITRATE, 309 .min = 1, 310 .max = BITRATE_MAX, 311 .step_or_mask = 1, 312 .value = BITRATE_DEFAULT, 313 .hfi_id = HFI_PROP_TOTAL_BITRATE, 314 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 315 CAP_FLAG_DYNAMIC_ALLOWED, 316 .set = iris_set_bitrate, 317 }, 318 { 319 .cap_id = BITRATE_PEAK, 320 .min = 1, 321 .max = BITRATE_MAX, 322 .step_or_mask = 1, 323 .value = BITRATE_DEFAULT, 324 .hfi_id = HFI_PROP_TOTAL_PEAK_BITRATE, 325 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 326 CAP_FLAG_DYNAMIC_ALLOWED, 327 .set = iris_set_peak_bitrate, 328 }, 329 { 330 .cap_id = BITRATE_MODE, 331 .min = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR, 332 .max = V4L2_MPEG_VIDEO_BITRATE_MODE_CBR, 333 .step_or_mask = BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) | 334 BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CBR), 335 .value = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR, 336 .hfi_id = HFI_PROP_RATE_CONTROL, 337 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 338 .set = iris_set_bitrate_mode_gen2, 339 }, 340 { 341 .cap_id = FRAME_SKIP_MODE, 342 .min = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED, 343 .max = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT, 344 .step_or_mask = BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED) | 345 BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT) | 346 BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT), 347 .value = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED, 348 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 349 }, 350 { 351 .cap_id = FRAME_RC_ENABLE, 352 .min = 0, 353 .max = 1, 354 .step_or_mask = 1, 355 .value = 1, 356 }, 357 { 358 .cap_id = GOP_SIZE, 359 .min = 0, 360 .max = INT_MAX, 361 .step_or_mask = 1, 362 .value = 2 * DEFAULT_FPS - 1, 363 .hfi_id = HFI_PROP_MAX_GOP_FRAMES, 364 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 365 CAP_FLAG_DYNAMIC_ALLOWED, 366 .set = iris_set_u32, 367 }, 368 { 369 .cap_id = ENTROPY_MODE, 370 .min = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC, 371 .max = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC, 372 .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC) | 373 BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC), 374 .value = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC, 375 .hfi_id = HFI_PROP_CABAC_SESSION, 376 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, 377 .set = iris_set_entropy_mode_gen2, 378 }, 379 { 380 .cap_id = MIN_FRAME_QP_H264, 381 .min = MIN_QP_8BIT, 382 .max = MAX_QP, 383 .step_or_mask = 1, 384 .value = MIN_QP_8BIT, 385 .hfi_id = HFI_PROP_MIN_QP_PACKED, 386 .flags = CAP_FLAG_OUTPUT_PORT, 387 .set = iris_set_min_qp, 388 }, 389 { 390 .cap_id = MIN_FRAME_QP_HEVC, 391 .min = MIN_QP_8BIT, 392 .max = MAX_QP, 393 .step_or_mask = 1, 394 .value = MIN_QP_8BIT, 395 .hfi_id = HFI_PROP_MIN_QP_PACKED, 396 .flags = CAP_FLAG_OUTPUT_PORT, 397 .set = iris_set_min_qp, 398 }, 399 { 400 .cap_id = MAX_FRAME_QP_H264, 401 .min = MIN_QP_8BIT, 402 .max = MAX_QP, 403 .step_or_mask = 1, 404 .value = MAX_QP, 405 .hfi_id = HFI_PROP_MAX_QP_PACKED, 406 .flags = CAP_FLAG_OUTPUT_PORT, 407 .set = iris_set_max_qp, 408 }, 409 { 410 .cap_id = MAX_FRAME_QP_HEVC, 411 .min = MIN_QP_8BIT, 412 .max = MAX_QP, 413 .step_or_mask = 1, 414 .value = MAX_QP, 415 .hfi_id = HFI_PROP_MAX_QP_PACKED, 416 .flags = CAP_FLAG_OUTPUT_PORT, 417 .set = iris_set_max_qp, 418 }, 419 { 420 .cap_id = I_FRAME_MIN_QP_H264, 421 .min = MIN_QP_8BIT, 422 .max = MAX_QP, 423 .step_or_mask = 1, 424 .value = MIN_QP_8BIT, 425 }, 426 { 427 .cap_id = I_FRAME_MIN_QP_HEVC, 428 .min = MIN_QP_8BIT, 429 .max = MAX_QP, 430 .step_or_mask = 1, 431 .value = MIN_QP_8BIT, 432 }, 433 { 434 .cap_id = P_FRAME_MIN_QP_H264, 435 .min = MIN_QP_8BIT, 436 .max = MAX_QP, 437 .step_or_mask = 1, 438 .value = MIN_QP_8BIT, 439 }, 440 { 441 .cap_id = P_FRAME_MIN_QP_HEVC, 442 .min = MIN_QP_8BIT, 443 .max = MAX_QP, 444 .step_or_mask = 1, 445 .value = MIN_QP_8BIT, 446 }, 447 { 448 .cap_id = B_FRAME_MIN_QP_H264, 449 .min = MIN_QP_8BIT, 450 .max = MAX_QP, 451 .step_or_mask = 1, 452 .value = MIN_QP_8BIT, 453 }, 454 { 455 .cap_id = B_FRAME_MIN_QP_HEVC, 456 .min = MIN_QP_8BIT, 457 .max = MAX_QP, 458 .step_or_mask = 1, 459 .value = MIN_QP_8BIT, 460 }, 461 { 462 .cap_id = I_FRAME_MAX_QP_H264, 463 .min = MIN_QP_8BIT, 464 .max = MAX_QP, 465 .step_or_mask = 1, 466 .value = MAX_QP, 467 }, 468 { 469 .cap_id = I_FRAME_MAX_QP_HEVC, 470 .min = MIN_QP_8BIT, 471 .max = MAX_QP, 472 .step_or_mask = 1, 473 .value = MAX_QP, 474 }, 475 { 476 .cap_id = P_FRAME_MAX_QP_H264, 477 .min = MIN_QP_8BIT, 478 .max = MAX_QP, 479 .step_or_mask = 1, 480 .value = MAX_QP, 481 }, 482 { 483 .cap_id = P_FRAME_MAX_QP_HEVC, 484 .min = MIN_QP_8BIT, 485 .max = MAX_QP, 486 .step_or_mask = 1, 487 .value = MAX_QP, 488 }, 489 { 490 .cap_id = B_FRAME_MAX_QP_H264, 491 .min = MIN_QP_8BIT, 492 .max = MAX_QP, 493 .step_or_mask = 1, 494 .value = MAX_QP, 495 }, 496 { 497 .cap_id = B_FRAME_MAX_QP_HEVC, 498 .min = MIN_QP_8BIT, 499 .max = MAX_QP, 500 .step_or_mask = 1, 501 .value = MAX_QP, 502 }, 503 { 504 .cap_id = I_FRAME_QP_H264, 505 .min = MIN_QP_8BIT, 506 .max = MAX_QP, 507 .step_or_mask = 1, 508 .value = DEFAULT_QP, 509 .hfi_id = HFI_PROP_QP_PACKED, 510 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 511 CAP_FLAG_DYNAMIC_ALLOWED, 512 .set = iris_set_frame_qp, 513 }, 514 { 515 .cap_id = I_FRAME_QP_HEVC, 516 .min = MIN_QP_8BIT, 517 .max = MAX_QP, 518 .step_or_mask = 1, 519 .value = DEFAULT_QP, 520 .hfi_id = HFI_PROP_QP_PACKED, 521 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 522 CAP_FLAG_DYNAMIC_ALLOWED, 523 .set = iris_set_frame_qp, 524 }, 525 { 526 .cap_id = P_FRAME_QP_H264, 527 .min = MIN_QP_8BIT, 528 .max = MAX_QP, 529 .step_or_mask = 1, 530 .value = DEFAULT_QP, 531 .hfi_id = HFI_PROP_QP_PACKED, 532 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 533 CAP_FLAG_DYNAMIC_ALLOWED, 534 .set = iris_set_frame_qp, 535 }, 536 { 537 .cap_id = P_FRAME_QP_HEVC, 538 .min = MIN_QP_8BIT, 539 .max = MAX_QP, 540 .step_or_mask = 1, 541 .value = DEFAULT_QP, 542 .hfi_id = HFI_PROP_QP_PACKED, 543 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 544 CAP_FLAG_DYNAMIC_ALLOWED, 545 .set = iris_set_frame_qp, 546 }, 547 { 548 .cap_id = B_FRAME_QP_H264, 549 .min = MIN_QP_8BIT, 550 .max = MAX_QP, 551 .step_or_mask = 1, 552 .value = DEFAULT_QP, 553 .hfi_id = HFI_PROP_QP_PACKED, 554 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 555 CAP_FLAG_DYNAMIC_ALLOWED, 556 .set = iris_set_frame_qp, 557 }, 558 { 559 .cap_id = B_FRAME_QP_HEVC, 560 .min = MIN_QP_8BIT, 561 .max = MAX_QP, 562 .step_or_mask = 1, 563 .value = DEFAULT_QP, 564 .hfi_id = HFI_PROP_QP_PACKED, 565 .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | 566 CAP_FLAG_DYNAMIC_ALLOWED, 567 .set = iris_set_frame_qp, 568 }, 569 { 570 .cap_id = INPUT_BUF_HOST_MAX_COUNT, 571 .min = DEFAULT_MAX_HOST_BUF_COUNT, 572 .max = DEFAULT_MAX_HOST_BURST_BUF_COUNT, 573 .step_or_mask = 1, 574 .value = DEFAULT_MAX_HOST_BUF_COUNT, 575 .hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT, 576 .flags = CAP_FLAG_INPUT_PORT, 577 .set = iris_set_u32, 578 }, 579 { 580 .cap_id = OUTPUT_BUF_HOST_MAX_COUNT, 581 .min = DEFAULT_MAX_HOST_BUF_COUNT, 582 .max = DEFAULT_MAX_HOST_BURST_BUF_COUNT, 583 .step_or_mask = 1, 584 .value = DEFAULT_MAX_HOST_BUF_COUNT, 585 .hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT, 586 .flags = CAP_FLAG_OUTPUT_PORT, 587 .set = iris_set_u32, 588 }, 589}; 590 591static struct platform_inst_caps platform_inst_cap_sm8550 = { 592 .min_frame_width = 96, 593 .max_frame_width = 8192, 594 .min_frame_height = 96, 595 .max_frame_height = 8192, 596 .max_mbpf = (8192 * 4352) / 256, 597 .mb_cycles_vpp = 200, 598 .mb_cycles_fw = 489583, 599 .mb_cycles_fw_vpp = 66234, 600 .num_comv = 0, 601 .max_frame_rate = MAXIMUM_FPS, 602 .max_operating_rate = MAXIMUM_FPS, 603}; 604 605static void iris_set_sm8550_preset_registers(struct iris_core *core) 606{ 607 writel(0x0, core->reg_base + 0xB0088); 608} 609 610static const struct icc_info sm8550_icc_table[] = { 611 { "cpu-cfg", 1000, 1000 }, 612 { "video-mem", 1000, 15000000 }, 613}; 614 615static const char * const sm8550_clk_reset_table[] = { "bus" }; 616 617static const struct bw_info sm8550_bw_table_dec[] = { 618 { ((4096 * 2160) / 256) * 60, 1608000 }, 619 { ((4096 * 2160) / 256) * 30, 826000 }, 620 { ((1920 * 1080) / 256) * 60, 567000 }, 621 { ((1920 * 1080) / 256) * 30, 294000 }, 622}; 623 624static const char * const sm8550_pmdomain_table[] = { "venus", "vcodec0" }; 625 626static const char * const sm8550_opp_pd_table[] = { "mxc", "mmcx" }; 627 628static const struct platform_clk_data sm8550_clk_table[] = { 629 {IRIS_AXI_CLK, "iface" }, 630 {IRIS_CTRL_CLK, "core" }, 631 {IRIS_HW_CLK, "vcodec0_core" }, 632}; 633 634static struct ubwc_config_data ubwc_config_sm8550 = { 635 .max_channels = 8, 636 .mal_length = 32, 637 .highest_bank_bit = 16, 638 .bank_swzl_level = 0, 639 .bank_swz2_level = 1, 640 .bank_swz3_level = 1, 641 .bank_spreading = 1, 642}; 643 644static struct tz_cp_config tz_cp_config_sm8550 = { 645 .cp_start = 0, 646 .cp_size = 0x25800000, 647 .cp_nonpixel_start = 0x01000000, 648 .cp_nonpixel_size = 0x24800000, 649}; 650 651static const u32 sm8550_vdec_input_config_params_default[] = { 652 HFI_PROP_BITSTREAM_RESOLUTION, 653 HFI_PROP_CROP_OFFSETS, 654 HFI_PROP_LUMA_CHROMA_BIT_DEPTH, 655 HFI_PROP_CODED_FRAMES, 656 HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT, 657 HFI_PROP_PIC_ORDER_CNT_TYPE, 658 HFI_PROP_PROFILE, 659 HFI_PROP_LEVEL, 660 HFI_PROP_SIGNAL_COLOR_INFO, 661}; 662 663static const u32 sm8550_vdec_input_config_param_hevc[] = { 664 HFI_PROP_BITSTREAM_RESOLUTION, 665 HFI_PROP_CROP_OFFSETS, 666 HFI_PROP_LUMA_CHROMA_BIT_DEPTH, 667 HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT, 668 HFI_PROP_PROFILE, 669 HFI_PROP_LEVEL, 670 HFI_PROP_TIER, 671 HFI_PROP_SIGNAL_COLOR_INFO, 672}; 673 674static const u32 sm8550_vdec_input_config_param_vp9[] = { 675 HFI_PROP_BITSTREAM_RESOLUTION, 676 HFI_PROP_CROP_OFFSETS, 677 HFI_PROP_LUMA_CHROMA_BIT_DEPTH, 678 HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT, 679 HFI_PROP_PROFILE, 680 HFI_PROP_LEVEL, 681}; 682 683static const u32 sm8550_venc_input_config_params[] = { 684 HFI_PROP_COLOR_FORMAT, 685 HFI_PROP_RAW_RESOLUTION, 686 HFI_PROP_CROP_OFFSETS, 687 HFI_PROP_LINEAR_STRIDE_SCANLINE, 688 HFI_PROP_SIGNAL_COLOR_INFO, 689}; 690 691static const u32 sm8550_vdec_output_config_params[] = { 692 HFI_PROP_OPB_ENABLE, 693 HFI_PROP_COLOR_FORMAT, 694 HFI_PROP_LINEAR_STRIDE_SCANLINE, 695}; 696 697static const u32 sm8550_venc_output_config_params[] = { 698 HFI_PROP_BITSTREAM_RESOLUTION, 699 HFI_PROP_CROP_OFFSETS, 700 HFI_PROP_FRAME_RATE, 701}; 702 703static const u32 sm8550_vdec_subscribe_input_properties[] = { 704 HFI_PROP_NO_OUTPUT, 705}; 706 707static const u32 sm8550_vdec_subscribe_output_properties_avc[] = { 708 HFI_PROP_PICTURE_TYPE, 709 HFI_PROP_CABAC_SESSION, 710}; 711 712static const u32 sm8550_vdec_subscribe_output_properties_hevc[] = { 713 HFI_PROP_PICTURE_TYPE, 714}; 715 716static const u32 sm8550_vdec_subscribe_output_properties_vp9[] = { 717 HFI_PROP_PICTURE_TYPE, 718}; 719 720static const u32 sm8550_dec_ip_int_buf_tbl[] = { 721 BUF_BIN, 722 BUF_COMV, 723 BUF_NON_COMV, 724 BUF_LINE, 725}; 726 727static const u32 sm8550_dec_op_int_buf_tbl[] = { 728 BUF_DPB, 729}; 730 731static const u32 sm8550_enc_op_int_buf_tbl[] = { 732 BUF_BIN, 733 BUF_COMV, 734 BUF_NON_COMV, 735 BUF_LINE, 736 BUF_SCRATCH_2, 737}; 738 739const struct iris_platform_data sm8550_data = { 740 .get_instance = iris_hfi_gen2_get_instance, 741 .init_hfi_command_ops = iris_hfi_gen2_command_ops_init, 742 .init_hfi_response_ops = iris_hfi_gen2_response_ops_init, 743 .get_vpu_buffer_size = iris_vpu_buf_size, 744 .vpu_ops = &iris_vpu3_ops, 745 .set_preset_registers = iris_set_sm8550_preset_registers, 746 .icc_tbl = sm8550_icc_table, 747 .icc_tbl_size = ARRAY_SIZE(sm8550_icc_table), 748 .clk_rst_tbl = sm8550_clk_reset_table, 749 .clk_rst_tbl_size = ARRAY_SIZE(sm8550_clk_reset_table), 750 .bw_tbl_dec = sm8550_bw_table_dec, 751 .bw_tbl_dec_size = ARRAY_SIZE(sm8550_bw_table_dec), 752 .pmdomain_tbl = sm8550_pmdomain_table, 753 .pmdomain_tbl_size = ARRAY_SIZE(sm8550_pmdomain_table), 754 .opp_pd_tbl = sm8550_opp_pd_table, 755 .opp_pd_tbl_size = ARRAY_SIZE(sm8550_opp_pd_table), 756 .clk_tbl = sm8550_clk_table, 757 .clk_tbl_size = ARRAY_SIZE(sm8550_clk_table), 758 /* Upper bound of DMA address range */ 759 .dma_mask = 0xe0000000 - 1, 760 .fwname = "qcom/vpu/vpu30_p4.mbn", 761 .pas_id = IRIS_PAS_ID, 762 .inst_caps = &platform_inst_cap_sm8550, 763 .inst_fw_caps_dec = inst_fw_cap_sm8550_dec, 764 .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec), 765 .inst_fw_caps_enc = inst_fw_cap_sm8550_enc, 766 .inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc), 767 .tz_cp_config_data = &tz_cp_config_sm8550, 768 .core_arch = VIDEO_ARCH_LX, 769 .hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE, 770 .ubwc_config = &ubwc_config_sm8550, 771 .num_vpp_pipe = 4, 772 .max_session_count = 16, 773 .max_core_mbpf = NUM_MBS_8K * 2, 774 .max_core_mbps = ((7680 * 4320) / 256) * 60, 775 .dec_input_config_params_default = 776 sm8550_vdec_input_config_params_default, 777 .dec_input_config_params_default_size = 778 ARRAY_SIZE(sm8550_vdec_input_config_params_default), 779 .dec_input_config_params_hevc = 780 sm8550_vdec_input_config_param_hevc, 781 .dec_input_config_params_hevc_size = 782 ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), 783 .dec_input_config_params_vp9 = 784 sm8550_vdec_input_config_param_vp9, 785 .dec_input_config_params_vp9_size = 786 ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), 787 .dec_output_config_params = 788 sm8550_vdec_output_config_params, 789 .dec_output_config_params_size = 790 ARRAY_SIZE(sm8550_vdec_output_config_params), 791 792 .enc_input_config_params = 793 sm8550_venc_input_config_params, 794 .enc_input_config_params_size = 795 ARRAY_SIZE(sm8550_venc_input_config_params), 796 .enc_output_config_params = 797 sm8550_venc_output_config_params, 798 .enc_output_config_params_size = 799 ARRAY_SIZE(sm8550_venc_output_config_params), 800 801 .dec_input_prop = sm8550_vdec_subscribe_input_properties, 802 .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties), 803 .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc, 804 .dec_output_prop_avc_size = 805 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), 806 .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc, 807 .dec_output_prop_hevc_size = 808 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), 809 .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9, 810 .dec_output_prop_vp9_size = 811 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), 812 813 .dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl, 814 .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), 815 .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl, 816 .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl), 817 818 .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl, 819 .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl), 820}; 821 822/* 823 * Shares most of SM8550 data except: 824 * - vpu_ops to iris_vpu33_ops 825 * - clk_rst_tbl to sm8650_clk_reset_table 826 * - controller_rst_tbl to sm8650_controller_reset_table 827 * - fwname to "qcom/vpu/vpu33_p4.mbn" 828 */ 829const struct iris_platform_data sm8650_data = { 830 .get_instance = iris_hfi_gen2_get_instance, 831 .init_hfi_command_ops = iris_hfi_gen2_command_ops_init, 832 .init_hfi_response_ops = iris_hfi_gen2_response_ops_init, 833 .get_vpu_buffer_size = iris_vpu33_buf_size, 834 .vpu_ops = &iris_vpu33_ops, 835 .set_preset_registers = iris_set_sm8550_preset_registers, 836 .icc_tbl = sm8550_icc_table, 837 .icc_tbl_size = ARRAY_SIZE(sm8550_icc_table), 838 .clk_rst_tbl = sm8650_clk_reset_table, 839 .clk_rst_tbl_size = ARRAY_SIZE(sm8650_clk_reset_table), 840 .controller_rst_tbl = sm8650_controller_reset_table, 841 .controller_rst_tbl_size = ARRAY_SIZE(sm8650_controller_reset_table), 842 .bw_tbl_dec = sm8550_bw_table_dec, 843 .bw_tbl_dec_size = ARRAY_SIZE(sm8550_bw_table_dec), 844 .pmdomain_tbl = sm8550_pmdomain_table, 845 .pmdomain_tbl_size = ARRAY_SIZE(sm8550_pmdomain_table), 846 .opp_pd_tbl = sm8550_opp_pd_table, 847 .opp_pd_tbl_size = ARRAY_SIZE(sm8550_opp_pd_table), 848 .clk_tbl = sm8550_clk_table, 849 .clk_tbl_size = ARRAY_SIZE(sm8550_clk_table), 850 /* Upper bound of DMA address range */ 851 .dma_mask = 0xe0000000 - 1, 852 .fwname = "qcom/vpu/vpu33_p4.mbn", 853 .pas_id = IRIS_PAS_ID, 854 .inst_caps = &platform_inst_cap_sm8550, 855 .inst_fw_caps_dec = inst_fw_cap_sm8550_dec, 856 .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec), 857 .inst_fw_caps_enc = inst_fw_cap_sm8550_enc, 858 .inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc), 859 .tz_cp_config_data = &tz_cp_config_sm8550, 860 .core_arch = VIDEO_ARCH_LX, 861 .hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE, 862 .ubwc_config = &ubwc_config_sm8550, 863 .num_vpp_pipe = 4, 864 .max_session_count = 16, 865 .max_core_mbpf = NUM_MBS_8K * 2, 866 .max_core_mbps = ((7680 * 4320) / 256) * 60, 867 .dec_input_config_params_default = 868 sm8550_vdec_input_config_params_default, 869 .dec_input_config_params_default_size = 870 ARRAY_SIZE(sm8550_vdec_input_config_params_default), 871 .dec_input_config_params_hevc = 872 sm8550_vdec_input_config_param_hevc, 873 .dec_input_config_params_hevc_size = 874 ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), 875 .dec_input_config_params_vp9 = 876 sm8550_vdec_input_config_param_vp9, 877 .dec_input_config_params_vp9_size = 878 ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), 879 .dec_output_config_params = 880 sm8550_vdec_output_config_params, 881 .dec_output_config_params_size = 882 ARRAY_SIZE(sm8550_vdec_output_config_params), 883 884 .enc_input_config_params = 885 sm8550_venc_input_config_params, 886 .enc_input_config_params_size = 887 ARRAY_SIZE(sm8550_venc_input_config_params), 888 .enc_output_config_params = 889 sm8550_venc_output_config_params, 890 .enc_output_config_params_size = 891 ARRAY_SIZE(sm8550_venc_output_config_params), 892 893 .dec_input_prop = sm8550_vdec_subscribe_input_properties, 894 .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties), 895 .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc, 896 .dec_output_prop_avc_size = 897 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), 898 .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc, 899 .dec_output_prop_hevc_size = 900 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), 901 .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9, 902 .dec_output_prop_vp9_size = 903 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), 904 905 .dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl, 906 .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), 907 .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl, 908 .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl), 909 910 .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl, 911 .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl), 912}; 913 914const struct iris_platform_data sm8750_data = { 915 .get_instance = iris_hfi_gen2_get_instance, 916 .init_hfi_command_ops = iris_hfi_gen2_command_ops_init, 917 .init_hfi_response_ops = iris_hfi_gen2_response_ops_init, 918 .get_vpu_buffer_size = iris_vpu33_buf_size, 919 .vpu_ops = &iris_vpu35_ops, 920 .set_preset_registers = iris_set_sm8550_preset_registers, 921 .icc_tbl = sm8550_icc_table, 922 .icc_tbl_size = ARRAY_SIZE(sm8550_icc_table), 923 .clk_rst_tbl = sm8750_clk_reset_table, 924 .clk_rst_tbl_size = ARRAY_SIZE(sm8750_clk_reset_table), 925 .bw_tbl_dec = sm8550_bw_table_dec, 926 .bw_tbl_dec_size = ARRAY_SIZE(sm8550_bw_table_dec), 927 .pmdomain_tbl = sm8550_pmdomain_table, 928 .pmdomain_tbl_size = ARRAY_SIZE(sm8550_pmdomain_table), 929 .opp_pd_tbl = sm8550_opp_pd_table, 930 .opp_pd_tbl_size = ARRAY_SIZE(sm8550_opp_pd_table), 931 .clk_tbl = sm8750_clk_table, 932 .clk_tbl_size = ARRAY_SIZE(sm8750_clk_table), 933 /* Upper bound of DMA address range */ 934 .dma_mask = 0xe0000000 - 1, 935 .fwname = "qcom/vpu/vpu35_p4.mbn", 936 .pas_id = IRIS_PAS_ID, 937 .inst_caps = &platform_inst_cap_sm8550, 938 .inst_fw_caps_dec = inst_fw_cap_sm8550_dec, 939 .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec), 940 .inst_fw_caps_enc = inst_fw_cap_sm8550_enc, 941 .inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc), 942 .tz_cp_config_data = &tz_cp_config_sm8550, 943 .core_arch = VIDEO_ARCH_LX, 944 .hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE, 945 .ubwc_config = &ubwc_config_sm8550, 946 .num_vpp_pipe = 4, 947 .max_session_count = 16, 948 .max_core_mbpf = NUM_MBS_8K * 2, 949 .max_core_mbps = ((7680 * 4320) / 256) * 60, 950 .dec_input_config_params_default = 951 sm8550_vdec_input_config_params_default, 952 .dec_input_config_params_default_size = 953 ARRAY_SIZE(sm8550_vdec_input_config_params_default), 954 .dec_input_config_params_hevc = 955 sm8550_vdec_input_config_param_hevc, 956 .dec_input_config_params_hevc_size = 957 ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), 958 .dec_input_config_params_vp9 = 959 sm8550_vdec_input_config_param_vp9, 960 .dec_input_config_params_vp9_size = 961 ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), 962 .dec_output_config_params = 963 sm8550_vdec_output_config_params, 964 .dec_output_config_params_size = 965 ARRAY_SIZE(sm8550_vdec_output_config_params), 966 967 .enc_input_config_params = 968 sm8550_venc_input_config_params, 969 .enc_input_config_params_size = 970 ARRAY_SIZE(sm8550_venc_input_config_params), 971 .enc_output_config_params = 972 sm8550_venc_output_config_params, 973 .enc_output_config_params_size = 974 ARRAY_SIZE(sm8550_venc_output_config_params), 975 976 .dec_input_prop = sm8550_vdec_subscribe_input_properties, 977 .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties), 978 .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc, 979 .dec_output_prop_avc_size = 980 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), 981 .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc, 982 .dec_output_prop_hevc_size = 983 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), 984 .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9, 985 .dec_output_prop_vp9_size = 986 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), 987 988 .dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl, 989 .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), 990 .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl, 991 .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl), 992 993 .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl, 994 .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl), 995}; 996 997/* 998 * Shares most of SM8550 data except: 999 * - inst_caps to platform_inst_cap_qcs8300 1000 */ 1001const struct iris_platform_data qcs8300_data = { 1002 .get_instance = iris_hfi_gen2_get_instance, 1003 .init_hfi_command_ops = iris_hfi_gen2_command_ops_init, 1004 .init_hfi_response_ops = iris_hfi_gen2_response_ops_init, 1005 .get_vpu_buffer_size = iris_vpu_buf_size, 1006 .vpu_ops = &iris_vpu3_ops, 1007 .set_preset_registers = iris_set_sm8550_preset_registers, 1008 .icc_tbl = sm8550_icc_table, 1009 .icc_tbl_size = ARRAY_SIZE(sm8550_icc_table), 1010 .clk_rst_tbl = sm8550_clk_reset_table, 1011 .clk_rst_tbl_size = ARRAY_SIZE(sm8550_clk_reset_table), 1012 .bw_tbl_dec = sm8550_bw_table_dec, 1013 .bw_tbl_dec_size = ARRAY_SIZE(sm8550_bw_table_dec), 1014 .pmdomain_tbl = sm8550_pmdomain_table, 1015 .pmdomain_tbl_size = ARRAY_SIZE(sm8550_pmdomain_table), 1016 .opp_pd_tbl = sm8550_opp_pd_table, 1017 .opp_pd_tbl_size = ARRAY_SIZE(sm8550_opp_pd_table), 1018 .clk_tbl = sm8550_clk_table, 1019 .clk_tbl_size = ARRAY_SIZE(sm8550_clk_table), 1020 /* Upper bound of DMA address range */ 1021 .dma_mask = 0xe0000000 - 1, 1022 .fwname = "qcom/vpu/vpu30_p4_s6.mbn", 1023 .pas_id = IRIS_PAS_ID, 1024 .inst_caps = &platform_inst_cap_qcs8300, 1025 .inst_fw_caps_dec = inst_fw_cap_sm8550_dec, 1026 .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec), 1027 .inst_fw_caps_enc = inst_fw_cap_sm8550_enc, 1028 .inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc), 1029 .tz_cp_config_data = &tz_cp_config_sm8550, 1030 .core_arch = VIDEO_ARCH_LX, 1031 .hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE, 1032 .ubwc_config = &ubwc_config_sm8550, 1033 .num_vpp_pipe = 2, 1034 .max_session_count = 16, 1035 .max_core_mbpf = ((4096 * 2176) / 256) * 4, 1036 .max_core_mbps = (((3840 * 2176) / 256) * 120), 1037 .dec_input_config_params_default = 1038 sm8550_vdec_input_config_params_default, 1039 .dec_input_config_params_default_size = 1040 ARRAY_SIZE(sm8550_vdec_input_config_params_default), 1041 .dec_input_config_params_hevc = 1042 sm8550_vdec_input_config_param_hevc, 1043 .dec_input_config_params_hevc_size = 1044 ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), 1045 .dec_input_config_params_vp9 = 1046 sm8550_vdec_input_config_param_vp9, 1047 .dec_input_config_params_vp9_size = 1048 ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), 1049 .dec_output_config_params = 1050 sm8550_vdec_output_config_params, 1051 .dec_output_config_params_size = 1052 ARRAY_SIZE(sm8550_vdec_output_config_params), 1053 1054 .enc_input_config_params = 1055 sm8550_venc_input_config_params, 1056 .enc_input_config_params_size = 1057 ARRAY_SIZE(sm8550_venc_input_config_params), 1058 .enc_output_config_params = 1059 sm8550_venc_output_config_params, 1060 .enc_output_config_params_size = 1061 ARRAY_SIZE(sm8550_venc_output_config_params), 1062 1063 .dec_input_prop = sm8550_vdec_subscribe_input_properties, 1064 .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties), 1065 .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc, 1066 .dec_output_prop_avc_size = 1067 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), 1068 .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc, 1069 .dec_output_prop_hevc_size = 1070 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), 1071 .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9, 1072 .dec_output_prop_vp9_size = 1073 ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), 1074 1075 .dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl, 1076 .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), 1077 .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl, 1078 .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl), 1079 1080 .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl, 1081 .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl), 1082};
~/
Read-only file preview.