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