6464#include "smuio_v11_0.h"
6565#include "smuio_v11_0_6.h"
6666
67- #define codec_info_build (type , width , height , level ) \
68- .codec_type = type,\
69- .max_width = width,\
70- .max_height = height,\
71- .max_pixels_per_frame = height * width,\
72- .max_level = level,
73-
7467static const struct amd_ip_funcs nv_common_ip_funcs ;
7568
7669/* Navi */
7770static const struct amdgpu_video_codec_info nv_video_codecs_encode_array [] =
7871{
79- {
80- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,
81- .max_width = 4096 ,
82- .max_height = 2304 ,
83- .max_pixels_per_frame = 4096 * 2304 ,
84- .max_level = 0 ,
85- },
86- {
87- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,
88- .max_width = 4096 ,
89- .max_height = 2304 ,
90- .max_pixels_per_frame = 4096 * 2304 ,
91- .max_level = 0 ,
92- },
72+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC , 4096 , 2304 , 0 )},
73+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC , 4096 , 2304 , 0 )},
9374};
9475
9576static const struct amdgpu_video_codecs nv_video_codecs_encode =
@@ -101,55 +82,13 @@ static const struct amdgpu_video_codecs nv_video_codecs_encode =
10182/* Navi1x */
10283static const struct amdgpu_video_codec_info nv_video_codecs_decode_array [] =
10384{
104- {
105- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,
106- .max_width = 4096 ,
107- .max_height = 4096 ,
108- .max_pixels_per_frame = 4096 * 4096 ,
109- .max_level = 3 ,
110- },
111- {
112- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,
113- .max_width = 4096 ,
114- .max_height = 4096 ,
115- .max_pixels_per_frame = 4096 * 4096 ,
116- .max_level = 5 ,
117- },
118- {
119- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,
120- .max_width = 4096 ,
121- .max_height = 4096 ,
122- .max_pixels_per_frame = 4096 * 4096 ,
123- .max_level = 52 ,
124- },
125- {
126- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,
127- .max_width = 4096 ,
128- .max_height = 4096 ,
129- .max_pixels_per_frame = 4096 * 4096 ,
130- .max_level = 4 ,
131- },
132- {
133- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,
134- .max_width = 8192 ,
135- .max_height = 4352 ,
136- .max_pixels_per_frame = 8192 * 4352 ,
137- .max_level = 186 ,
138- },
139- {
140- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,
141- .max_width = 4096 ,
142- .max_height = 4096 ,
143- .max_pixels_per_frame = 4096 * 4096 ,
144- .max_level = 0 ,
145- },
146- {
147- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 ,
148- .max_width = 8192 ,
149- .max_height = 4352 ,
150- .max_pixels_per_frame = 8192 * 4352 ,
151- .max_level = 0 ,
152- },
85+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 , 4096 , 4906 , 3 )},
86+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 , 4096 , 4906 , 5 )},
87+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC , 4096 , 4906 , 52 )},
88+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 , 4096 , 4906 , 4 )},
89+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC , 8192 , 4352 , 186 )},
90+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG , 4096 , 4096 , 0 )},
91+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 , 8192 , 4352 , 0 )},
15392};
15493
15594static const struct amdgpu_video_codecs nv_video_codecs_decode =
@@ -161,62 +100,14 @@ static const struct amdgpu_video_codecs nv_video_codecs_decode =
161100/* Sienna Cichlid */
162101static const struct amdgpu_video_codec_info sc_video_codecs_decode_array [] =
163102{
164- {
165- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,
166- .max_width = 4096 ,
167- .max_height = 4096 ,
168- .max_pixels_per_frame = 4096 * 4096 ,
169- .max_level = 3 ,
170- },
171- {
172- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,
173- .max_width = 4096 ,
174- .max_height = 4096 ,
175- .max_pixels_per_frame = 4096 * 4096 ,
176- .max_level = 5 ,
177- },
178- {
179- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,
180- .max_width = 4096 ,
181- .max_height = 4096 ,
182- .max_pixels_per_frame = 4096 * 4096 ,
183- .max_level = 52 ,
184- },
185- {
186- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,
187- .max_width = 4096 ,
188- .max_height = 4096 ,
189- .max_pixels_per_frame = 4096 * 4096 ,
190- .max_level = 4 ,
191- },
192- {
193- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,
194- .max_width = 8192 ,
195- .max_height = 4352 ,
196- .max_pixels_per_frame = 8192 * 4352 ,
197- .max_level = 186 ,
198- },
199- {
200- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,
201- .max_width = 4096 ,
202- .max_height = 4096 ,
203- .max_pixels_per_frame = 4096 * 4096 ,
204- .max_level = 0 ,
205- },
206- {
207- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 ,
208- .max_width = 8192 ,
209- .max_height = 4352 ,
210- .max_pixels_per_frame = 8192 * 4352 ,
211- .max_level = 0 ,
212- },
213- {
214- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 ,
215- .max_width = 8192 ,
216- .max_height = 4352 ,
217- .max_pixels_per_frame = 8192 * 4352 ,
218- .max_level = 0 ,
219- },
103+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 , 4096 , 4906 , 3 )},
104+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 , 4096 , 4906 , 5 )},
105+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC , 4096 , 4906 , 52 )},
106+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 , 4096 , 4906 , 4 )},
107+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC , 8192 , 4352 , 186 )},
108+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG , 4096 , 4096 , 0 )},
109+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 , 8192 , 4352 , 0 )},
110+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 , 8192 , 4352 , 0 )},
220111};
221112
222113static const struct amdgpu_video_codecs sc_video_codecs_decode =
@@ -228,80 +119,20 @@ static const struct amdgpu_video_codecs sc_video_codecs_decode =
228119/* SRIOV Sienna Cichlid, not const since data is controlled by host */
229120static struct amdgpu_video_codec_info sriov_sc_video_codecs_encode_array [] =
230121{
231- {
232- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,
233- .max_width = 4096 ,
234- .max_height = 2304 ,
235- .max_pixels_per_frame = 4096 * 2304 ,
236- .max_level = 0 ,
237- },
238- {
239- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,
240- .max_width = 4096 ,
241- .max_height = 2304 ,
242- .max_pixels_per_frame = 4096 * 2304 ,
243- .max_level = 0 ,
244- },
122+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC , 4096 , 2304 , 0 )},
123+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC , 4096 , 2304 , 0 )},
245124};
246125
247126static struct amdgpu_video_codec_info sriov_sc_video_codecs_decode_array [] =
248127{
249- {
250- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 ,
251- .max_width = 4096 ,
252- .max_height = 4096 ,
253- .max_pixels_per_frame = 4096 * 4096 ,
254- .max_level = 3 ,
255- },
256- {
257- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 ,
258- .max_width = 4096 ,
259- .max_height = 4096 ,
260- .max_pixels_per_frame = 4096 * 4096 ,
261- .max_level = 5 ,
262- },
263- {
264- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC ,
265- .max_width = 4096 ,
266- .max_height = 4096 ,
267- .max_pixels_per_frame = 4096 * 4096 ,
268- .max_level = 52 ,
269- },
270- {
271- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 ,
272- .max_width = 4096 ,
273- .max_height = 4096 ,
274- .max_pixels_per_frame = 4096 * 4096 ,
275- .max_level = 4 ,
276- },
277- {
278- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC ,
279- .max_width = 8192 ,
280- .max_height = 4352 ,
281- .max_pixels_per_frame = 8192 * 4352 ,
282- .max_level = 186 ,
283- },
284- {
285- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG ,
286- .max_width = 4096 ,
287- .max_height = 4096 ,
288- .max_pixels_per_frame = 4096 * 4096 ,
289- .max_level = 0 ,
290- },
291- {
292- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 ,
293- .max_width = 8192 ,
294- .max_height = 4352 ,
295- .max_pixels_per_frame = 8192 * 4352 ,
296- .max_level = 0 ,
297- },
298- {
299- .codec_type = AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 ,
300- .max_width = 8192 ,
301- .max_height = 4352 ,
302- .max_pixels_per_frame = 8192 * 4352 ,
303- .max_level = 0 ,
304- },
128+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2 , 4096 , 4906 , 3 )},
129+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4 , 4096 , 4906 , 5 )},
130+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC , 4096 , 4906 , 52 )},
131+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1 , 4096 , 4906 , 4 )},
132+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC , 8192 , 4352 , 186 )},
133+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG , 4096 , 4096 , 0 )},
134+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 , 8192 , 4352 , 0 )},
135+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1 , 8192 , 4352 , 0 )},
305136};
306137
307138static struct amdgpu_video_codecs sriov_sc_video_codecs_encode =
@@ -333,6 +164,19 @@ static const struct amdgpu_video_codecs bg_video_codecs_encode = {
333164 .codec_array = NULL ,
334165};
335166
167+ /* Yellow Carp*/
168+ static const struct amdgpu_video_codec_info yc_video_codecs_decode_array [] = {
169+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC , 4096 , 4906 , 52 )},
170+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC , 8192 , 4352 , 186 )},
171+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9 , 8192 , 4352 , 0 )},
172+ {codec_info_build (AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG , 4096 , 4096 , 0 )},
173+ };
174+
175+ static const struct amdgpu_video_codecs yc_video_codecs_decode = {
176+ .codec_count = ARRAY_SIZE (yc_video_codecs_decode_array ),
177+ .codec_array = yc_video_codecs_decode_array ,
178+ };
179+
336180static int nv_query_video_codecs (struct amdgpu_device * adev , bool encode ,
337181 const struct amdgpu_video_codecs * * codecs )
338182{
@@ -353,12 +197,17 @@ static int nv_query_video_codecs(struct amdgpu_device *adev, bool encode,
353197 case CHIP_NAVY_FLOUNDER :
354198 case CHIP_DIMGREY_CAVEFISH :
355199 case CHIP_VANGOGH :
356- case CHIP_YELLOW_CARP :
357200 if (encode )
358201 * codecs = & nv_video_codecs_encode ;
359202 else
360203 * codecs = & sc_video_codecs_decode ;
361204 return 0 ;
205+ case CHIP_YELLOW_CARP :
206+ if (encode )
207+ * codecs = & nv_video_codecs_encode ;
208+ else
209+ * codecs = & yc_video_codecs_decode ;
210+ return 0 ;
362211 case CHIP_BEIGE_GOBY :
363212 if (encode )
364213 * codecs = & bg_video_codecs_encode ;
@@ -1387,7 +1236,10 @@ static int nv_common_early_init(void *handle)
13871236 AMD_PG_SUPPORT_VCN |
13881237 AMD_PG_SUPPORT_VCN_DPG |
13891238 AMD_PG_SUPPORT_JPEG ;
1390- adev -> external_rev_id = adev -> rev_id + 0x01 ;
1239+ if (adev -> pdev -> device == 0x1681 )
1240+ adev -> external_rev_id = adev -> rev_id + 0x19 ;
1241+ else
1242+ adev -> external_rev_id = adev -> rev_id + 0x01 ;
13911243 break ;
13921244 default :
13931245 /* FIXME: not supported yet */
0 commit comments