Merge branch 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-block.git] / drivers / staging / media / meson / vdec / vdec_platform.c
CommitLineData
3e7f51bd
MJ
1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright (C) 2018 BayLibre, SAS
4 * Author: Maxime Jourdan <mjourdan@baylibre.com>
5 */
6
7#include "vdec_platform.h"
8#include "vdec.h"
9
10#include "vdec_1.h"
00c43088 11#include "vdec_hevc.h"
3e7f51bd 12#include "codec_mpeg12.h"
d7647e7c 13#include "codec_h264.h"
00c43088 14#include "codec_vp9.h"
3e7f51bd
MJ
15
16static const struct amvdec_format vdec_formats_gxbb[] = {
17 {
d7647e7c
MJ
18 .pixfmt = V4L2_PIX_FMT_H264,
19 .min_buffers = 2,
20 .max_buffers = 24,
21 .max_width = 1920,
22 .max_height = 1080,
23 .vdec_ops = &vdec_1_ops,
24 .codec_ops = &codec_h264_ops,
25 .firmware_path = "meson/vdec/gxbb_h264.bin",
26 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
27 .flags = V4L2_FMT_FLAG_COMPRESSED |
28 V4L2_FMT_FLAG_DYN_RESOLUTION,
29 }, {
3e7f51bd
MJ
30 .pixfmt = V4L2_PIX_FMT_MPEG1,
31 .min_buffers = 8,
32 .max_buffers = 8,
33 .max_width = 1920,
34 .max_height = 1080,
35 .vdec_ops = &vdec_1_ops,
36 .codec_ops = &codec_mpeg12_ops,
37 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
38 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 39 .flags = V4L2_FMT_FLAG_COMPRESSED,
3e7f51bd
MJ
40 }, {
41 .pixfmt = V4L2_PIX_FMT_MPEG2,
42 .min_buffers = 8,
43 .max_buffers = 8,
44 .max_width = 1920,
45 .max_height = 1080,
46 .vdec_ops = &vdec_1_ops,
47 .codec_ops = &codec_mpeg12_ops,
48 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
49 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 50 .flags = V4L2_FMT_FLAG_COMPRESSED,
3e7f51bd
MJ
51 },
52};
53
54static const struct amvdec_format vdec_formats_gxl[] = {
55 {
00c43088
MJ
56 .pixfmt = V4L2_PIX_FMT_VP9,
57 .min_buffers = 16,
58 .max_buffers = 24,
59 .max_width = 3840,
60 .max_height = 2160,
61 .vdec_ops = &vdec_hevc_ops,
62 .codec_ops = &codec_vp9_ops,
63 .firmware_path = "meson/vdec/gxl_vp9.bin",
64 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
65 .flags = V4L2_FMT_FLAG_COMPRESSED |
66 V4L2_FMT_FLAG_DYN_RESOLUTION,
67 }, {
d7647e7c
MJ
68 .pixfmt = V4L2_PIX_FMT_H264,
69 .min_buffers = 2,
70 .max_buffers = 24,
71 .max_width = 3840,
72 .max_height = 2160,
73 .vdec_ops = &vdec_1_ops,
74 .codec_ops = &codec_h264_ops,
75 .firmware_path = "meson/vdec/gxl_h264.bin",
76 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
77 .flags = V4L2_FMT_FLAG_COMPRESSED |
78 V4L2_FMT_FLAG_DYN_RESOLUTION,
79 }, {
3e7f51bd
MJ
80 .pixfmt = V4L2_PIX_FMT_MPEG1,
81 .min_buffers = 8,
82 .max_buffers = 8,
83 .max_width = 1920,
84 .max_height = 1080,
85 .vdec_ops = &vdec_1_ops,
86 .codec_ops = &codec_mpeg12_ops,
87 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
88 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 89 .flags = V4L2_FMT_FLAG_COMPRESSED,
3e7f51bd
MJ
90 }, {
91 .pixfmt = V4L2_PIX_FMT_MPEG2,
92 .min_buffers = 8,
93 .max_buffers = 8,
94 .max_width = 1920,
95 .max_height = 1080,
96 .vdec_ops = &vdec_1_ops,
97 .codec_ops = &codec_mpeg12_ops,
98 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
99 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 100 .flags = V4L2_FMT_FLAG_COMPRESSED,
3e7f51bd
MJ
101 },
102};
103
104static const struct amvdec_format vdec_formats_gxm[] = {
105 {
d7647e7c
MJ
106 .pixfmt = V4L2_PIX_FMT_H264,
107 .min_buffers = 2,
108 .max_buffers = 24,
109 .max_width = 3840,
110 .max_height = 2160,
111 .vdec_ops = &vdec_1_ops,
112 .codec_ops = &codec_h264_ops,
113 .firmware_path = "meson/vdec/gxm_h264.bin",
114 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
115 .flags = V4L2_FMT_FLAG_COMPRESSED |
116 V4L2_FMT_FLAG_DYN_RESOLUTION,
117 }, {
3e7f51bd
MJ
118 .pixfmt = V4L2_PIX_FMT_MPEG1,
119 .min_buffers = 8,
120 .max_buffers = 8,
121 .max_width = 1920,
122 .max_height = 1080,
123 .vdec_ops = &vdec_1_ops,
124 .codec_ops = &codec_mpeg12_ops,
125 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
126 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 127 .flags = V4L2_FMT_FLAG_COMPRESSED,
3e7f51bd
MJ
128 }, {
129 .pixfmt = V4L2_PIX_FMT_MPEG2,
130 .min_buffers = 8,
131 .max_buffers = 8,
132 .max_width = 1920,
133 .max_height = 1080,
134 .vdec_ops = &vdec_1_ops,
135 .codec_ops = &codec_mpeg12_ops,
136 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
137 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 138 .flags = V4L2_FMT_FLAG_COMPRESSED,
3e7f51bd
MJ
139 },
140};
141
8299c653
MJ
142static const struct amvdec_format vdec_formats_g12a[] = {
143 {
00c43088
MJ
144 .pixfmt = V4L2_PIX_FMT_VP9,
145 .min_buffers = 16,
146 .max_buffers = 24,
147 .max_width = 3840,
148 .max_height = 2160,
149 .vdec_ops = &vdec_hevc_ops,
150 .codec_ops = &codec_vp9_ops,
151 .firmware_path = "meson/vdec/g12a_vp9.bin",
152 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
153 .flags = V4L2_FMT_FLAG_COMPRESSED |
154 V4L2_FMT_FLAG_DYN_RESOLUTION,
155 }, {
d7647e7c
MJ
156 .pixfmt = V4L2_PIX_FMT_H264,
157 .min_buffers = 2,
158 .max_buffers = 24,
159 .max_width = 3840,
160 .max_height = 2160,
161 .vdec_ops = &vdec_1_ops,
162 .codec_ops = &codec_h264_ops,
163 .firmware_path = "meson/vdec/g12a_h264.bin",
164 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
165 .flags = V4L2_FMT_FLAG_COMPRESSED |
166 V4L2_FMT_FLAG_DYN_RESOLUTION,
167 }, {
8299c653
MJ
168 .pixfmt = V4L2_PIX_FMT_MPEG1,
169 .min_buffers = 8,
170 .max_buffers = 8,
171 .max_width = 1920,
172 .max_height = 1080,
173 .vdec_ops = &vdec_1_ops,
174 .codec_ops = &codec_mpeg12_ops,
175 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
176 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 177 .flags = V4L2_FMT_FLAG_COMPRESSED,
8299c653
MJ
178 }, {
179 .pixfmt = V4L2_PIX_FMT_MPEG2,
180 .min_buffers = 8,
181 .max_buffers = 8,
182 .max_width = 1920,
183 .max_height = 1080,
184 .vdec_ops = &vdec_1_ops,
185 .codec_ops = &codec_mpeg12_ops,
186 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
187 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 188 .flags = V4L2_FMT_FLAG_COMPRESSED,
8299c653
MJ
189 },
190};
191
fee586a2
NA
192static const struct amvdec_format vdec_formats_sm1[] = {
193 {
00c43088
MJ
194 .pixfmt = V4L2_PIX_FMT_VP9,
195 .min_buffers = 16,
196 .max_buffers = 24,
197 .max_width = 3840,
198 .max_height = 2160,
199 .vdec_ops = &vdec_hevc_ops,
200 .codec_ops = &codec_vp9_ops,
201 .firmware_path = "meson/vdec/sm1_vp9_mmu.bin",
202 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
203 .flags = V4L2_FMT_FLAG_COMPRESSED |
204 V4L2_FMT_FLAG_DYN_RESOLUTION,
205 }, {
d7647e7c
MJ
206 .pixfmt = V4L2_PIX_FMT_H264,
207 .min_buffers = 2,
208 .max_buffers = 24,
209 .max_width = 3840,
210 .max_height = 2160,
211 .vdec_ops = &vdec_1_ops,
212 .codec_ops = &codec_h264_ops,
213 .firmware_path = "meson/vdec/g12a_h264.bin",
214 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
215 .flags = V4L2_FMT_FLAG_COMPRESSED |
216 V4L2_FMT_FLAG_DYN_RESOLUTION,
217 }, {
fee586a2
NA
218 .pixfmt = V4L2_PIX_FMT_MPEG1,
219 .min_buffers = 8,
220 .max_buffers = 8,
221 .max_width = 1920,
222 .max_height = 1080,
223 .vdec_ops = &vdec_1_ops,
224 .codec_ops = &codec_mpeg12_ops,
225 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
226 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 227 .flags = V4L2_FMT_FLAG_COMPRESSED,
fee586a2
NA
228 }, {
229 .pixfmt = V4L2_PIX_FMT_MPEG2,
230 .min_buffers = 8,
231 .max_buffers = 8,
232 .max_width = 1920,
233 .max_height = 1080,
234 .vdec_ops = &vdec_1_ops,
235 .codec_ops = &codec_mpeg12_ops,
236 .firmware_path = "meson/vdec/gxl_mpeg12.bin",
237 .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
876f123b 238 .flags = V4L2_FMT_FLAG_COMPRESSED,
fee586a2
NA
239 },
240};
241
3e7f51bd
MJ
242const struct vdec_platform vdec_platform_gxbb = {
243 .formats = vdec_formats_gxbb,
244 .num_formats = ARRAY_SIZE(vdec_formats_gxbb),
245 .revision = VDEC_REVISION_GXBB,
246};
247
248const struct vdec_platform vdec_platform_gxl = {
249 .formats = vdec_formats_gxl,
250 .num_formats = ARRAY_SIZE(vdec_formats_gxl),
251 .revision = VDEC_REVISION_GXL,
252};
253
254const struct vdec_platform vdec_platform_gxm = {
255 .formats = vdec_formats_gxm,
256 .num_formats = ARRAY_SIZE(vdec_formats_gxm),
257 .revision = VDEC_REVISION_GXM,
258};
8299c653
MJ
259
260const struct vdec_platform vdec_platform_g12a = {
261 .formats = vdec_formats_g12a,
262 .num_formats = ARRAY_SIZE(vdec_formats_g12a),
263 .revision = VDEC_REVISION_G12A,
264};
fee586a2
NA
265
266const struct vdec_platform vdec_platform_sm1 = {
267 .formats = vdec_formats_sm1,
268 .num_formats = ARRAY_SIZE(vdec_formats_sm1),
269 .revision = VDEC_REVISION_SM1,
270};