1aa603389SStanimir Varbanov // SPDX-License-Identifier: GPL-2.0-only
2aa603389SStanimir Varbanov /*
3aa603389SStanimir Varbanov  * Copyright (c) 2020, The Linux Foundation. All rights reserved.
4aa603389SStanimir Varbanov  */
57c7e33b7SRob Herring #include <linux/of.h>
6aa603389SStanimir Varbanov #include "hfi_platform.h"
7c0ab2901SVikash Garodia #include "core.h"
8aa603389SStanimir Varbanov 
hfi_platform_get(enum hfi_version version)9aa603389SStanimir Varbanov const struct hfi_platform *hfi_platform_get(enum hfi_version version)
10aa603389SStanimir Varbanov {
11aa603389SStanimir Varbanov 	switch (version) {
12aa603389SStanimir Varbanov 	case HFI_VERSION_4XX:
13aa603389SStanimir Varbanov 		return &hfi_plat_v4;
14869d77e7SStanimir Varbanov 	case HFI_VERSION_6XX:
15869d77e7SStanimir Varbanov 		return &hfi_plat_v6;
16aa603389SStanimir Varbanov 	default:
17aa603389SStanimir Varbanov 		break;
18aa603389SStanimir Varbanov 	}
19aa603389SStanimir Varbanov 
20aa603389SStanimir Varbanov 	return NULL;
21aa603389SStanimir Varbanov }
22aa603389SStanimir Varbanov 
23aa603389SStanimir Varbanov unsigned long
hfi_platform_get_codec_vpp_freq(enum hfi_version version,u32 codec,u32 session_type)24aa603389SStanimir Varbanov hfi_platform_get_codec_vpp_freq(enum hfi_version version, u32 codec, u32 session_type)
25aa603389SStanimir Varbanov {
26aa603389SStanimir Varbanov 	const struct hfi_platform *plat;
27aa603389SStanimir Varbanov 	unsigned long freq = 0;
28aa603389SStanimir Varbanov 
29aa603389SStanimir Varbanov 	plat = hfi_platform_get(version);
30aa603389SStanimir Varbanov 	if (!plat)
31aa603389SStanimir Varbanov 		return 0;
32aa603389SStanimir Varbanov 
33aa603389SStanimir Varbanov 	if (plat->codec_vpp_freq)
34aa603389SStanimir Varbanov 		freq = plat->codec_vpp_freq(session_type, codec);
35aa603389SStanimir Varbanov 
36aa603389SStanimir Varbanov 	return freq;
37aa603389SStanimir Varbanov }
38aa603389SStanimir Varbanov 
39aa603389SStanimir Varbanov unsigned long
hfi_platform_get_codec_vsp_freq(enum hfi_version version,u32 codec,u32 session_type)40aa603389SStanimir Varbanov hfi_platform_get_codec_vsp_freq(enum hfi_version version, u32 codec, u32 session_type)
41aa603389SStanimir Varbanov {
42aa603389SStanimir Varbanov 	const struct hfi_platform *plat;
43aa603389SStanimir Varbanov 	unsigned long freq = 0;
44aa603389SStanimir Varbanov 
45aa603389SStanimir Varbanov 	plat = hfi_platform_get(version);
46aa603389SStanimir Varbanov 	if (!plat)
47aa603389SStanimir Varbanov 		return 0;
48aa603389SStanimir Varbanov 
49aa603389SStanimir Varbanov 	if (plat->codec_vpp_freq)
50aa603389SStanimir Varbanov 		freq = plat->codec_vsp_freq(session_type, codec);
51aa603389SStanimir Varbanov 
52aa603389SStanimir Varbanov 	return freq;
53aa603389SStanimir Varbanov }
54367b619aSStanimir Varbanov 
553cfe5815SDikshita Agarwal unsigned long
hfi_platform_get_codec_lp_freq(enum hfi_version version,u32 codec,u32 session_type)563cfe5815SDikshita Agarwal hfi_platform_get_codec_lp_freq(enum hfi_version version, u32 codec, u32 session_type)
573cfe5815SDikshita Agarwal {
583cfe5815SDikshita Agarwal 	const struct hfi_platform *plat;
593cfe5815SDikshita Agarwal 	unsigned long freq = 0;
603cfe5815SDikshita Agarwal 
613cfe5815SDikshita Agarwal 	plat = hfi_platform_get(version);
623cfe5815SDikshita Agarwal 	if (!plat)
633cfe5815SDikshita Agarwal 		return 0;
643cfe5815SDikshita Agarwal 
653cfe5815SDikshita Agarwal 	if (plat->codec_lp_freq)
663cfe5815SDikshita Agarwal 		freq = plat->codec_lp_freq(session_type, codec);
673cfe5815SDikshita Agarwal 
683cfe5815SDikshita Agarwal 	return freq;
693cfe5815SDikshita Agarwal }
703cfe5815SDikshita Agarwal 
71c0ab2901SVikash Garodia int
hfi_platform_get_codecs(struct venus_core * core,u32 * enc_codecs,u32 * dec_codecs,u32 * count)72c0ab2901SVikash Garodia hfi_platform_get_codecs(struct venus_core *core, u32 *enc_codecs, u32 *dec_codecs, u32 *count)
73c0ab2901SVikash Garodia {
74c0ab2901SVikash Garodia 	const struct hfi_platform *plat;
75c0ab2901SVikash Garodia 
76c0ab2901SVikash Garodia 	plat = hfi_platform_get(core->res->hfi_version);
77c0ab2901SVikash Garodia 	if (!plat)
78c0ab2901SVikash Garodia 		return -EINVAL;
79c0ab2901SVikash Garodia 
80c0ab2901SVikash Garodia 	if (plat->codecs)
81c0ab2901SVikash Garodia 		plat->codecs(enc_codecs, dec_codecs, count);
82c0ab2901SVikash Garodia 
83*adeb071bSKonrad Dybcio 	if (IS_IRIS2_1(core)) {
84c0ab2901SVikash Garodia 		*enc_codecs &= ~HFI_VIDEO_CODEC_VP8;
85c0ab2901SVikash Garodia 		*dec_codecs &= ~HFI_VIDEO_CODEC_VP8;
86c0ab2901SVikash Garodia 	}
87c0ab2901SVikash Garodia 
88c0ab2901SVikash Garodia 	return 0;
89c0ab2901SVikash Garodia }
90c0ab2901SVikash Garodia 
91