1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2020, The Linux Foundation. All rights reserved.
4 */
5 #include <linux/of_device.h>
6 #include "hfi_platform.h"
7 #include "core.h"
8
hfi_platform_get(enum hfi_version version)9 const struct hfi_platform *hfi_platform_get(enum hfi_version version)
10 {
11 switch (version) {
12 case HFI_VERSION_4XX:
13 return &hfi_plat_v4;
14 case HFI_VERSION_6XX:
15 return &hfi_plat_v6;
16 default:
17 break;
18 }
19
20 return NULL;
21 }
22
23 unsigned long
hfi_platform_get_codec_vpp_freq(enum hfi_version version,u32 codec,u32 session_type)24 hfi_platform_get_codec_vpp_freq(enum hfi_version version, u32 codec, u32 session_type)
25 {
26 const struct hfi_platform *plat;
27 unsigned long freq = 0;
28
29 plat = hfi_platform_get(version);
30 if (!plat)
31 return 0;
32
33 if (plat->codec_vpp_freq)
34 freq = plat->codec_vpp_freq(session_type, codec);
35
36 return freq;
37 }
38
39 unsigned long
hfi_platform_get_codec_vsp_freq(enum hfi_version version,u32 codec,u32 session_type)40 hfi_platform_get_codec_vsp_freq(enum hfi_version version, u32 codec, u32 session_type)
41 {
42 const struct hfi_platform *plat;
43 unsigned long freq = 0;
44
45 plat = hfi_platform_get(version);
46 if (!plat)
47 return 0;
48
49 if (plat->codec_vpp_freq)
50 freq = plat->codec_vsp_freq(session_type, codec);
51
52 return freq;
53 }
54
55 unsigned long
hfi_platform_get_codec_lp_freq(enum hfi_version version,u32 codec,u32 session_type)56 hfi_platform_get_codec_lp_freq(enum hfi_version version, u32 codec, u32 session_type)
57 {
58 const struct hfi_platform *plat;
59 unsigned long freq = 0;
60
61 plat = hfi_platform_get(version);
62 if (!plat)
63 return 0;
64
65 if (plat->codec_lp_freq)
66 freq = plat->codec_lp_freq(session_type, codec);
67
68 return freq;
69 }
70
71 int
hfi_platform_get_codecs(struct venus_core * core,u32 * enc_codecs,u32 * dec_codecs,u32 * count)72 hfi_platform_get_codecs(struct venus_core *core, u32 *enc_codecs, u32 *dec_codecs, u32 *count)
73 {
74 const struct hfi_platform *plat;
75
76 plat = hfi_platform_get(core->res->hfi_version);
77 if (!plat)
78 return -EINVAL;
79
80 if (plat->codecs)
81 plat->codecs(enc_codecs, dec_codecs, count);
82
83 if (of_device_is_compatible(core->dev->of_node, "qcom,sc7280-venus")) {
84 *enc_codecs &= ~HFI_VIDEO_CODEC_VP8;
85 *dec_codecs &= ~HFI_VIDEO_CODEC_VP8;
86 }
87
88 return 0;
89 }
90
91