]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/gpu/drm/amd/amdgpu/si.c
drm/amdgpu: update rev id for verde
[linux.git] / drivers / gpu / drm / amd / amdgpu / si.c
1 /*
2  * Copyright 2015 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  */
23
24 #include <linux/firmware.h>
25 #include <linux/slab.h>
26 #include <linux/module.h>
27 #include "drmP.h"
28 #include "amdgpu.h"
29 #include "amdgpu_atombios.h"
30 #include "amdgpu_ih.h"
31 #include "amdgpu_uvd.h"
32 #include "amdgpu_vce.h"
33 #include "atom.h"
34 #include "amdgpu_powerplay.h"
35 #include "si/sid.h"
36 #include "si_ih.h"
37 #include "gfx_v6_0.h"
38 #include "gmc_v6_0.h"
39 #include "si_dma.h"
40 #include "dce_v6_0.h"
41 #include "si.h"
42 #include "dce_virtual.h"
43
44 static const u32 tahiti_golden_registers[] =
45 {
46         0x17bc, 0x00000030, 0x00000011,
47         0x2684, 0x00010000, 0x00018208,
48         0x260c, 0xffffffff, 0x00000000,
49         0x260d, 0xf00fffff, 0x00000400,
50         0x260e, 0x0002021c, 0x00020200,
51         0x031e, 0x00000080, 0x00000000,
52         0x340c, 0x000000c0, 0x00800040,
53         0x360c, 0x000000c0, 0x00800040,
54         0x16ec, 0x000000f0, 0x00000070,
55         0x16f0, 0x00200000, 0x50100000,
56         0x1c0c, 0x31000311, 0x00000011,
57         0x09df, 0x00000003, 0x000007ff,
58         0x0903, 0x000007ff, 0x00000000,
59         0x2285, 0xf000001f, 0x00000007,
60         0x22c9, 0xffffffff, 0x00ffffff,
61         0x22c4, 0x0000ff0f, 0x00000000,
62         0xa293, 0x07ffffff, 0x4e000000,
63         0xa0d4, 0x3f3f3fff, 0x2a00126a,
64         0x000c, 0xffffffff, 0x0040,
65         0x000d, 0x00000040, 0x00004040,
66         0x2440, 0x07ffffff, 0x03000000,
67         0x23a2, 0x01ff1f3f, 0x00000000,
68         0x23a1, 0x01ff1f3f, 0x00000000,
69         0x2418, 0x0000007f, 0x00000020,
70         0x2542, 0x00010000, 0x00010000,
71         0x2b05, 0x00000200, 0x000002fb,
72         0x2b04, 0xffffffff, 0x0000543b,
73         0x2b03, 0xffffffff, 0xa9210876,
74         0x2234, 0xffffffff, 0x000fff40,
75         0x2235, 0x0000001f, 0x00000010,
76         0x0504, 0x20000000, 0x20fffed8,
77         0x0570, 0x000c0fc0, 0x000c0400,
78         0x052c, 0x0fffffff, 0xffffffff,
79         0x052d, 0x0fffffff, 0x0fffffff,
80         0x052e, 0x0fffffff, 0x0fffffff,
81         0x052f, 0x0fffffff, 0x0fffffff
82 };
83
84 static const u32 tahiti_golden_registers2[] =
85 {
86         0x0319, 0x00000001, 0x00000001
87 };
88
89 static const u32 tahiti_golden_rlc_registers[] =
90 {
91         0x263e, 0xffffffff, 0x12011003,
92         0x3109, 0xffffffff, 0x00601005,
93         0x311f, 0xffffffff, 0x10104040,
94         0x3122, 0xffffffff, 0x0100000a,
95         0x30c5, 0xffffffff, 0x00000800,
96         0x30c3, 0xffffffff, 0x800000f4,
97         0x3d2a, 0x00000008, 0x00000000
98 };
99
100 static const u32 pitcairn_golden_registers[] =
101 {
102         0x17bc, 0x00000030, 0x00000011,
103         0x2684, 0x00010000, 0x00018208,
104         0x260c, 0xffffffff, 0x00000000,
105         0x260d, 0xf00fffff, 0x00000400,
106         0x260e, 0x0002021c, 0x00020200,
107         0x031e, 0x00000080, 0x00000000,
108         0x340c, 0x000300c0, 0x00800040,
109         0x360c, 0x000300c0, 0x00800040,
110         0x16ec, 0x000000f0, 0x00000070,
111         0x16f0, 0x00200000, 0x50100000,
112         0x1c0c, 0x31000311, 0x00000011,
113         0x0ab9, 0x00073ffe, 0x000022a2,
114         0x0903, 0x000007ff, 0x00000000,
115         0x2285, 0xf000001f, 0x00000007,
116         0x22c9, 0xffffffff, 0x00ffffff,
117         0x22c4, 0x0000ff0f, 0x00000000,
118         0xa293, 0x07ffffff, 0x4e000000,
119         0xa0d4, 0x3f3f3fff, 0x2a00126a,
120         0x000c, 0xffffffff, 0x0040,
121         0x000d, 0x00000040, 0x00004040,
122         0x2440, 0x07ffffff, 0x03000000,
123         0x2418, 0x0000007f, 0x00000020,
124         0x2542, 0x00010000, 0x00010000,
125         0x2b05, 0x000003ff, 0x000000f7,
126         0x2b04, 0xffffffff, 0x00000000,
127         0x2b03, 0xffffffff, 0x32761054,
128         0x2235, 0x0000001f, 0x00000010,
129         0x0570, 0x000c0fc0, 0x000c0400,
130         0x052c, 0x0fffffff, 0xffffffff,
131         0x052d, 0x0fffffff, 0x0fffffff,
132         0x052e, 0x0fffffff, 0x0fffffff,
133         0x052f, 0x0fffffff, 0x0fffffff
134 };
135
136 static const u32 pitcairn_golden_rlc_registers[] =
137 {
138         0x263e, 0xffffffff, 0x12011003,
139         0x3109, 0xffffffff, 0x00601004,
140         0x311f, 0xffffffff, 0x10102020,
141         0x3122, 0xffffffff, 0x01000020,
142         0x30c5, 0xffffffff, 0x00000800,
143         0x30c3, 0xffffffff, 0x800000a4
144 };
145
146 static const u32 verde_pg_init[] =
147 {
148         0x0d4f, 0xffffffff, 0x40000,
149         0x0d4e, 0xffffffff, 0x200010ff,
150         0x0d4f, 0xffffffff, 0x0,
151         0x0d4f, 0xffffffff, 0x0,
152         0x0d4f, 0xffffffff, 0x0,
153         0x0d4f, 0xffffffff, 0x0,
154         0x0d4f, 0xffffffff, 0x0,
155         0x0d4f, 0xffffffff, 0x7007,
156         0x0d4e, 0xffffffff, 0x300010ff,
157         0x0d4f, 0xffffffff, 0x0,
158         0x0d4f, 0xffffffff, 0x0,
159         0x0d4f, 0xffffffff, 0x0,
160         0x0d4f, 0xffffffff, 0x0,
161         0x0d4f, 0xffffffff, 0x0,
162         0x0d4f, 0xffffffff, 0x400000,
163         0x0d4e, 0xffffffff, 0x100010ff,
164         0x0d4f, 0xffffffff, 0x0,
165         0x0d4f, 0xffffffff, 0x0,
166         0x0d4f, 0xffffffff, 0x0,
167         0x0d4f, 0xffffffff, 0x0,
168         0x0d4f, 0xffffffff, 0x0,
169         0x0d4f, 0xffffffff, 0x120200,
170         0x0d4e, 0xffffffff, 0x500010ff,
171         0x0d4f, 0xffffffff, 0x0,
172         0x0d4f, 0xffffffff, 0x0,
173         0x0d4f, 0xffffffff, 0x0,
174         0x0d4f, 0xffffffff, 0x0,
175         0x0d4f, 0xffffffff, 0x0,
176         0x0d4f, 0xffffffff, 0x1e1e16,
177         0x0d4e, 0xffffffff, 0x600010ff,
178         0x0d4f, 0xffffffff, 0x0,
179         0x0d4f, 0xffffffff, 0x0,
180         0x0d4f, 0xffffffff, 0x0,
181         0x0d4f, 0xffffffff, 0x0,
182         0x0d4f, 0xffffffff, 0x0,
183         0x0d4f, 0xffffffff, 0x171f1e,
184         0x0d4e, 0xffffffff, 0x700010ff,
185         0x0d4f, 0xffffffff, 0x0,
186         0x0d4f, 0xffffffff, 0x0,
187         0x0d4f, 0xffffffff, 0x0,
188         0x0d4f, 0xffffffff, 0x0,
189         0x0d4f, 0xffffffff, 0x0,
190         0x0d4f, 0xffffffff, 0x0,
191         0x0d4e, 0xffffffff, 0x9ff,
192         0x0d40, 0xffffffff, 0x0,
193         0x0d41, 0xffffffff, 0x10000800,
194         0x0d41, 0xffffffff, 0xf,
195         0x0d41, 0xffffffff, 0xf,
196         0x0d40, 0xffffffff, 0x4,
197         0x0d41, 0xffffffff, 0x1000051e,
198         0x0d41, 0xffffffff, 0xffff,
199         0x0d41, 0xffffffff, 0xffff,
200         0x0d40, 0xffffffff, 0x8,
201         0x0d41, 0xffffffff, 0x80500,
202         0x0d40, 0xffffffff, 0x12,
203         0x0d41, 0xffffffff, 0x9050c,
204         0x0d40, 0xffffffff, 0x1d,
205         0x0d41, 0xffffffff, 0xb052c,
206         0x0d40, 0xffffffff, 0x2a,
207         0x0d41, 0xffffffff, 0x1053e,
208         0x0d40, 0xffffffff, 0x2d,
209         0x0d41, 0xffffffff, 0x10546,
210         0x0d40, 0xffffffff, 0x30,
211         0x0d41, 0xffffffff, 0xa054e,
212         0x0d40, 0xffffffff, 0x3c,
213         0x0d41, 0xffffffff, 0x1055f,
214         0x0d40, 0xffffffff, 0x3f,
215         0x0d41, 0xffffffff, 0x10567,
216         0x0d40, 0xffffffff, 0x42,
217         0x0d41, 0xffffffff, 0x1056f,
218         0x0d40, 0xffffffff, 0x45,
219         0x0d41, 0xffffffff, 0x10572,
220         0x0d40, 0xffffffff, 0x48,
221         0x0d41, 0xffffffff, 0x20575,
222         0x0d40, 0xffffffff, 0x4c,
223         0x0d41, 0xffffffff, 0x190801,
224         0x0d40, 0xffffffff, 0x67,
225         0x0d41, 0xffffffff, 0x1082a,
226         0x0d40, 0xffffffff, 0x6a,
227         0x0d41, 0xffffffff, 0x1b082d,
228         0x0d40, 0xffffffff, 0x87,
229         0x0d41, 0xffffffff, 0x310851,
230         0x0d40, 0xffffffff, 0xba,
231         0x0d41, 0xffffffff, 0x891,
232         0x0d40, 0xffffffff, 0xbc,
233         0x0d41, 0xffffffff, 0x893,
234         0x0d40, 0xffffffff, 0xbe,
235         0x0d41, 0xffffffff, 0x20895,
236         0x0d40, 0xffffffff, 0xc2,
237         0x0d41, 0xffffffff, 0x20899,
238         0x0d40, 0xffffffff, 0xc6,
239         0x0d41, 0xffffffff, 0x2089d,
240         0x0d40, 0xffffffff, 0xca,
241         0x0d41, 0xffffffff, 0x8a1,
242         0x0d40, 0xffffffff, 0xcc,
243         0x0d41, 0xffffffff, 0x8a3,
244         0x0d40, 0xffffffff, 0xce,
245         0x0d41, 0xffffffff, 0x308a5,
246         0x0d40, 0xffffffff, 0xd3,
247         0x0d41, 0xffffffff, 0x6d08cd,
248         0x0d40, 0xffffffff, 0x142,
249         0x0d41, 0xffffffff, 0x2000095a,
250         0x0d41, 0xffffffff, 0x1,
251         0x0d40, 0xffffffff, 0x144,
252         0x0d41, 0xffffffff, 0x301f095b,
253         0x0d40, 0xffffffff, 0x165,
254         0x0d41, 0xffffffff, 0xc094d,
255         0x0d40, 0xffffffff, 0x173,
256         0x0d41, 0xffffffff, 0xf096d,
257         0x0d40, 0xffffffff, 0x184,
258         0x0d41, 0xffffffff, 0x15097f,
259         0x0d40, 0xffffffff, 0x19b,
260         0x0d41, 0xffffffff, 0xc0998,
261         0x0d40, 0xffffffff, 0x1a9,
262         0x0d41, 0xffffffff, 0x409a7,
263         0x0d40, 0xffffffff, 0x1af,
264         0x0d41, 0xffffffff, 0xcdc,
265         0x0d40, 0xffffffff, 0x1b1,
266         0x0d41, 0xffffffff, 0x800,
267         0x0d42, 0xffffffff, 0x6c9b2000,
268         0x0d44, 0xfc00, 0x2000,
269         0x0d51, 0xffffffff, 0xfc0,
270         0x0a35, 0x00000100, 0x100
271 };
272
273 static const u32 verde_golden_rlc_registers[] =
274 {
275         0x263e, 0xffffffff, 0x02010002,
276         0x3109, 0xffffffff, 0x033f1005,
277         0x311f, 0xffffffff, 0x10808020,
278         0x3122, 0xffffffff, 0x00800008,
279         0x30c5, 0xffffffff, 0x00001000,
280         0x30c3, 0xffffffff, 0x80010014
281 };
282
283 static const u32 verde_golden_registers[] =
284 {
285         0x17bc, 0x00000030, 0x00000011,
286         0x2684, 0x00010000, 0x00018208,
287         0x260c, 0xffffffff, 0x00000000,
288         0x260d, 0xf00fffff, 0x00000400,
289         0x260e, 0x0002021c, 0x00020200,
290         0x031e, 0x00000080, 0x00000000,
291         0x340c, 0x000300c0, 0x00800040,
292         0x360c, 0x000300c0, 0x00800040,
293         0x16ec, 0x000000f0, 0x00000070,
294         0x16f0, 0x00200000, 0x50100000,
295         0x1c0c, 0x31000311, 0x00000011,
296         0x0ab9, 0x00073ffe, 0x000022a2,
297         0x0903, 0x000007ff, 0x00000000,
298         0x2285, 0xf000001f, 0x00000007,
299         0x22c9, 0xffffffff, 0x00ffffff,
300         0x22c4, 0x0000ff0f, 0x00000000,
301         0xa293, 0x07ffffff, 0x4e000000,
302         0xa0d4, 0x3f3f3fff, 0x0000124a,
303         0x000c, 0xffffffff, 0x0040,
304         0x000d, 0x00000040, 0x00004040,
305         0x2440, 0x07ffffff, 0x03000000,
306         0x23a2, 0x01ff1f3f, 0x00000000,
307         0x23a1, 0x01ff1f3f, 0x00000000,
308         0x2418, 0x0000007f, 0x00000020,
309         0x2542, 0x00010000, 0x00010000,
310         0x2b05, 0x000003ff, 0x00000003,
311         0x2b04, 0xffffffff, 0x00000000,
312         0x2b03, 0xffffffff, 0x00001032,
313         0x2235, 0x0000001f, 0x00000010,
314         0x0570, 0x000c0fc0, 0x000c0400,
315         0x052c, 0x0fffffff, 0xffffffff,
316         0x052d, 0x0fffffff, 0x0fffffff,
317         0x052e, 0x0fffffff, 0x0fffffff,
318         0x052f, 0x0fffffff, 0x0fffffff
319 };
320
321 static const u32 oland_golden_registers[] =
322 {
323         0x17bc, 0x00000030, 0x00000011,
324         0x2684, 0x00010000, 0x00018208,
325         0x260c, 0xffffffff, 0x00000000,
326         0x260d, 0xf00fffff, 0x00000400,
327         0x260e, 0x0002021c, 0x00020200,
328         0x031e, 0x00000080, 0x00000000,
329         0x340c, 0x000300c0, 0x00800040,
330         0x360c, 0x000300c0, 0x00800040,
331         0x16ec, 0x000000f0, 0x00000070,
332         0x16f0, 0x00200000, 0x50100000,
333         0x1c0c, 0x31000311, 0x00000011,
334         0x0ab9, 0x00073ffe, 0x000022a2,
335         0x0903, 0x000007ff, 0x00000000,
336         0x2285, 0xf000001f, 0x00000007,
337         0x22c9, 0xffffffff, 0x00ffffff,
338         0x22c4, 0x0000ff0f, 0x00000000,
339         0xa293, 0x07ffffff, 0x4e000000,
340         0xa0d4, 0x3f3f3fff, 0x00000082,
341         0x000c, 0xffffffff, 0x0040,
342         0x000d, 0x00000040, 0x00004040,
343         0x2440, 0x07ffffff, 0x03000000,
344         0x2418, 0x0000007f, 0x00000020,
345         0x2542, 0x00010000, 0x00010000,
346         0x2b05, 0x000003ff, 0x000000f3,
347         0x2b04, 0xffffffff, 0x00000000,
348         0x2b03, 0xffffffff, 0x00003210,
349         0x2235, 0x0000001f, 0x00000010,
350         0x0570, 0x000c0fc0, 0x000c0400,
351         0x052c, 0x0fffffff, 0xffffffff,
352         0x052d, 0x0fffffff, 0x0fffffff,
353         0x052e, 0x0fffffff, 0x0fffffff,
354         0x052f, 0x0fffffff, 0x0fffffff
355 };
356
357 static const u32 oland_golden_rlc_registers[] =
358 {
359         0x263e, 0xffffffff, 0x02010002,
360         0x3109, 0xffffffff, 0x00601005,
361         0x311f, 0xffffffff, 0x10104040,
362         0x3122, 0xffffffff, 0x0100000a,
363         0x30c5, 0xffffffff, 0x00000800,
364         0x30c3, 0xffffffff, 0x800000f4
365 };
366
367 static const u32 hainan_golden_registers[] =
368 {
369         0x17bc, 0x00000030, 0x00000011,
370         0x2684, 0x00010000, 0x00018208,
371         0x260c, 0xffffffff, 0x00000000,
372         0x260d, 0xf00fffff, 0x00000400,
373         0x260e, 0x0002021c, 0x00020200,
374         0x031e, 0x00000080, 0x00000000,
375         0x3430, 0xff000fff, 0x00000100,
376         0x340c, 0x000300c0, 0x00800040,
377         0x3630, 0xff000fff, 0x00000100,
378         0x360c, 0x000300c0, 0x00800040,
379         0x16ec, 0x000000f0, 0x00000070,
380         0x16f0, 0x00200000, 0x50100000,
381         0x1c0c, 0x31000311, 0x00000011,
382         0x0ab9, 0x00073ffe, 0x000022a2,
383         0x0903, 0x000007ff, 0x00000000,
384         0x2285, 0xf000001f, 0x00000007,
385         0x22c9, 0xffffffff, 0x00ffffff,
386         0x22c4, 0x0000ff0f, 0x00000000,
387         0xa293, 0x07ffffff, 0x4e000000,
388         0xa0d4, 0x3f3f3fff, 0x00000000,
389         0x000c, 0xffffffff, 0x0040,
390         0x000d, 0x00000040, 0x00004040,
391         0x2440, 0x03e00000, 0x03600000,
392         0x2418, 0x0000007f, 0x00000020,
393         0x2542, 0x00010000, 0x00010000,
394         0x2b05, 0x000003ff, 0x000000f1,
395         0x2b04, 0xffffffff, 0x00000000,
396         0x2b03, 0xffffffff, 0x00003210,
397         0x2235, 0x0000001f, 0x00000010,
398         0x0570, 0x000c0fc0, 0x000c0400,
399         0x052c, 0x0fffffff, 0xffffffff,
400         0x052d, 0x0fffffff, 0x0fffffff,
401         0x052e, 0x0fffffff, 0x0fffffff,
402         0x052f, 0x0fffffff, 0x0fffffff
403 };
404
405 static const u32 hainan_golden_registers2[] =
406 {
407         0x263e, 0xffffffff, 0x2011003
408 };
409
410 static const u32 tahiti_mgcg_cgcg_init[] =
411 {
412         0x3100, 0xffffffff, 0xfffffffc,
413         0x200b, 0xffffffff, 0xe0000000,
414         0x2698, 0xffffffff, 0x00000100,
415         0x24a9, 0xffffffff, 0x00000100,
416         0x3059, 0xffffffff, 0x00000100,
417         0x25dd, 0xffffffff, 0x00000100,
418         0x2261, 0xffffffff, 0x06000100,
419         0x2286, 0xffffffff, 0x00000100,
420         0x24a8, 0xffffffff, 0x00000100,
421         0x30e0, 0xffffffff, 0x00000100,
422         0x22ca, 0xffffffff, 0x00000100,
423         0x2451, 0xffffffff, 0x00000100,
424         0x2362, 0xffffffff, 0x00000100,
425         0x2363, 0xffffffff, 0x00000100,
426         0x240c, 0xffffffff, 0x00000100,
427         0x240d, 0xffffffff, 0x00000100,
428         0x240e, 0xffffffff, 0x00000100,
429         0x240f, 0xffffffff, 0x00000100,
430         0x2b60, 0xffffffff, 0x00000100,
431         0x2b15, 0xffffffff, 0x00000100,
432         0x225f, 0xffffffff, 0x06000100,
433         0x261a, 0xffffffff, 0x00000100,
434         0x2544, 0xffffffff, 0x00000100,
435         0x2bc1, 0xffffffff, 0x00000100,
436         0x2b81, 0xffffffff, 0x00000100,
437         0x2527, 0xffffffff, 0x00000100,
438         0x200b, 0xffffffff, 0xe0000000,
439         0x2458, 0xffffffff, 0x00010000,
440         0x2459, 0xffffffff, 0x00030002,
441         0x245a, 0xffffffff, 0x00040007,
442         0x245b, 0xffffffff, 0x00060005,
443         0x245c, 0xffffffff, 0x00090008,
444         0x245d, 0xffffffff, 0x00020001,
445         0x245e, 0xffffffff, 0x00040003,
446         0x245f, 0xffffffff, 0x00000007,
447         0x2460, 0xffffffff, 0x00060005,
448         0x2461, 0xffffffff, 0x00090008,
449         0x2462, 0xffffffff, 0x00030002,
450         0x2463, 0xffffffff, 0x00050004,
451         0x2464, 0xffffffff, 0x00000008,
452         0x2465, 0xffffffff, 0x00070006,
453         0x2466, 0xffffffff, 0x000a0009,
454         0x2467, 0xffffffff, 0x00040003,
455         0x2468, 0xffffffff, 0x00060005,
456         0x2469, 0xffffffff, 0x00000009,
457         0x246a, 0xffffffff, 0x00080007,
458         0x246b, 0xffffffff, 0x000b000a,
459         0x246c, 0xffffffff, 0x00050004,
460         0x246d, 0xffffffff, 0x00070006,
461         0x246e, 0xffffffff, 0x0008000b,
462         0x246f, 0xffffffff, 0x000a0009,
463         0x2470, 0xffffffff, 0x000d000c,
464         0x2471, 0xffffffff, 0x00060005,
465         0x2472, 0xffffffff, 0x00080007,
466         0x2473, 0xffffffff, 0x0000000b,
467         0x2474, 0xffffffff, 0x000a0009,
468         0x2475, 0xffffffff, 0x000d000c,
469         0x2476, 0xffffffff, 0x00070006,
470         0x2477, 0xffffffff, 0x00090008,
471         0x2478, 0xffffffff, 0x0000000c,
472         0x2479, 0xffffffff, 0x000b000a,
473         0x247a, 0xffffffff, 0x000e000d,
474         0x247b, 0xffffffff, 0x00080007,
475         0x247c, 0xffffffff, 0x000a0009,
476         0x247d, 0xffffffff, 0x0000000d,
477         0x247e, 0xffffffff, 0x000c000b,
478         0x247f, 0xffffffff, 0x000f000e,
479         0x2480, 0xffffffff, 0x00090008,
480         0x2481, 0xffffffff, 0x000b000a,
481         0x2482, 0xffffffff, 0x000c000f,
482         0x2483, 0xffffffff, 0x000e000d,
483         0x2484, 0xffffffff, 0x00110010,
484         0x2485, 0xffffffff, 0x000a0009,
485         0x2486, 0xffffffff, 0x000c000b,
486         0x2487, 0xffffffff, 0x0000000f,
487         0x2488, 0xffffffff, 0x000e000d,
488         0x2489, 0xffffffff, 0x00110010,
489         0x248a, 0xffffffff, 0x000b000a,
490         0x248b, 0xffffffff, 0x000d000c,
491         0x248c, 0xffffffff, 0x00000010,
492         0x248d, 0xffffffff, 0x000f000e,
493         0x248e, 0xffffffff, 0x00120011,
494         0x248f, 0xffffffff, 0x000c000b,
495         0x2490, 0xffffffff, 0x000e000d,
496         0x2491, 0xffffffff, 0x00000011,
497         0x2492, 0xffffffff, 0x0010000f,
498         0x2493, 0xffffffff, 0x00130012,
499         0x2494, 0xffffffff, 0x000d000c,
500         0x2495, 0xffffffff, 0x000f000e,
501         0x2496, 0xffffffff, 0x00100013,
502         0x2497, 0xffffffff, 0x00120011,
503         0x2498, 0xffffffff, 0x00150014,
504         0x2499, 0xffffffff, 0x000e000d,
505         0x249a, 0xffffffff, 0x0010000f,
506         0x249b, 0xffffffff, 0x00000013,
507         0x249c, 0xffffffff, 0x00120011,
508         0x249d, 0xffffffff, 0x00150014,
509         0x249e, 0xffffffff, 0x000f000e,
510         0x249f, 0xffffffff, 0x00110010,
511         0x24a0, 0xffffffff, 0x00000014,
512         0x24a1, 0xffffffff, 0x00130012,
513         0x24a2, 0xffffffff, 0x00160015,
514         0x24a3, 0xffffffff, 0x0010000f,
515         0x24a4, 0xffffffff, 0x00120011,
516         0x24a5, 0xffffffff, 0x00000015,
517         0x24a6, 0xffffffff, 0x00140013,
518         0x24a7, 0xffffffff, 0x00170016,
519         0x2454, 0xffffffff, 0x96940200,
520         0x21c2, 0xffffffff, 0x00900100,
521         0x311e, 0xffffffff, 0x00000080,
522         0x3101, 0xffffffff, 0x0020003f,
523         0x000c, 0xffffffff, 0x0000001c,
524         0x000d, 0x000f0000, 0x000f0000,
525         0x0583, 0xffffffff, 0x00000100,
526         0x0409, 0xffffffff, 0x00000100,
527         0x040b, 0x00000101, 0x00000000,
528         0x082a, 0xffffffff, 0x00000104,
529         0x0993, 0x000c0000, 0x000c0000,
530         0x0992, 0x000c0000, 0x000c0000,
531         0x1579, 0xff000fff, 0x00000100,
532         0x157a, 0x00000001, 0x00000001,
533         0x0bd4, 0x00000001, 0x00000001,
534         0x0c33, 0xc0000fff, 0x00000104,
535         0x3079, 0x00000001, 0x00000001,
536         0x3430, 0xfffffff0, 0x00000100,
537         0x3630, 0xfffffff0, 0x00000100
538 };
539 static const u32 pitcairn_mgcg_cgcg_init[] =
540 {
541         0x3100, 0xffffffff, 0xfffffffc,
542         0x200b, 0xffffffff, 0xe0000000,
543         0x2698, 0xffffffff, 0x00000100,
544         0x24a9, 0xffffffff, 0x00000100,
545         0x3059, 0xffffffff, 0x00000100,
546         0x25dd, 0xffffffff, 0x00000100,
547         0x2261, 0xffffffff, 0x06000100,
548         0x2286, 0xffffffff, 0x00000100,
549         0x24a8, 0xffffffff, 0x00000100,
550         0x30e0, 0xffffffff, 0x00000100,
551         0x22ca, 0xffffffff, 0x00000100,
552         0x2451, 0xffffffff, 0x00000100,
553         0x2362, 0xffffffff, 0x00000100,
554         0x2363, 0xffffffff, 0x00000100,
555         0x240c, 0xffffffff, 0x00000100,
556         0x240d, 0xffffffff, 0x00000100,
557         0x240e, 0xffffffff, 0x00000100,
558         0x240f, 0xffffffff, 0x00000100,
559         0x2b60, 0xffffffff, 0x00000100,
560         0x2b15, 0xffffffff, 0x00000100,
561         0x225f, 0xffffffff, 0x06000100,
562         0x261a, 0xffffffff, 0x00000100,
563         0x2544, 0xffffffff, 0x00000100,
564         0x2bc1, 0xffffffff, 0x00000100,
565         0x2b81, 0xffffffff, 0x00000100,
566         0x2527, 0xffffffff, 0x00000100,
567         0x200b, 0xffffffff, 0xe0000000,
568         0x2458, 0xffffffff, 0x00010000,
569         0x2459, 0xffffffff, 0x00030002,
570         0x245a, 0xffffffff, 0x00040007,
571         0x245b, 0xffffffff, 0x00060005,
572         0x245c, 0xffffffff, 0x00090008,
573         0x245d, 0xffffffff, 0x00020001,
574         0x245e, 0xffffffff, 0x00040003,
575         0x245f, 0xffffffff, 0x00000007,
576         0x2460, 0xffffffff, 0x00060005,
577         0x2461, 0xffffffff, 0x00090008,
578         0x2462, 0xffffffff, 0x00030002,
579         0x2463, 0xffffffff, 0x00050004,
580         0x2464, 0xffffffff, 0x00000008,
581         0x2465, 0xffffffff, 0x00070006,
582         0x2466, 0xffffffff, 0x000a0009,
583         0x2467, 0xffffffff, 0x00040003,
584         0x2468, 0xffffffff, 0x00060005,
585         0x2469, 0xffffffff, 0x00000009,
586         0x246a, 0xffffffff, 0x00080007,
587         0x246b, 0xffffffff, 0x000b000a,
588         0x246c, 0xffffffff, 0x00050004,
589         0x246d, 0xffffffff, 0x00070006,
590         0x246e, 0xffffffff, 0x0008000b,
591         0x246f, 0xffffffff, 0x000a0009,
592         0x2470, 0xffffffff, 0x000d000c,
593         0x2480, 0xffffffff, 0x00090008,
594         0x2481, 0xffffffff, 0x000b000a,
595         0x2482, 0xffffffff, 0x000c000f,
596         0x2483, 0xffffffff, 0x000e000d,
597         0x2484, 0xffffffff, 0x00110010,
598         0x2485, 0xffffffff, 0x000a0009,
599         0x2486, 0xffffffff, 0x000c000b,
600         0x2487, 0xffffffff, 0x0000000f,
601         0x2488, 0xffffffff, 0x000e000d,
602         0x2489, 0xffffffff, 0x00110010,
603         0x248a, 0xffffffff, 0x000b000a,
604         0x248b, 0xffffffff, 0x000d000c,
605         0x248c, 0xffffffff, 0x00000010,
606         0x248d, 0xffffffff, 0x000f000e,
607         0x248e, 0xffffffff, 0x00120011,
608         0x248f, 0xffffffff, 0x000c000b,
609         0x2490, 0xffffffff, 0x000e000d,
610         0x2491, 0xffffffff, 0x00000011,
611         0x2492, 0xffffffff, 0x0010000f,
612         0x2493, 0xffffffff, 0x00130012,
613         0x2494, 0xffffffff, 0x000d000c,
614         0x2495, 0xffffffff, 0x000f000e,
615         0x2496, 0xffffffff, 0x00100013,
616         0x2497, 0xffffffff, 0x00120011,
617         0x2498, 0xffffffff, 0x00150014,
618         0x2454, 0xffffffff, 0x96940200,
619         0x21c2, 0xffffffff, 0x00900100,
620         0x311e, 0xffffffff, 0x00000080,
621         0x3101, 0xffffffff, 0x0020003f,
622         0x000c, 0xffffffff, 0x0000001c,
623         0x000d, 0x000f0000, 0x000f0000,
624         0x0583, 0xffffffff, 0x00000100,
625         0x0409, 0xffffffff, 0x00000100,
626         0x040b, 0x00000101, 0x00000000,
627         0x082a, 0xffffffff, 0x00000104,
628         0x1579, 0xff000fff, 0x00000100,
629         0x157a, 0x00000001, 0x00000001,
630         0x0bd4, 0x00000001, 0x00000001,
631         0x0c33, 0xc0000fff, 0x00000104,
632         0x3079, 0x00000001, 0x00000001,
633         0x3430, 0xfffffff0, 0x00000100,
634         0x3630, 0xfffffff0, 0x00000100
635 };
636 static const u32 verde_mgcg_cgcg_init[] =
637 {
638         0x3100, 0xffffffff, 0xfffffffc,
639         0x200b, 0xffffffff, 0xe0000000,
640         0x2698, 0xffffffff, 0x00000100,
641         0x24a9, 0xffffffff, 0x00000100,
642         0x3059, 0xffffffff, 0x00000100,
643         0x25dd, 0xffffffff, 0x00000100,
644         0x2261, 0xffffffff, 0x06000100,
645         0x2286, 0xffffffff, 0x00000100,
646         0x24a8, 0xffffffff, 0x00000100,
647         0x30e0, 0xffffffff, 0x00000100,
648         0x22ca, 0xffffffff, 0x00000100,
649         0x2451, 0xffffffff, 0x00000100,
650         0x2362, 0xffffffff, 0x00000100,
651         0x2363, 0xffffffff, 0x00000100,
652         0x240c, 0xffffffff, 0x00000100,
653         0x240d, 0xffffffff, 0x00000100,
654         0x240e, 0xffffffff, 0x00000100,
655         0x240f, 0xffffffff, 0x00000100,
656         0x2b60, 0xffffffff, 0x00000100,
657         0x2b15, 0xffffffff, 0x00000100,
658         0x225f, 0xffffffff, 0x06000100,
659         0x261a, 0xffffffff, 0x00000100,
660         0x2544, 0xffffffff, 0x00000100,
661         0x2bc1, 0xffffffff, 0x00000100,
662         0x2b81, 0xffffffff, 0x00000100,
663         0x2527, 0xffffffff, 0x00000100,
664         0x200b, 0xffffffff, 0xe0000000,
665         0x2458, 0xffffffff, 0x00010000,
666         0x2459, 0xffffffff, 0x00030002,
667         0x245a, 0xffffffff, 0x00040007,
668         0x245b, 0xffffffff, 0x00060005,
669         0x245c, 0xffffffff, 0x00090008,
670         0x245d, 0xffffffff, 0x00020001,
671         0x245e, 0xffffffff, 0x00040003,
672         0x245f, 0xffffffff, 0x00000007,
673         0x2460, 0xffffffff, 0x00060005,
674         0x2461, 0xffffffff, 0x00090008,
675         0x2462, 0xffffffff, 0x00030002,
676         0x2463, 0xffffffff, 0x00050004,
677         0x2464, 0xffffffff, 0x00000008,
678         0x2465, 0xffffffff, 0x00070006,
679         0x2466, 0xffffffff, 0x000a0009,
680         0x2467, 0xffffffff, 0x00040003,
681         0x2468, 0xffffffff, 0x00060005,
682         0x2469, 0xffffffff, 0x00000009,
683         0x246a, 0xffffffff, 0x00080007,
684         0x246b, 0xffffffff, 0x000b000a,
685         0x246c, 0xffffffff, 0x00050004,
686         0x246d, 0xffffffff, 0x00070006,
687         0x246e, 0xffffffff, 0x0008000b,
688         0x246f, 0xffffffff, 0x000a0009,
689         0x2470, 0xffffffff, 0x000d000c,
690         0x2480, 0xffffffff, 0x00090008,
691         0x2481, 0xffffffff, 0x000b000a,
692         0x2482, 0xffffffff, 0x000c000f,
693         0x2483, 0xffffffff, 0x000e000d,
694         0x2484, 0xffffffff, 0x00110010,
695         0x2485, 0xffffffff, 0x000a0009,
696         0x2486, 0xffffffff, 0x000c000b,
697         0x2487, 0xffffffff, 0x0000000f,
698         0x2488, 0xffffffff, 0x000e000d,
699         0x2489, 0xffffffff, 0x00110010,
700         0x248a, 0xffffffff, 0x000b000a,
701         0x248b, 0xffffffff, 0x000d000c,
702         0x248c, 0xffffffff, 0x00000010,
703         0x248d, 0xffffffff, 0x000f000e,
704         0x248e, 0xffffffff, 0x00120011,
705         0x248f, 0xffffffff, 0x000c000b,
706         0x2490, 0xffffffff, 0x000e000d,
707         0x2491, 0xffffffff, 0x00000011,
708         0x2492, 0xffffffff, 0x0010000f,
709         0x2493, 0xffffffff, 0x00130012,
710         0x2494, 0xffffffff, 0x000d000c,
711         0x2495, 0xffffffff, 0x000f000e,
712         0x2496, 0xffffffff, 0x00100013,
713         0x2497, 0xffffffff, 0x00120011,
714         0x2498, 0xffffffff, 0x00150014,
715         0x2454, 0xffffffff, 0x96940200,
716         0x21c2, 0xffffffff, 0x00900100,
717         0x311e, 0xffffffff, 0x00000080,
718         0x3101, 0xffffffff, 0x0020003f,
719         0x000c, 0xffffffff, 0x0000001c,
720         0x000d, 0x000f0000, 0x000f0000,
721         0x0583, 0xffffffff, 0x00000100,
722         0x0409, 0xffffffff, 0x00000100,
723         0x040b, 0x00000101, 0x00000000,
724         0x082a, 0xffffffff, 0x00000104,
725         0x0993, 0x000c0000, 0x000c0000,
726         0x0992, 0x000c0000, 0x000c0000,
727         0x1579, 0xff000fff, 0x00000100,
728         0x157a, 0x00000001, 0x00000001,
729         0x0bd4, 0x00000001, 0x00000001,
730         0x0c33, 0xc0000fff, 0x00000104,
731         0x3079, 0x00000001, 0x00000001,
732         0x3430, 0xfffffff0, 0x00000100,
733         0x3630, 0xfffffff0, 0x00000100
734 };
735 static const u32 oland_mgcg_cgcg_init[] =
736 {
737         0x3100, 0xffffffff, 0xfffffffc,
738         0x200b, 0xffffffff, 0xe0000000,
739         0x2698, 0xffffffff, 0x00000100,
740         0x24a9, 0xffffffff, 0x00000100,
741         0x3059, 0xffffffff, 0x00000100,
742         0x25dd, 0xffffffff, 0x00000100,
743         0x2261, 0xffffffff, 0x06000100,
744         0x2286, 0xffffffff, 0x00000100,
745         0x24a8, 0xffffffff, 0x00000100,
746         0x30e0, 0xffffffff, 0x00000100,
747         0x22ca, 0xffffffff, 0x00000100,
748         0x2451, 0xffffffff, 0x00000100,
749         0x2362, 0xffffffff, 0x00000100,
750         0x2363, 0xffffffff, 0x00000100,
751         0x240c, 0xffffffff, 0x00000100,
752         0x240d, 0xffffffff, 0x00000100,
753         0x240e, 0xffffffff, 0x00000100,
754         0x240f, 0xffffffff, 0x00000100,
755         0x2b60, 0xffffffff, 0x00000100,
756         0x2b15, 0xffffffff, 0x00000100,
757         0x225f, 0xffffffff, 0x06000100,
758         0x261a, 0xffffffff, 0x00000100,
759         0x2544, 0xffffffff, 0x00000100,
760         0x2bc1, 0xffffffff, 0x00000100,
761         0x2b81, 0xffffffff, 0x00000100,
762         0x2527, 0xffffffff, 0x00000100,
763         0x200b, 0xffffffff, 0xe0000000,
764         0x2458, 0xffffffff, 0x00010000,
765         0x2459, 0xffffffff, 0x00030002,
766         0x245a, 0xffffffff, 0x00040007,
767         0x245b, 0xffffffff, 0x00060005,
768         0x245c, 0xffffffff, 0x00090008,
769         0x245d, 0xffffffff, 0x00020001,
770         0x245e, 0xffffffff, 0x00040003,
771         0x245f, 0xffffffff, 0x00000007,
772         0x2460, 0xffffffff, 0x00060005,
773         0x2461, 0xffffffff, 0x00090008,
774         0x2462, 0xffffffff, 0x00030002,
775         0x2463, 0xffffffff, 0x00050004,
776         0x2464, 0xffffffff, 0x00000008,
777         0x2465, 0xffffffff, 0x00070006,
778         0x2466, 0xffffffff, 0x000a0009,
779         0x2467, 0xffffffff, 0x00040003,
780         0x2468, 0xffffffff, 0x00060005,
781         0x2469, 0xffffffff, 0x00000009,
782         0x246a, 0xffffffff, 0x00080007,
783         0x246b, 0xffffffff, 0x000b000a,
784         0x246c, 0xffffffff, 0x00050004,
785         0x246d, 0xffffffff, 0x00070006,
786         0x246e, 0xffffffff, 0x0008000b,
787         0x246f, 0xffffffff, 0x000a0009,
788         0x2470, 0xffffffff, 0x000d000c,
789         0x2471, 0xffffffff, 0x00060005,
790         0x2472, 0xffffffff, 0x00080007,
791         0x2473, 0xffffffff, 0x0000000b,
792         0x2474, 0xffffffff, 0x000a0009,
793         0x2475, 0xffffffff, 0x000d000c,
794         0x2454, 0xffffffff, 0x96940200,
795         0x21c2, 0xffffffff, 0x00900100,
796         0x311e, 0xffffffff, 0x00000080,
797         0x3101, 0xffffffff, 0x0020003f,
798         0x000c, 0xffffffff, 0x0000001c,
799         0x000d, 0x000f0000, 0x000f0000,
800         0x0583, 0xffffffff, 0x00000100,
801         0x0409, 0xffffffff, 0x00000100,
802         0x040b, 0x00000101, 0x00000000,
803         0x082a, 0xffffffff, 0x00000104,
804         0x0993, 0x000c0000, 0x000c0000,
805         0x0992, 0x000c0000, 0x000c0000,
806         0x1579, 0xff000fff, 0x00000100,
807         0x157a, 0x00000001, 0x00000001,
808         0x0bd4, 0x00000001, 0x00000001,
809         0x0c33, 0xc0000fff, 0x00000104,
810         0x3079, 0x00000001, 0x00000001,
811         0x3430, 0xfffffff0, 0x00000100,
812         0x3630, 0xfffffff0, 0x00000100
813 };
814 static const u32 hainan_mgcg_cgcg_init[] =
815 {
816         0x3100, 0xffffffff, 0xfffffffc,
817         0x200b, 0xffffffff, 0xe0000000,
818         0x2698, 0xffffffff, 0x00000100,
819         0x24a9, 0xffffffff, 0x00000100,
820         0x3059, 0xffffffff, 0x00000100,
821         0x25dd, 0xffffffff, 0x00000100,
822         0x2261, 0xffffffff, 0x06000100,
823         0x2286, 0xffffffff, 0x00000100,
824         0x24a8, 0xffffffff, 0x00000100,
825         0x30e0, 0xffffffff, 0x00000100,
826         0x22ca, 0xffffffff, 0x00000100,
827         0x2451, 0xffffffff, 0x00000100,
828         0x2362, 0xffffffff, 0x00000100,
829         0x2363, 0xffffffff, 0x00000100,
830         0x240c, 0xffffffff, 0x00000100,
831         0x240d, 0xffffffff, 0x00000100,
832         0x240e, 0xffffffff, 0x00000100,
833         0x240f, 0xffffffff, 0x00000100,
834         0x2b60, 0xffffffff, 0x00000100,
835         0x2b15, 0xffffffff, 0x00000100,
836         0x225f, 0xffffffff, 0x06000100,
837         0x261a, 0xffffffff, 0x00000100,
838         0x2544, 0xffffffff, 0x00000100,
839         0x2bc1, 0xffffffff, 0x00000100,
840         0x2b81, 0xffffffff, 0x00000100,
841         0x2527, 0xffffffff, 0x00000100,
842         0x200b, 0xffffffff, 0xe0000000,
843         0x2458, 0xffffffff, 0x00010000,
844         0x2459, 0xffffffff, 0x00030002,
845         0x245a, 0xffffffff, 0x00040007,
846         0x245b, 0xffffffff, 0x00060005,
847         0x245c, 0xffffffff, 0x00090008,
848         0x245d, 0xffffffff, 0x00020001,
849         0x245e, 0xffffffff, 0x00040003,
850         0x245f, 0xffffffff, 0x00000007,
851         0x2460, 0xffffffff, 0x00060005,
852         0x2461, 0xffffffff, 0x00090008,
853         0x2462, 0xffffffff, 0x00030002,
854         0x2463, 0xffffffff, 0x00050004,
855         0x2464, 0xffffffff, 0x00000008,
856         0x2465, 0xffffffff, 0x00070006,
857         0x2466, 0xffffffff, 0x000a0009,
858         0x2467, 0xffffffff, 0x00040003,
859         0x2468, 0xffffffff, 0x00060005,
860         0x2469, 0xffffffff, 0x00000009,
861         0x246a, 0xffffffff, 0x00080007,
862         0x246b, 0xffffffff, 0x000b000a,
863         0x246c, 0xffffffff, 0x00050004,
864         0x246d, 0xffffffff, 0x00070006,
865         0x246e, 0xffffffff, 0x0008000b,
866         0x246f, 0xffffffff, 0x000a0009,
867         0x2470, 0xffffffff, 0x000d000c,
868         0x2471, 0xffffffff, 0x00060005,
869         0x2472, 0xffffffff, 0x00080007,
870         0x2473, 0xffffffff, 0x0000000b,
871         0x2474, 0xffffffff, 0x000a0009,
872         0x2475, 0xffffffff, 0x000d000c,
873         0x2454, 0xffffffff, 0x96940200,
874         0x21c2, 0xffffffff, 0x00900100,
875         0x311e, 0xffffffff, 0x00000080,
876         0x3101, 0xffffffff, 0x0020003f,
877         0x000c, 0xffffffff, 0x0000001c,
878         0x000d, 0x000f0000, 0x000f0000,
879         0x0583, 0xffffffff, 0x00000100,
880         0x0409, 0xffffffff, 0x00000100,
881         0x082a, 0xffffffff, 0x00000104,
882         0x0993, 0x000c0000, 0x000c0000,
883         0x0992, 0x000c0000, 0x000c0000,
884         0x0bd4, 0x00000001, 0x00000001,
885         0x0c33, 0xc0000fff, 0x00000104,
886         0x3079, 0x00000001, 0x00000001,
887         0x3430, 0xfffffff0, 0x00000100,
888         0x3630, 0xfffffff0, 0x00000100
889 };
890
891 static u32 si_pcie_rreg(struct amdgpu_device *adev, u32 reg)
892 {
893         unsigned long flags;
894         u32 r;
895
896         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
897         WREG32(AMDGPU_PCIE_INDEX, reg);
898         (void)RREG32(AMDGPU_PCIE_INDEX);
899         r = RREG32(AMDGPU_PCIE_DATA);
900         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
901         return r;
902 }
903
904 static void si_pcie_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
905 {
906         unsigned long flags;
907
908         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
909         WREG32(AMDGPU_PCIE_INDEX, reg);
910         (void)RREG32(AMDGPU_PCIE_INDEX);
911         WREG32(AMDGPU_PCIE_DATA, v);
912         (void)RREG32(AMDGPU_PCIE_DATA);
913         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
914 }
915
916 static u32 si_pciep_rreg(struct amdgpu_device *adev, u32 reg)
917 {
918         unsigned long flags;
919         u32 r;
920
921         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
922         WREG32(PCIE_PORT_INDEX, ((reg) & 0xff));
923         (void)RREG32(PCIE_PORT_INDEX);
924         r = RREG32(PCIE_PORT_DATA);
925         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
926         return r;
927 }
928
929 static void si_pciep_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
930 {
931         unsigned long flags;
932
933         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
934         WREG32(PCIE_PORT_INDEX, ((reg) & 0xff));
935         (void)RREG32(PCIE_PORT_INDEX);
936         WREG32(PCIE_PORT_DATA, (v));
937         (void)RREG32(PCIE_PORT_DATA);
938         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
939 }
940
941 static u32 si_smc_rreg(struct amdgpu_device *adev, u32 reg)
942 {
943         unsigned long flags;
944         u32 r;
945
946         spin_lock_irqsave(&adev->smc_idx_lock, flags);
947         WREG32(SMC_IND_INDEX_0, (reg));
948         r = RREG32(SMC_IND_DATA_0);
949         spin_unlock_irqrestore(&adev->smc_idx_lock, flags);
950         return r;
951 }
952
953 static void si_smc_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
954 {
955         unsigned long flags;
956
957         spin_lock_irqsave(&adev->smc_idx_lock, flags);
958         WREG32(SMC_IND_INDEX_0, (reg));
959         WREG32(SMC_IND_DATA_0, (v));
960         spin_unlock_irqrestore(&adev->smc_idx_lock, flags);
961 }
962
963 static struct amdgpu_allowed_register_entry si_allowed_read_registers[] = {
964         {GRBM_STATUS, false},
965         {GB_ADDR_CONFIG, false},
966         {MC_ARB_RAMCFG, false},
967         {GB_TILE_MODE0, false},
968         {GB_TILE_MODE1, false},
969         {GB_TILE_MODE2, false},
970         {GB_TILE_MODE3, false},
971         {GB_TILE_MODE4, false},
972         {GB_TILE_MODE5, false},
973         {GB_TILE_MODE6, false},
974         {GB_TILE_MODE7, false},
975         {GB_TILE_MODE8, false},
976         {GB_TILE_MODE9, false},
977         {GB_TILE_MODE10, false},
978         {GB_TILE_MODE11, false},
979         {GB_TILE_MODE12, false},
980         {GB_TILE_MODE13, false},
981         {GB_TILE_MODE14, false},
982         {GB_TILE_MODE15, false},
983         {GB_TILE_MODE16, false},
984         {GB_TILE_MODE17, false},
985         {GB_TILE_MODE18, false},
986         {GB_TILE_MODE19, false},
987         {GB_TILE_MODE20, false},
988         {GB_TILE_MODE21, false},
989         {GB_TILE_MODE22, false},
990         {GB_TILE_MODE23, false},
991         {GB_TILE_MODE24, false},
992         {GB_TILE_MODE25, false},
993         {GB_TILE_MODE26, false},
994         {GB_TILE_MODE27, false},
995         {GB_TILE_MODE28, false},
996         {GB_TILE_MODE29, false},
997         {GB_TILE_MODE30, false},
998         {GB_TILE_MODE31, false},
999         {CC_RB_BACKEND_DISABLE, false, true},
1000         {GC_USER_RB_BACKEND_DISABLE, false, true},
1001         {PA_SC_RASTER_CONFIG, false, true},
1002 };
1003
1004 static uint32_t si_read_indexed_register(struct amdgpu_device *adev,
1005                                           u32 se_num, u32 sh_num,
1006                                           u32 reg_offset)
1007 {
1008         uint32_t val;
1009
1010         mutex_lock(&adev->grbm_idx_mutex);
1011         if (se_num != 0xffffffff || sh_num != 0xffffffff)
1012                 amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff);
1013
1014         val = RREG32(reg_offset);
1015
1016         if (se_num != 0xffffffff || sh_num != 0xffffffff)
1017                 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
1018         mutex_unlock(&adev->grbm_idx_mutex);
1019         return val;
1020 }
1021
1022 static int si_read_register(struct amdgpu_device *adev, u32 se_num,
1023                              u32 sh_num, u32 reg_offset, u32 *value)
1024 {
1025         uint32_t i;
1026
1027         *value = 0;
1028         for (i = 0; i < ARRAY_SIZE(si_allowed_read_registers); i++) {
1029                 if (reg_offset != si_allowed_read_registers[i].reg_offset)
1030                         continue;
1031
1032                 if (!si_allowed_read_registers[i].untouched)
1033                         *value = si_allowed_read_registers[i].grbm_indexed ?
1034                                  si_read_indexed_register(adev, se_num,
1035                                                            sh_num, reg_offset) :
1036                                  RREG32(reg_offset);
1037                 return 0;
1038         }
1039         return -EINVAL;
1040 }
1041
1042 static bool si_read_disabled_bios(struct amdgpu_device *adev)
1043 {
1044         u32 bus_cntl;
1045         u32 d1vga_control = 0;
1046         u32 d2vga_control = 0;
1047         u32 vga_render_control = 0;
1048         u32 rom_cntl;
1049         bool r;
1050
1051         bus_cntl = RREG32(R600_BUS_CNTL);
1052         if (adev->mode_info.num_crtc) {
1053                 d1vga_control = RREG32(AVIVO_D1VGA_CONTROL);
1054                 d2vga_control = RREG32(AVIVO_D2VGA_CONTROL);
1055                 vga_render_control = RREG32(VGA_RENDER_CONTROL);
1056         }
1057         rom_cntl = RREG32(R600_ROM_CNTL);
1058
1059         /* enable the rom */
1060         WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS));
1061         if (adev->mode_info.num_crtc) {
1062                 /* Disable VGA mode */
1063                 WREG32(AVIVO_D1VGA_CONTROL,
1064                        (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE |
1065                                           AVIVO_DVGA_CONTROL_TIMING_SELECT)));
1066                 WREG32(AVIVO_D2VGA_CONTROL,
1067                        (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE |
1068                                           AVIVO_DVGA_CONTROL_TIMING_SELECT)));
1069                 WREG32(VGA_RENDER_CONTROL,
1070                        (vga_render_control & C_000300_VGA_VSTATUS_CNTL));
1071         }
1072         WREG32(R600_ROM_CNTL, rom_cntl | R600_SCK_OVERWRITE);
1073
1074         r = amdgpu_read_bios(adev);
1075
1076         /* restore regs */
1077         WREG32(R600_BUS_CNTL, bus_cntl);
1078         if (adev->mode_info.num_crtc) {
1079                 WREG32(AVIVO_D1VGA_CONTROL, d1vga_control);
1080                 WREG32(AVIVO_D2VGA_CONTROL, d2vga_control);
1081                 WREG32(VGA_RENDER_CONTROL, vga_render_control);
1082         }
1083         WREG32(R600_ROM_CNTL, rom_cntl);
1084         return r;
1085 }
1086
1087 //xxx: not implemented
1088 static int si_asic_reset(struct amdgpu_device *adev)
1089 {
1090         return 0;
1091 }
1092
1093 static void si_vga_set_state(struct amdgpu_device *adev, bool state)
1094 {
1095         uint32_t temp;
1096
1097         temp = RREG32(CONFIG_CNTL);
1098         if (state == false) {
1099                 temp &= ~(1<<0);
1100                 temp |= (1<<1);
1101         } else {
1102                 temp &= ~(1<<1);
1103         }
1104         WREG32(CONFIG_CNTL, temp);
1105 }
1106
1107 static u32 si_get_xclk(struct amdgpu_device *adev)
1108 {
1109         u32 reference_clock = adev->clock.spll.reference_freq;
1110         u32 tmp;
1111
1112         tmp = RREG32(CG_CLKPIN_CNTL_2);
1113         if (tmp & MUX_TCLK_TO_XCLK)
1114                 return TCLK;
1115
1116         tmp = RREG32(CG_CLKPIN_CNTL);
1117         if (tmp & XTALIN_DIVIDE)
1118                 return reference_clock / 4;
1119
1120         return reference_clock;
1121 }
1122
1123 //xxx:not implemented
1124 static int si_set_uvd_clocks(struct amdgpu_device *adev, u32 vclk, u32 dclk)
1125 {
1126         return 0;
1127 }
1128
1129 static void si_detect_hw_virtualization(struct amdgpu_device *adev)
1130 {
1131         if (is_virtual_machine()) /* passthrough mode */
1132                 adev->virtualization.virtual_caps |= AMDGPU_PASSTHROUGH_MODE;
1133 }
1134
1135 static const struct amdgpu_asic_funcs si_asic_funcs =
1136 {
1137         .read_disabled_bios = &si_read_disabled_bios,
1138         .detect_hw_virtualization = si_detect_hw_virtualization,
1139         .read_register = &si_read_register,
1140         .reset = &si_asic_reset,
1141         .set_vga_state = &si_vga_set_state,
1142         .get_xclk = &si_get_xclk,
1143         .set_uvd_clocks = &si_set_uvd_clocks,
1144         .set_vce_clocks = NULL,
1145 };
1146
1147 static uint32_t si_get_rev_id(struct amdgpu_device *adev)
1148 {
1149         return (RREG32(CC_DRM_ID_STRAPS) & CC_DRM_ID_STRAPS__ATI_REV_ID_MASK)
1150                 >> CC_DRM_ID_STRAPS__ATI_REV_ID__SHIFT;
1151 }
1152
1153 static int si_common_early_init(void *handle)
1154 {
1155         struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1156
1157         adev->smc_rreg = &si_smc_rreg;
1158         adev->smc_wreg = &si_smc_wreg;
1159         adev->pcie_rreg = &si_pcie_rreg;
1160         adev->pcie_wreg = &si_pcie_wreg;
1161         adev->pciep_rreg = &si_pciep_rreg;
1162         adev->pciep_wreg = &si_pciep_wreg;
1163         adev->uvd_ctx_rreg = NULL;
1164         adev->uvd_ctx_wreg = NULL;
1165         adev->didt_rreg = NULL;
1166         adev->didt_wreg = NULL;
1167
1168         adev->asic_funcs = &si_asic_funcs;
1169
1170         adev->rev_id = si_get_rev_id(adev);
1171         adev->external_rev_id = 0xFF;
1172         switch (adev->asic_type) {
1173         case CHIP_TAHITI:
1174                 adev->cg_flags =
1175                         AMD_CG_SUPPORT_GFX_MGCG |
1176                         AMD_CG_SUPPORT_GFX_MGLS |
1177                         /*AMD_CG_SUPPORT_GFX_CGCG |*/
1178                         AMD_CG_SUPPORT_GFX_CGLS |
1179                         AMD_CG_SUPPORT_GFX_CGTS |
1180                         AMD_CG_SUPPORT_GFX_CP_LS |
1181                         AMD_CG_SUPPORT_MC_MGCG |
1182                         AMD_CG_SUPPORT_SDMA_MGCG |
1183                         AMD_CG_SUPPORT_BIF_LS |
1184                         AMD_CG_SUPPORT_VCE_MGCG |
1185                         AMD_CG_SUPPORT_UVD_MGCG |
1186                         AMD_CG_SUPPORT_HDP_LS |
1187                         AMD_CG_SUPPORT_HDP_MGCG;
1188                         adev->pg_flags = 0;
1189                 adev->external_rev_id = (adev->rev_id == 0) ? 1 :
1190                                         (adev->rev_id == 1) ? 5 : 6;
1191                 break;
1192         case CHIP_PITCAIRN:
1193                 adev->cg_flags =
1194                         AMD_CG_SUPPORT_GFX_MGCG |
1195                         AMD_CG_SUPPORT_GFX_MGLS |
1196                         /*AMD_CG_SUPPORT_GFX_CGCG |*/
1197                         AMD_CG_SUPPORT_GFX_CGLS |
1198                         AMD_CG_SUPPORT_GFX_CGTS |
1199                         AMD_CG_SUPPORT_GFX_CP_LS |
1200                         AMD_CG_SUPPORT_GFX_RLC_LS |
1201                         AMD_CG_SUPPORT_MC_LS |
1202                         AMD_CG_SUPPORT_MC_MGCG |
1203                         AMD_CG_SUPPORT_SDMA_MGCG |
1204                         AMD_CG_SUPPORT_BIF_LS |
1205                         AMD_CG_SUPPORT_VCE_MGCG |
1206                         AMD_CG_SUPPORT_UVD_MGCG |
1207                         AMD_CG_SUPPORT_HDP_LS |
1208                         AMD_CG_SUPPORT_HDP_MGCG;
1209                 adev->pg_flags = 0;
1210                 adev->external_rev_id = adev->rev_id + 20;
1211                 break;
1212
1213         case CHIP_VERDE:
1214                 adev->cg_flags =
1215                         AMD_CG_SUPPORT_GFX_MGCG |
1216                         AMD_CG_SUPPORT_GFX_MGLS |
1217                         AMD_CG_SUPPORT_GFX_CGLS |
1218                         AMD_CG_SUPPORT_GFX_CGTS |
1219                         AMD_CG_SUPPORT_GFX_CGTS_LS |
1220                         AMD_CG_SUPPORT_GFX_CP_LS |
1221                         AMD_CG_SUPPORT_MC_LS |
1222                         AMD_CG_SUPPORT_MC_MGCG |
1223                         AMD_CG_SUPPORT_SDMA_MGCG |
1224                         AMD_CG_SUPPORT_SDMA_LS |
1225                         AMD_CG_SUPPORT_BIF_LS |
1226                         AMD_CG_SUPPORT_VCE_MGCG |
1227                         AMD_CG_SUPPORT_UVD_MGCG |
1228                         AMD_CG_SUPPORT_HDP_LS |
1229                         AMD_CG_SUPPORT_HDP_MGCG;
1230                 adev->pg_flags = 0;
1231                 //???
1232                 adev->external_rev_id = adev->rev_id + 40;
1233                 break;
1234         case CHIP_OLAND:
1235                 adev->cg_flags =
1236                         AMD_CG_SUPPORT_GFX_MGCG |
1237                         AMD_CG_SUPPORT_GFX_MGLS |
1238                         /*AMD_CG_SUPPORT_GFX_CGCG |*/
1239                         AMD_CG_SUPPORT_GFX_CGLS |
1240                         AMD_CG_SUPPORT_GFX_CGTS |
1241                         AMD_CG_SUPPORT_GFX_CP_LS |
1242                         AMD_CG_SUPPORT_GFX_RLC_LS |
1243                         AMD_CG_SUPPORT_MC_LS |
1244                         AMD_CG_SUPPORT_MC_MGCG |
1245                         AMD_CG_SUPPORT_SDMA_MGCG |
1246                         AMD_CG_SUPPORT_BIF_LS |
1247                         AMD_CG_SUPPORT_UVD_MGCG |
1248                         AMD_CG_SUPPORT_HDP_LS |
1249                         AMD_CG_SUPPORT_HDP_MGCG;
1250                 adev->pg_flags = 0;
1251                 adev->external_rev_id = 60;
1252                 break;
1253         case CHIP_HAINAN:
1254                 adev->cg_flags =
1255                         AMD_CG_SUPPORT_GFX_MGCG |
1256                         AMD_CG_SUPPORT_GFX_MGLS |
1257                         /*AMD_CG_SUPPORT_GFX_CGCG |*/
1258                         AMD_CG_SUPPORT_GFX_CGLS |
1259                         AMD_CG_SUPPORT_GFX_CGTS |
1260                         AMD_CG_SUPPORT_GFX_CP_LS |
1261                         AMD_CG_SUPPORT_GFX_RLC_LS |
1262                         AMD_CG_SUPPORT_MC_LS |
1263                         AMD_CG_SUPPORT_MC_MGCG |
1264                         AMD_CG_SUPPORT_SDMA_MGCG |
1265                         AMD_CG_SUPPORT_BIF_LS |
1266                         AMD_CG_SUPPORT_HDP_LS |
1267                         AMD_CG_SUPPORT_HDP_MGCG;
1268                 adev->pg_flags = 0;
1269                 adev->external_rev_id = 70;
1270                 break;
1271
1272         default:
1273                 return -EINVAL;
1274         }
1275
1276         return 0;
1277 }
1278
1279 static int si_common_sw_init(void *handle)
1280 {
1281         return 0;
1282 }
1283
1284 static int si_common_sw_fini(void *handle)
1285 {
1286         return 0;
1287 }
1288
1289
1290 static void si_init_golden_registers(struct amdgpu_device *adev)
1291 {
1292         switch (adev->asic_type) {
1293         case CHIP_TAHITI:
1294                 amdgpu_program_register_sequence(adev,
1295                                                  tahiti_golden_registers,
1296                                                  (const u32)ARRAY_SIZE(tahiti_golden_registers));
1297                 amdgpu_program_register_sequence(adev,
1298                                                  tahiti_golden_rlc_registers,
1299                                                  (const u32)ARRAY_SIZE(tahiti_golden_rlc_registers));
1300                 amdgpu_program_register_sequence(adev,
1301                                                  tahiti_mgcg_cgcg_init,
1302                                                  (const u32)ARRAY_SIZE(tahiti_mgcg_cgcg_init));
1303                 amdgpu_program_register_sequence(adev,
1304                                                  tahiti_golden_registers2,
1305                                                  (const u32)ARRAY_SIZE(tahiti_golden_registers2));
1306                 break;
1307         case CHIP_PITCAIRN:
1308                 amdgpu_program_register_sequence(adev,
1309                                                  pitcairn_golden_registers,
1310                                                  (const u32)ARRAY_SIZE(pitcairn_golden_registers));
1311                 amdgpu_program_register_sequence(adev,
1312                                                  pitcairn_golden_rlc_registers,
1313                                                  (const u32)ARRAY_SIZE(pitcairn_golden_rlc_registers));
1314                 amdgpu_program_register_sequence(adev,
1315                                                  pitcairn_mgcg_cgcg_init,
1316                                                  (const u32)ARRAY_SIZE(pitcairn_mgcg_cgcg_init));
1317         case CHIP_VERDE:
1318                 amdgpu_program_register_sequence(adev,
1319                                                  verde_golden_registers,
1320                                                  (const u32)ARRAY_SIZE(verde_golden_registers));
1321                 amdgpu_program_register_sequence(adev,
1322                                                  verde_golden_rlc_registers,
1323                                                  (const u32)ARRAY_SIZE(verde_golden_rlc_registers));
1324                 amdgpu_program_register_sequence(adev,
1325                                                  verde_mgcg_cgcg_init,
1326                                                  (const u32)ARRAY_SIZE(verde_mgcg_cgcg_init));
1327                 amdgpu_program_register_sequence(adev,
1328                                                  verde_pg_init,
1329                                                  (const u32)ARRAY_SIZE(verde_pg_init));
1330                 break;
1331         case CHIP_OLAND:
1332                 amdgpu_program_register_sequence(adev,
1333                                                  oland_golden_registers,
1334                                                  (const u32)ARRAY_SIZE(oland_golden_registers));
1335                 amdgpu_program_register_sequence(adev,
1336                                                  oland_golden_rlc_registers,
1337                                                  (const u32)ARRAY_SIZE(oland_golden_rlc_registers));
1338                 amdgpu_program_register_sequence(adev,
1339                                                  oland_mgcg_cgcg_init,
1340                                                  (const u32)ARRAY_SIZE(oland_mgcg_cgcg_init));
1341         case CHIP_HAINAN:
1342                 amdgpu_program_register_sequence(adev,
1343                                                  hainan_golden_registers,
1344                                                  (const u32)ARRAY_SIZE(hainan_golden_registers));
1345                 amdgpu_program_register_sequence(adev,
1346                                                  hainan_golden_registers2,
1347                                                  (const u32)ARRAY_SIZE(hainan_golden_registers2));
1348                 amdgpu_program_register_sequence(adev,
1349                                                  hainan_mgcg_cgcg_init,
1350                                                  (const u32)ARRAY_SIZE(hainan_mgcg_cgcg_init));
1351                 break;
1352
1353
1354         default:
1355                 BUG();
1356         }
1357 }
1358
1359 static void si_pcie_gen3_enable(struct amdgpu_device *adev)
1360 {
1361         struct pci_dev *root = adev->pdev->bus->self;
1362         int bridge_pos, gpu_pos;
1363         u32 speed_cntl, mask, current_data_rate;
1364         int ret, i;
1365         u16 tmp16;
1366
1367         if (pci_is_root_bus(adev->pdev->bus))
1368                 return;
1369
1370         if (amdgpu_pcie_gen2 == 0)
1371                 return;
1372
1373         if (adev->flags & AMD_IS_APU)
1374                 return;
1375
1376         ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask);
1377         if (ret != 0)
1378                 return;
1379
1380         if (!(mask & (DRM_PCIE_SPEED_50 | DRM_PCIE_SPEED_80)))
1381                 return;
1382
1383         speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
1384         current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >>
1385                 LC_CURRENT_DATA_RATE_SHIFT;
1386         if (mask & DRM_PCIE_SPEED_80) {
1387                 if (current_data_rate == 2) {
1388                         DRM_INFO("PCIE gen 3 link speeds already enabled\n");
1389                         return;
1390                 }
1391                 DRM_INFO("enabling PCIE gen 3 link speeds, disable with amdgpu.pcie_gen2=0\n");
1392         } else if (mask & DRM_PCIE_SPEED_50) {
1393                 if (current_data_rate == 1) {
1394                         DRM_INFO("PCIE gen 2 link speeds already enabled\n");
1395                         return;
1396                 }
1397                 DRM_INFO("enabling PCIE gen 2 link speeds, disable with amdgpu.pcie_gen2=0\n");
1398         }
1399
1400         bridge_pos = pci_pcie_cap(root);
1401         if (!bridge_pos)
1402                 return;
1403
1404         gpu_pos = pci_pcie_cap(adev->pdev);
1405         if (!gpu_pos)
1406                 return;
1407
1408         if (mask & DRM_PCIE_SPEED_80) {
1409                 if (current_data_rate != 2) {
1410                         u16 bridge_cfg, gpu_cfg;
1411                         u16 bridge_cfg2, gpu_cfg2;
1412                         u32 max_lw, current_lw, tmp;
1413
1414                         pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg);
1415                         pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg);
1416
1417                         tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD;
1418                         pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16);
1419
1420                         tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD;
1421                         pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16);
1422
1423                         tmp = RREG32_PCIE(PCIE_LC_STATUS1);
1424                         max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT;
1425                         current_lw = (tmp & LC_OPERATING_LINK_WIDTH_MASK) >> LC_OPERATING_LINK_WIDTH_SHIFT;
1426
1427                         if (current_lw < max_lw) {
1428                                 tmp = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL);
1429                                 if (tmp & LC_RENEGOTIATION_SUPPORT) {
1430                                         tmp &= ~(LC_LINK_WIDTH_MASK | LC_UPCONFIGURE_DIS);
1431                                         tmp |= (max_lw << LC_LINK_WIDTH_SHIFT);
1432                                         tmp |= LC_UPCONFIGURE_SUPPORT | LC_RENEGOTIATE_EN | LC_RECONFIG_NOW;
1433                                         WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, tmp);
1434                                 }
1435                         }
1436
1437                         for (i = 0; i < 10; i++) {
1438                                 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16);
1439                                 if (tmp16 & PCI_EXP_DEVSTA_TRPND)
1440                                         break;
1441
1442                                 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg);
1443                                 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg);
1444
1445                                 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2);
1446                                 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2);
1447
1448                                 tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
1449                                 tmp |= LC_SET_QUIESCE;
1450                                 WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
1451
1452                                 tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
1453                                 tmp |= LC_REDO_EQ;
1454                                 WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
1455
1456                                 mdelay(100);
1457
1458                                 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16);
1459                                 tmp16 &= ~PCI_EXP_LNKCTL_HAWD;
1460                                 tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD);
1461                                 pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16);
1462
1463                                 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16);
1464                                 tmp16 &= ~PCI_EXP_LNKCTL_HAWD;
1465                                 tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD);
1466                                 pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16);
1467
1468                                 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16);
1469                                 tmp16 &= ~((1 << 4) | (7 << 9));
1470                                 tmp16 |= (bridge_cfg2 & ((1 << 4) | (7 << 9)));
1471                                 pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16);
1472
1473                                 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
1474                                 tmp16 &= ~((1 << 4) | (7 << 9));
1475                                 tmp16 |= (gpu_cfg2 & ((1 << 4) | (7 << 9)));
1476                                 pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16);
1477
1478                                 tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
1479                                 tmp &= ~LC_SET_QUIESCE;
1480                                 WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
1481                         }
1482                 }
1483         }
1484
1485         speed_cntl |= LC_FORCE_EN_SW_SPEED_CHANGE | LC_FORCE_DIS_HW_SPEED_CHANGE;
1486         speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE;
1487         WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
1488
1489         pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
1490         tmp16 &= ~0xf;
1491         if (mask & DRM_PCIE_SPEED_80)
1492                 tmp16 |= 3;
1493         else if (mask & DRM_PCIE_SPEED_50)
1494                 tmp16 |= 2;
1495         else
1496                 tmp16 |= 1;
1497         pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16);
1498
1499         speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
1500         speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE;
1501         WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
1502
1503         for (i = 0; i < adev->usec_timeout; i++) {
1504                 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
1505                 if ((speed_cntl & LC_INITIATE_LINK_SPEED_CHANGE) == 0)
1506                         break;
1507                 udelay(1);
1508         }
1509 }
1510
1511 static inline u32 si_pif_phy0_rreg(struct amdgpu_device *adev, u32 reg)
1512 {
1513         unsigned long flags;
1514         u32 r;
1515
1516         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
1517         WREG32(EVERGREEN_PIF_PHY0_INDEX, ((reg) & 0xffff));
1518         r = RREG32(EVERGREEN_PIF_PHY0_DATA);
1519         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
1520         return r;
1521 }
1522
1523 static inline void si_pif_phy0_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
1524 {
1525         unsigned long flags;
1526
1527         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
1528         WREG32(EVERGREEN_PIF_PHY0_INDEX, ((reg) & 0xffff));
1529         WREG32(EVERGREEN_PIF_PHY0_DATA, (v));
1530         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
1531 }
1532
1533 static inline u32 si_pif_phy1_rreg(struct amdgpu_device *adev, u32 reg)
1534 {
1535         unsigned long flags;
1536         u32 r;
1537
1538         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
1539         WREG32(EVERGREEN_PIF_PHY1_INDEX, ((reg) & 0xffff));
1540         r = RREG32(EVERGREEN_PIF_PHY1_DATA);
1541         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
1542         return r;
1543 }
1544
1545 static inline void si_pif_phy1_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
1546 {
1547         unsigned long flags;
1548
1549         spin_lock_irqsave(&adev->pcie_idx_lock, flags);
1550         WREG32(EVERGREEN_PIF_PHY1_INDEX, ((reg) & 0xffff));
1551         WREG32(EVERGREEN_PIF_PHY1_DATA, (v));
1552         spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
1553 }
1554 static void si_program_aspm(struct amdgpu_device *adev)
1555 {
1556         u32 data, orig;
1557         bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false;
1558         bool disable_clkreq = false;
1559
1560         if (amdgpu_aspm == 0)
1561                 return;
1562
1563         if (adev->flags & AMD_IS_APU)
1564                 return;
1565         orig = data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL);
1566         data &= ~LC_XMIT_N_FTS_MASK;
1567         data |= LC_XMIT_N_FTS(0x24) | LC_XMIT_N_FTS_OVERRIDE_EN;
1568         if (orig != data)
1569                 WREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL, data);
1570
1571         orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL3);
1572         data |= LC_GO_TO_RECOVERY;
1573         if (orig != data)
1574                 WREG32_PCIE_PORT(PCIE_LC_CNTL3, data);
1575
1576         orig = data = RREG32_PCIE(PCIE_P_CNTL);
1577         data |= P_IGNORE_EDB_ERR;
1578         if (orig != data)
1579                 WREG32_PCIE(PCIE_P_CNTL, data);
1580
1581         orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL);
1582         data &= ~(LC_L0S_INACTIVITY_MASK | LC_L1_INACTIVITY_MASK);
1583         data |= LC_PMI_TO_L1_DIS;
1584         if (!disable_l0s)
1585                 data |= LC_L0S_INACTIVITY(7);
1586
1587         if (!disable_l1) {
1588                 data |= LC_L1_INACTIVITY(7);
1589                 data &= ~LC_PMI_TO_L1_DIS;
1590                 if (orig != data)
1591                         WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
1592
1593                 if (!disable_plloff_in_l1) {
1594                         bool clk_req_support;
1595
1596                         orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_0);
1597                         data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK);
1598                         data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7);
1599                         if (orig != data)
1600                                 si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_0, data);
1601
1602                         orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_1);
1603                         data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK);
1604                         data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7);
1605                         if (orig != data)
1606                                 si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_1, data);
1607
1608                         orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_0);
1609                         data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK);
1610                         data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7);
1611                         if (orig != data)
1612                                 si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_0, data);
1613
1614                         orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_1);
1615                         data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK);
1616                         data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7);
1617                         if (orig != data)
1618                                 si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_1, data);
1619
1620                         if ((adev->family != CHIP_OLAND) && (adev->family != CHIP_HAINAN)) {
1621                                 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_0);
1622                                 data &= ~PLL_RAMP_UP_TIME_0_MASK;
1623                                 if (orig != data)
1624                                         si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_0, data);
1625
1626                                 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_1);
1627                                 data &= ~PLL_RAMP_UP_TIME_1_MASK;
1628                                 if (orig != data)
1629                                         si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_1, data);
1630
1631                                 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_2);
1632                                 data &= ~PLL_RAMP_UP_TIME_2_MASK;
1633                                 if (orig != data)
1634                                         si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_2, data);
1635
1636                                 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_3);
1637                                 data &= ~PLL_RAMP_UP_TIME_3_MASK;
1638                                 if (orig != data)
1639                                         si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_3, data);
1640
1641                                 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_0);
1642                                 data &= ~PLL_RAMP_UP_TIME_0_MASK;
1643                                 if (orig != data)
1644                                         si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_0, data);
1645
1646                                 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_1);
1647                                 data &= ~PLL_RAMP_UP_TIME_1_MASK;
1648                                 if (orig != data)
1649                                         si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_1, data);
1650
1651                                 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_2);
1652                                 data &= ~PLL_RAMP_UP_TIME_2_MASK;
1653                                 if (orig != data)
1654                                         si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_2, data);
1655
1656                                 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_3);
1657                                 data &= ~PLL_RAMP_UP_TIME_3_MASK;
1658                                 if (orig != data)
1659                                         si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_3, data);
1660                         }
1661                         orig = data = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL);
1662                         data &= ~LC_DYN_LANES_PWR_STATE_MASK;
1663                         data |= LC_DYN_LANES_PWR_STATE(3);
1664                         if (orig != data)
1665                                 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, data);
1666
1667                         orig = data = si_pif_phy0_rreg(adev,PB0_PIF_CNTL);
1668                         data &= ~LS2_EXIT_TIME_MASK;
1669                         if ((adev->family == CHIP_OLAND) || (adev->family == CHIP_HAINAN))
1670                                 data |= LS2_EXIT_TIME(5);
1671                         if (orig != data)
1672                                 si_pif_phy0_wreg(adev,PB0_PIF_CNTL, data);
1673
1674                         orig = data = si_pif_phy1_rreg(adev,PB1_PIF_CNTL);
1675                         data &= ~LS2_EXIT_TIME_MASK;
1676                         if ((adev->family == CHIP_OLAND) || (adev->family == CHIP_HAINAN))
1677                                 data |= LS2_EXIT_TIME(5);
1678                         if (orig != data)
1679                                 si_pif_phy1_wreg(adev,PB1_PIF_CNTL, data);
1680
1681                         if (!disable_clkreq &&
1682                             !pci_is_root_bus(adev->pdev->bus)) {
1683                                 struct pci_dev *root = adev->pdev->bus->self;
1684                                 u32 lnkcap;
1685
1686                                 clk_req_support = false;
1687                                 pcie_capability_read_dword(root, PCI_EXP_LNKCAP, &lnkcap);
1688                                 if (lnkcap & PCI_EXP_LNKCAP_CLKPM)
1689                                         clk_req_support = true;
1690                         } else {
1691                                 clk_req_support = false;
1692                         }
1693
1694                         if (clk_req_support) {
1695                                 orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL2);
1696                                 data |= LC_ALLOW_PDWN_IN_L1 | LC_ALLOW_PDWN_IN_L23;
1697                                 if (orig != data)
1698                                         WREG32_PCIE_PORT(PCIE_LC_CNTL2, data);
1699
1700                                 orig = data = RREG32(THM_CLK_CNTL);
1701                                 data &= ~(CMON_CLK_SEL_MASK | TMON_CLK_SEL_MASK);
1702                                 data |= CMON_CLK_SEL(1) | TMON_CLK_SEL(1);
1703                                 if (orig != data)
1704                                         WREG32(THM_CLK_CNTL, data);
1705
1706                                 orig = data = RREG32(MISC_CLK_CNTL);
1707                                 data &= ~(DEEP_SLEEP_CLK_SEL_MASK | ZCLK_SEL_MASK);
1708                                 data |= DEEP_SLEEP_CLK_SEL(1) | ZCLK_SEL(1);
1709                                 if (orig != data)
1710                                         WREG32(MISC_CLK_CNTL, data);
1711
1712                                 orig = data = RREG32(CG_CLKPIN_CNTL);
1713                                 data &= ~BCLK_AS_XCLK;
1714                                 if (orig != data)
1715                                         WREG32(CG_CLKPIN_CNTL, data);
1716
1717                                 orig = data = RREG32(CG_CLKPIN_CNTL_2);
1718                                 data &= ~FORCE_BIF_REFCLK_EN;
1719                                 if (orig != data)
1720                                         WREG32(CG_CLKPIN_CNTL_2, data);
1721
1722                                 orig = data = RREG32(MPLL_BYPASSCLK_SEL);
1723                                 data &= ~MPLL_CLKOUT_SEL_MASK;
1724                                 data |= MPLL_CLKOUT_SEL(4);
1725                                 if (orig != data)
1726                                         WREG32(MPLL_BYPASSCLK_SEL, data);
1727
1728                                 orig = data = RREG32(SPLL_CNTL_MODE);
1729                                 data &= ~SPLL_REFCLK_SEL_MASK;
1730                                 if (orig != data)
1731                                         WREG32(SPLL_CNTL_MODE, data);
1732                         }
1733                 }
1734         } else {
1735                 if (orig != data)
1736                         WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
1737         }
1738
1739         orig = data = RREG32_PCIE(PCIE_CNTL2);
1740         data |= SLV_MEM_LS_EN | MST_MEM_LS_EN | REPLAY_MEM_LS_EN;
1741         if (orig != data)
1742                 WREG32_PCIE(PCIE_CNTL2, data);
1743
1744         if (!disable_l0s) {
1745                 data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL);
1746                 if((data & LC_N_FTS_MASK) == LC_N_FTS_MASK) {
1747                         data = RREG32_PCIE(PCIE_LC_STATUS1);
1748                         if ((data & LC_REVERSE_XMIT) && (data & LC_REVERSE_RCVR)) {
1749                                 orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL);
1750                                 data &= ~LC_L0S_INACTIVITY_MASK;
1751                                 if (orig != data)
1752                                         WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
1753                         }
1754                 }
1755         }
1756 }
1757
1758 static void si_fix_pci_max_read_req_size(struct amdgpu_device *adev)
1759 {
1760         int readrq;
1761         u16 v;
1762
1763         readrq = pcie_get_readrq(adev->pdev);
1764         v = ffs(readrq) - 8;
1765         if ((v == 0) || (v == 6) || (v == 7))
1766                 pcie_set_readrq(adev->pdev, 512);
1767 }
1768
1769 static int si_common_hw_init(void *handle)
1770 {
1771         struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1772
1773         si_fix_pci_max_read_req_size(adev);
1774         si_init_golden_registers(adev);
1775         si_pcie_gen3_enable(adev);
1776         si_program_aspm(adev);
1777
1778         return 0;
1779 }
1780
1781 static int si_common_hw_fini(void *handle)
1782 {
1783         return 0;
1784 }
1785
1786 static int si_common_suspend(void *handle)
1787 {
1788         struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1789
1790         return si_common_hw_fini(adev);
1791 }
1792
1793 static int si_common_resume(void *handle)
1794 {
1795         struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1796
1797         return si_common_hw_init(adev);
1798 }
1799
1800 static bool si_common_is_idle(void *handle)
1801 {
1802         return true;
1803 }
1804
1805 static int si_common_wait_for_idle(void *handle)
1806 {
1807         return 0;
1808 }
1809
1810 static int si_common_soft_reset(void *handle)
1811 {
1812         return 0;
1813 }
1814
1815 static int si_common_set_clockgating_state(void *handle,
1816                                             enum amd_clockgating_state state)
1817 {
1818         return 0;
1819 }
1820
1821 static int si_common_set_powergating_state(void *handle,
1822                                             enum amd_powergating_state state)
1823 {
1824         return 0;
1825 }
1826
1827 static const struct amd_ip_funcs si_common_ip_funcs = {
1828         .name = "si_common",
1829         .early_init = si_common_early_init,
1830         .late_init = NULL,
1831         .sw_init = si_common_sw_init,
1832         .sw_fini = si_common_sw_fini,
1833         .hw_init = si_common_hw_init,
1834         .hw_fini = si_common_hw_fini,
1835         .suspend = si_common_suspend,
1836         .resume = si_common_resume,
1837         .is_idle = si_common_is_idle,
1838         .wait_for_idle = si_common_wait_for_idle,
1839         .soft_reset = si_common_soft_reset,
1840         .set_clockgating_state = si_common_set_clockgating_state,
1841         .set_powergating_state = si_common_set_powergating_state,
1842 };
1843
1844 static const struct amdgpu_ip_block_version si_common_ip_block =
1845 {
1846         .type = AMD_IP_BLOCK_TYPE_COMMON,
1847         .major = 1,
1848         .minor = 0,
1849         .rev = 0,
1850         .funcs = &si_common_ip_funcs,
1851 };
1852
1853 int si_set_ip_blocks(struct amdgpu_device *adev)
1854 {
1855         switch (adev->asic_type) {
1856         case CHIP_VERDE:
1857         case CHIP_TAHITI:
1858         case CHIP_PITCAIRN:
1859                 amdgpu_ip_block_add(adev, &si_common_ip_block);
1860                 amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block);
1861                 amdgpu_ip_block_add(adev, &si_ih_ip_block);
1862                 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1863                 if (adev->enable_virtual_display)
1864                         amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
1865                 else
1866                         amdgpu_ip_block_add(adev, &dce_v6_0_ip_block);
1867                 amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block);
1868                 amdgpu_ip_block_add(adev, &si_dma_ip_block);
1869                 /* amdgpu_ip_block_add(adev, &uvd_v3_1_ip_block); */
1870                 /* amdgpu_ip_block_add(adev, &vce_v1_0_ip_block); */
1871                 break;
1872         case CHIP_OLAND:
1873                 amdgpu_ip_block_add(adev, &si_common_ip_block);
1874                 amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block);
1875                 amdgpu_ip_block_add(adev, &si_ih_ip_block);
1876                 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1877                 if (adev->enable_virtual_display)
1878                         amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
1879                 else
1880                         amdgpu_ip_block_add(adev, &dce_v6_4_ip_block);
1881                 amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block);
1882                 amdgpu_ip_block_add(adev, &si_dma_ip_block);
1883                 /* amdgpu_ip_block_add(adev, &uvd_v3_1_ip_block); */
1884                 /* amdgpu_ip_block_add(adev, &vce_v1_0_ip_block); */
1885                 break;
1886         case CHIP_HAINAN:
1887                 amdgpu_ip_block_add(adev, &si_common_ip_block);
1888                 amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block);
1889                 amdgpu_ip_block_add(adev, &si_ih_ip_block);
1890                 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1891                 if (adev->enable_virtual_display)
1892                         amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
1893                 amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block);
1894                 amdgpu_ip_block_add(adev, &si_dma_ip_block);
1895                 break;
1896         default:
1897                 BUG();
1898         }
1899         return 0;
1900 }
1901