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