hfi_platform_v4.c (14171B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (c) 2020, The Linux Foundation. All rights reserved. 4 */ 5#include "hfi_platform.h" 6 7static const struct hfi_plat_caps caps[] = { 8{ 9 .codec = HFI_VIDEO_CODEC_H264, 10 .domain = VIDC_SESSION_TYPE_DEC, 11 .cap_bufs_mode_dynamic = true, 12 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1}, 13 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1}, 14 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 15 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 16 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 17 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 18 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1}, 19 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 20 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 21 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1}, 22 .num_caps = 10, 23 .pl[0] = {HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_52}, 24 .pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_52}, 25 .pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_52}, 26 .pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_52}, 27 .pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_52}, 28 .num_pl = 5, 29 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 30 .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 31 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 32 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 33 .num_fmts = 4, 34}, { 35 .codec = HFI_VIDEO_CODEC_HEVC, 36 .domain = VIDC_SESSION_TYPE_DEC, 37 .cap_bufs_mode_dynamic = true, 38 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1}, 39 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1}, 40 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 41 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 42 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 43 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 44 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1}, 45 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 46 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 47 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1}, 48 .num_caps = 10, 49 .pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0 << 28}, 50 .pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0 << 28}, 51 .num_pl = 2, 52 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 53 .fmts[1] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 54 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 55 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 56 .fmts[4] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 57 .fmts[5] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_P010}, 58 .fmts[6] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 59 .num_fmts = 7, 60}, { 61 .codec = HFI_VIDEO_CODEC_VP8, 62 .domain = VIDC_SESSION_TYPE_DEC, 63 .cap_bufs_mode_dynamic = true, 64 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1}, 65 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1}, 66 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 67 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 68 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 69 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 70 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1}, 71 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 72 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 73 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1}, 74 .num_caps = 10, 75 .pl[0] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_0}, 76 .pl[1] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_1}, 77 .pl[2] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_2}, 78 .pl[3] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_3}, 79 .num_pl = 4, 80 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 81 .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 82 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 83 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 84 .num_fmts = 4, 85}, { 86 .codec = HFI_VIDEO_CODEC_VP9, 87 .domain = VIDC_SESSION_TYPE_DEC, 88 .cap_bufs_mode_dynamic = true, 89 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 1}, 90 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 1}, 91 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 92 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 93 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 94 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 95 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 2073600, 1}, 96 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 97 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 98 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 3, 1}, 99 .num_caps = 10, 100 .pl[0] = {HFI_VP9_PROFILE_P0, 200}, 101 .pl[1] = {HFI_VP9_PROFILE_P2_10B, 200}, 102 .num_pl = 2, 103 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 104 .fmts[1] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 105 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 106 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 107 .fmts[4] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 108 .fmts[5] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_P010}, 109 .fmts[6] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 110 .num_fmts = 7, 111}, { 112 .codec = HFI_VIDEO_CODEC_MPEG2, 113 .domain = VIDC_SESSION_TYPE_DEC, 114 .cap_bufs_mode_dynamic = true, 115 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 1920, 1}, 116 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 1920, 1}, 117 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 8160, 1}, 118 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 40000000, 1}, 119 .caps[4] = {HFI_CAPABILITY_SCALE_X, 4096, 65536, 1}, 120 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 4096, 65536, 1}, 121 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 244800, 1}, 122 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 30, 1}, 123 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 2, 1}, 124 .caps[9] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 1, 1}, 125 .num_caps = 10, 126 .pl[0] = {HFI_MPEG2_PROFILE_SIMPLE, HFI_MPEG2_LEVEL_H14}, 127 .pl[1] = {HFI_MPEG2_PROFILE_MAIN, HFI_MPEG2_LEVEL_H14}, 128 .num_pl = 2, 129 .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 130 .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, 131 .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, 132 .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, 133 .num_fmts = 4, 134}, { 135 .codec = HFI_VIDEO_CODEC_H264, 136 .domain = VIDC_SESSION_TYPE_ENC, 137 .cap_bufs_mode_dynamic = true, 138 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 16}, 139 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 16}, 140 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 141 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 142 .caps[4] = {HFI_CAPABILITY_SCALE_X, 8192, 65536, 1}, 143 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 8192, 65536, 1}, 144 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 1036800, 1}, 145 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 146 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 3, 1}, 147 .caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1}, 148 .caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 5, 1}, 149 .caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1}, 150 .caps[12] = {HFI_CAPABILITY_LCU_SIZE, 16, 16, 1}, 151 .caps[13] = {HFI_CAPABILITY_BFRAME, 0, 1, 1}, 152 .caps[14] = {HFI_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS, 0, 5, 1}, 153 .caps[15] = {HFI_CAPABILITY_I_FRAME_QP, 0, 51, 1}, 154 .caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 51, 1}, 155 .caps[17] = {HFI_CAPABILITY_B_FRAME_QP, 0, 51, 1}, 156 .caps[18] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 2, 1}, 157 .caps[19] = {HFI_CAPABILITY_RATE_CONTROL_MODES, 0x1000001, 0x1000005, 1}, 158 .caps[20] = {HFI_CAPABILITY_COLOR_SPACE_CONVERSION, 0, 2, 1}, 159 .num_caps = 21, 160 .pl[0] = {HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_52}, 161 .pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_52}, 162 .pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_52}, 163 .pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_52}, 164 .pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_52}, 165 .num_pl = 5, 166 .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, 167 .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 168 .fmts[2] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 169 .fmts[3] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_P010}, 170 .num_fmts = 4, 171}, { 172 .codec = HFI_VIDEO_CODEC_HEVC, 173 .domain = VIDC_SESSION_TYPE_ENC, 174 .cap_bufs_mode_dynamic = true, 175 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 16}, 176 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 16}, 177 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 178 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 179 .caps[4] = {HFI_CAPABILITY_SCALE_X, 8192, 65536, 1}, 180 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 8192, 65536, 1}, 181 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 1036800, 1}, 182 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 480, 1}, 183 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 3, 1}, 184 .caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1}, 185 .caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 5, 1}, 186 .caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1}, 187 .caps[12] = {HFI_CAPABILITY_LCU_SIZE, 32, 32, 1}, 188 .caps[13] = {HFI_CAPABILITY_BFRAME, 0, 1, 1}, 189 .caps[14] = {HFI_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS, 0, 5, 1}, 190 .caps[15] = {HFI_CAPABILITY_I_FRAME_QP, 0, 63, 1}, 191 .caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 63, 1}, 192 .caps[17] = {HFI_CAPABILITY_B_FRAME_QP, 0, 63, 1}, 193 .caps[18] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 2, 1}, 194 .caps[19] = {HFI_CAPABILITY_RATE_CONTROL_MODES, 0x1000001, 0x1000005, 1}, 195 .caps[20] = {HFI_CAPABILITY_COLOR_SPACE_CONVERSION, 0, 2, 1}, 196 .caps[21] = {HFI_CAPABILITY_ROTATION, 1, 4, 90}, 197 .caps[22] = {HFI_CAPABILITY_BLUR_WIDTH, 96, 4096, 16}, 198 .caps[23] = {HFI_CAPABILITY_BLUR_HEIGHT, 96, 4096, 16}, 199 .num_caps = 24, 200 .pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0}, 201 .pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_6 | HFI_HEVC_TIER_HIGH0}, 202 .num_pl = 2, 203 .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, 204 .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 205 .fmts[2] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 206 .fmts[3] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_P010}, 207 .num_fmts = 4, 208}, { 209 .codec = HFI_VIDEO_CODEC_VP8, 210 .domain = VIDC_SESSION_TYPE_ENC, 211 .cap_bufs_mode_dynamic = true, 212 .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 96, 4096, 16}, 213 .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 96, 4096, 16}, 214 .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 1, 36864, 1}, 215 .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 120000000, 1}, 216 .caps[4] = {HFI_CAPABILITY_SCALE_X, 8192, 65536, 1}, 217 .caps[5] = {HFI_CAPABILITY_SCALE_Y, 8192, 65536, 1}, 218 .caps[6] = {HFI_CAPABILITY_MBS_PER_SECOND, 1, 1036800, 1}, 219 .caps[7] = {HFI_CAPABILITY_FRAMERATE, 1, 240, 1}, 220 .caps[8] = {HFI_CAPABILITY_MAX_VIDEOCORES, 1, 3, 1}, 221 .caps[9] = {HFI_CAPABILITY_PEAKBITRATE, 32000, 160000000, 1}, 222 .caps[10] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 3, 1}, 223 .caps[11] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 2, 1}, 224 .caps[12] = {HFI_CAPABILITY_LCU_SIZE, 16, 16, 1}, 225 .caps[13] = {HFI_CAPABILITY_BFRAME, 0, 1, 1}, 226 .caps[14] = {HFI_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS, 0, 5, 1}, 227 .caps[15] = {HFI_CAPABILITY_I_FRAME_QP, 0, 127, 1}, 228 .caps[16] = {HFI_CAPABILITY_P_FRAME_QP, 0, 127, 1}, 229 .caps[17] = {HFI_CAPABILITY_MAX_WORKMODES, 1, 2, 1}, 230 .caps[18] = {HFI_CAPABILITY_RATE_CONTROL_MODES, 0x1000001, 0x1000005, 1}, 231 .caps[19] = {HFI_CAPABILITY_BLUR_WIDTH, 96, 4096, 16}, 232 .caps[20] = {HFI_CAPABILITY_BLUR_HEIGHT, 96, 4096, 16}, 233 .caps[21] = {HFI_CAPABILITY_COLOR_SPACE_CONVERSION, 0, 2, 1}, 234 .caps[22] = {HFI_CAPABILITY_ROTATION, 1, 4, 90}, 235 .num_caps = 23, 236 .pl[0] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_0}, 237 .pl[1] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_1}, 238 .pl[2] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_2}, 239 .pl[3] = {HFI_VPX_PROFILE_MAIN, HFI_VPX_LEVEL_VERSION_3}, 240 .num_pl = 4, 241 .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, 242 .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, 243 .fmts[2] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_YUV420_TP10_UBWC}, 244 .fmts[3] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_P010}, 245 .num_fmts = 4, 246} }; 247 248static const struct hfi_plat_caps *get_capabilities(unsigned int *entries) 249{ 250 *entries = ARRAY_SIZE(caps); 251 return caps; 252} 253 254static void get_codecs(u32 *enc_codecs, u32 *dec_codecs, u32 *count) 255{ 256 *enc_codecs = HFI_VIDEO_CODEC_H264 | HFI_VIDEO_CODEC_HEVC | 257 HFI_VIDEO_CODEC_VP8; 258 *dec_codecs = HFI_VIDEO_CODEC_H264 | HFI_VIDEO_CODEC_HEVC | 259 HFI_VIDEO_CODEC_VP8 | HFI_VIDEO_CODEC_VP9 | 260 HFI_VIDEO_CODEC_MPEG2; 261 *count = 8; 262} 263 264static const struct hfi_platform_codec_freq_data codec_freq_data[] = { 265 { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 10, 320 }, 266 { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 10, 320 }, 267 { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 10, 320 }, 268 { V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 269 { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 270 { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 271 { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 272 { V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, 273}; 274 275static const struct hfi_platform_codec_freq_data * 276get_codec_freq_data(u32 session_type, u32 pixfmt) 277{ 278 const struct hfi_platform_codec_freq_data *data = codec_freq_data; 279 unsigned int i, data_size = ARRAY_SIZE(codec_freq_data); 280 const struct hfi_platform_codec_freq_data *found = NULL; 281 282 for (i = 0; i < data_size; i++) { 283 if (data[i].pixfmt == pixfmt && data[i].session_type == session_type) { 284 found = &data[i]; 285 break; 286 } 287 } 288 289 return found; 290} 291 292static unsigned long codec_vpp_freq(u32 session_type, u32 codec) 293{ 294 const struct hfi_platform_codec_freq_data *data; 295 296 data = get_codec_freq_data(session_type, codec); 297 if (data) 298 return data->vpp_freq; 299 300 return 0; 301} 302 303static unsigned long codec_vsp_freq(u32 session_type, u32 codec) 304{ 305 const struct hfi_platform_codec_freq_data *data; 306 307 data = get_codec_freq_data(session_type, codec); 308 if (data) 309 return data->vsp_freq; 310 311 return 0; 312} 313 314static unsigned long codec_lp_freq(u32 session_type, u32 codec) 315{ 316 const struct hfi_platform_codec_freq_data *data; 317 318 data = get_codec_freq_data(session_type, codec); 319 if (data) 320 return data->low_power_freq; 321 322 return 0; 323} 324 325const struct hfi_platform hfi_plat_v4 = { 326 .codec_vpp_freq = codec_vpp_freq, 327 .codec_vsp_freq = codec_vsp_freq, 328 .codec_lp_freq = codec_lp_freq, 329 .codecs = get_codecs, 330 .capabilities = get_capabilities, 331};