cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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};