Merge branch 'clockevents/fixes' of git://git.linaro.org/people/daniel.lezcano/linux...
[linux-drm-fsl-dcu.git] / drivers / gpu / drm / radeon / cik.c
1 /*
2  * Copyright 2012 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  * Authors: Alex Deucher
23  */
24 #include <linux/firmware.h>
25 #include <linux/slab.h>
26 #include <linux/module.h>
27 #include "drmP.h"
28 #include "radeon.h"
29 #include "radeon_asic.h"
30 #include "cikd.h"
31 #include "atom.h"
32 #include "cik_blit_shaders.h"
33 #include "radeon_ucode.h"
34 #include "clearstate_ci.h"
35
36 MODULE_FIRMWARE("radeon/BONAIRE_pfp.bin");
37 MODULE_FIRMWARE("radeon/BONAIRE_me.bin");
38 MODULE_FIRMWARE("radeon/BONAIRE_ce.bin");
39 MODULE_FIRMWARE("radeon/BONAIRE_mec.bin");
40 MODULE_FIRMWARE("radeon/BONAIRE_mc.bin");
41 MODULE_FIRMWARE("radeon/BONAIRE_rlc.bin");
42 MODULE_FIRMWARE("radeon/BONAIRE_sdma.bin");
43 MODULE_FIRMWARE("radeon/BONAIRE_smc.bin");
44 MODULE_FIRMWARE("radeon/HAWAII_pfp.bin");
45 MODULE_FIRMWARE("radeon/HAWAII_me.bin");
46 MODULE_FIRMWARE("radeon/HAWAII_ce.bin");
47 MODULE_FIRMWARE("radeon/HAWAII_mec.bin");
48 MODULE_FIRMWARE("radeon/HAWAII_mc.bin");
49 MODULE_FIRMWARE("radeon/HAWAII_rlc.bin");
50 MODULE_FIRMWARE("radeon/HAWAII_sdma.bin");
51 MODULE_FIRMWARE("radeon/HAWAII_smc.bin");
52 MODULE_FIRMWARE("radeon/KAVERI_pfp.bin");
53 MODULE_FIRMWARE("radeon/KAVERI_me.bin");
54 MODULE_FIRMWARE("radeon/KAVERI_ce.bin");
55 MODULE_FIRMWARE("radeon/KAVERI_mec.bin");
56 MODULE_FIRMWARE("radeon/KAVERI_rlc.bin");
57 MODULE_FIRMWARE("radeon/KAVERI_sdma.bin");
58 MODULE_FIRMWARE("radeon/KABINI_pfp.bin");
59 MODULE_FIRMWARE("radeon/KABINI_me.bin");
60 MODULE_FIRMWARE("radeon/KABINI_ce.bin");
61 MODULE_FIRMWARE("radeon/KABINI_mec.bin");
62 MODULE_FIRMWARE("radeon/KABINI_rlc.bin");
63 MODULE_FIRMWARE("radeon/KABINI_sdma.bin");
64
65 extern int r600_ih_ring_alloc(struct radeon_device *rdev);
66 extern void r600_ih_ring_fini(struct radeon_device *rdev);
67 extern void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save);
68 extern void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save);
69 extern bool evergreen_is_display_hung(struct radeon_device *rdev);
70 extern void sumo_rlc_fini(struct radeon_device *rdev);
71 extern int sumo_rlc_init(struct radeon_device *rdev);
72 extern void si_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
73 extern void si_rlc_reset(struct radeon_device *rdev);
74 extern void si_init_uvd_internal_cg(struct radeon_device *rdev);
75 extern int cik_sdma_resume(struct radeon_device *rdev);
76 extern void cik_sdma_enable(struct radeon_device *rdev, bool enable);
77 extern void cik_sdma_fini(struct radeon_device *rdev);
78 static void cik_rlc_stop(struct radeon_device *rdev);
79 static void cik_pcie_gen3_enable(struct radeon_device *rdev);
80 static void cik_program_aspm(struct radeon_device *rdev);
81 static void cik_init_pg(struct radeon_device *rdev);
82 static void cik_init_cg(struct radeon_device *rdev);
83 static void cik_fini_pg(struct radeon_device *rdev);
84 static void cik_fini_cg(struct radeon_device *rdev);
85 static void cik_enable_gui_idle_interrupt(struct radeon_device *rdev,
86                                           bool enable);
87
88 /* get temperature in millidegrees */
89 int ci_get_temp(struct radeon_device *rdev)
90 {
91         u32 temp;
92         int actual_temp = 0;
93
94         temp = (RREG32_SMC(CG_MULT_THERMAL_STATUS) & CTF_TEMP_MASK) >>
95                 CTF_TEMP_SHIFT;
96
97         if (temp & 0x200)
98                 actual_temp = 255;
99         else
100                 actual_temp = temp & 0x1ff;
101
102         actual_temp = actual_temp * 1000;
103
104         return actual_temp;
105 }
106
107 /* get temperature in millidegrees */
108 int kv_get_temp(struct radeon_device *rdev)
109 {
110         u32 temp;
111         int actual_temp = 0;
112
113         temp = RREG32_SMC(0xC0300E0C);
114
115         if (temp)
116                 actual_temp = (temp / 8) - 49;
117         else
118                 actual_temp = 0;
119
120         actual_temp = actual_temp * 1000;
121
122         return actual_temp;
123 }
124
125 /*
126  * Indirect registers accessor
127  */
128 u32 cik_pciep_rreg(struct radeon_device *rdev, u32 reg)
129 {
130         unsigned long flags;
131         u32 r;
132
133         spin_lock_irqsave(&rdev->pciep_idx_lock, flags);
134         WREG32(PCIE_INDEX, reg);
135         (void)RREG32(PCIE_INDEX);
136         r = RREG32(PCIE_DATA);
137         spin_unlock_irqrestore(&rdev->pciep_idx_lock, flags);
138         return r;
139 }
140
141 void cik_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v)
142 {
143         unsigned long flags;
144
145         spin_lock_irqsave(&rdev->pciep_idx_lock, flags);
146         WREG32(PCIE_INDEX, reg);
147         (void)RREG32(PCIE_INDEX);
148         WREG32(PCIE_DATA, v);
149         (void)RREG32(PCIE_DATA);
150         spin_unlock_irqrestore(&rdev->pciep_idx_lock, flags);
151 }
152
153 static const u32 spectre_rlc_save_restore_register_list[] =
154 {
155         (0x0e00 << 16) | (0xc12c >> 2),
156         0x00000000,
157         (0x0e00 << 16) | (0xc140 >> 2),
158         0x00000000,
159         (0x0e00 << 16) | (0xc150 >> 2),
160         0x00000000,
161         (0x0e00 << 16) | (0xc15c >> 2),
162         0x00000000,
163         (0x0e00 << 16) | (0xc168 >> 2),
164         0x00000000,
165         (0x0e00 << 16) | (0xc170 >> 2),
166         0x00000000,
167         (0x0e00 << 16) | (0xc178 >> 2),
168         0x00000000,
169         (0x0e00 << 16) | (0xc204 >> 2),
170         0x00000000,
171         (0x0e00 << 16) | (0xc2b4 >> 2),
172         0x00000000,
173         (0x0e00 << 16) | (0xc2b8 >> 2),
174         0x00000000,
175         (0x0e00 << 16) | (0xc2bc >> 2),
176         0x00000000,
177         (0x0e00 << 16) | (0xc2c0 >> 2),
178         0x00000000,
179         (0x0e00 << 16) | (0x8228 >> 2),
180         0x00000000,
181         (0x0e00 << 16) | (0x829c >> 2),
182         0x00000000,
183         (0x0e00 << 16) | (0x869c >> 2),
184         0x00000000,
185         (0x0600 << 16) | (0x98f4 >> 2),
186         0x00000000,
187         (0x0e00 << 16) | (0x98f8 >> 2),
188         0x00000000,
189         (0x0e00 << 16) | (0x9900 >> 2),
190         0x00000000,
191         (0x0e00 << 16) | (0xc260 >> 2),
192         0x00000000,
193         (0x0e00 << 16) | (0x90e8 >> 2),
194         0x00000000,
195         (0x0e00 << 16) | (0x3c000 >> 2),
196         0x00000000,
197         (0x0e00 << 16) | (0x3c00c >> 2),
198         0x00000000,
199         (0x0e00 << 16) | (0x8c1c >> 2),
200         0x00000000,
201         (0x0e00 << 16) | (0x9700 >> 2),
202         0x00000000,
203         (0x0e00 << 16) | (0xcd20 >> 2),
204         0x00000000,
205         (0x4e00 << 16) | (0xcd20 >> 2),
206         0x00000000,
207         (0x5e00 << 16) | (0xcd20 >> 2),
208         0x00000000,
209         (0x6e00 << 16) | (0xcd20 >> 2),
210         0x00000000,
211         (0x7e00 << 16) | (0xcd20 >> 2),
212         0x00000000,
213         (0x8e00 << 16) | (0xcd20 >> 2),
214         0x00000000,
215         (0x9e00 << 16) | (0xcd20 >> 2),
216         0x00000000,
217         (0xae00 << 16) | (0xcd20 >> 2),
218         0x00000000,
219         (0xbe00 << 16) | (0xcd20 >> 2),
220         0x00000000,
221         (0x0e00 << 16) | (0x89bc >> 2),
222         0x00000000,
223         (0x0e00 << 16) | (0x8900 >> 2),
224         0x00000000,
225         0x3,
226         (0x0e00 << 16) | (0xc130 >> 2),
227         0x00000000,
228         (0x0e00 << 16) | (0xc134 >> 2),
229         0x00000000,
230         (0x0e00 << 16) | (0xc1fc >> 2),
231         0x00000000,
232         (0x0e00 << 16) | (0xc208 >> 2),
233         0x00000000,
234         (0x0e00 << 16) | (0xc264 >> 2),
235         0x00000000,
236         (0x0e00 << 16) | (0xc268 >> 2),
237         0x00000000,
238         (0x0e00 << 16) | (0xc26c >> 2),
239         0x00000000,
240         (0x0e00 << 16) | (0xc270 >> 2),
241         0x00000000,
242         (0x0e00 << 16) | (0xc274 >> 2),
243         0x00000000,
244         (0x0e00 << 16) | (0xc278 >> 2),
245         0x00000000,
246         (0x0e00 << 16) | (0xc27c >> 2),
247         0x00000000,
248         (0x0e00 << 16) | (0xc280 >> 2),
249         0x00000000,
250         (0x0e00 << 16) | (0xc284 >> 2),
251         0x00000000,
252         (0x0e00 << 16) | (0xc288 >> 2),
253         0x00000000,
254         (0x0e00 << 16) | (0xc28c >> 2),
255         0x00000000,
256         (0x0e00 << 16) | (0xc290 >> 2),
257         0x00000000,
258         (0x0e00 << 16) | (0xc294 >> 2),
259         0x00000000,
260         (0x0e00 << 16) | (0xc298 >> 2),
261         0x00000000,
262         (0x0e00 << 16) | (0xc29c >> 2),
263         0x00000000,
264         (0x0e00 << 16) | (0xc2a0 >> 2),
265         0x00000000,
266         (0x0e00 << 16) | (0xc2a4 >> 2),
267         0x00000000,
268         (0x0e00 << 16) | (0xc2a8 >> 2),
269         0x00000000,
270         (0x0e00 << 16) | (0xc2ac  >> 2),
271         0x00000000,
272         (0x0e00 << 16) | (0xc2b0 >> 2),
273         0x00000000,
274         (0x0e00 << 16) | (0x301d0 >> 2),
275         0x00000000,
276         (0x0e00 << 16) | (0x30238 >> 2),
277         0x00000000,
278         (0x0e00 << 16) | (0x30250 >> 2),
279         0x00000000,
280         (0x0e00 << 16) | (0x30254 >> 2),
281         0x00000000,
282         (0x0e00 << 16) | (0x30258 >> 2),
283         0x00000000,
284         (0x0e00 << 16) | (0x3025c >> 2),
285         0x00000000,
286         (0x4e00 << 16) | (0xc900 >> 2),
287         0x00000000,
288         (0x5e00 << 16) | (0xc900 >> 2),
289         0x00000000,
290         (0x6e00 << 16) | (0xc900 >> 2),
291         0x00000000,
292         (0x7e00 << 16) | (0xc900 >> 2),
293         0x00000000,
294         (0x8e00 << 16) | (0xc900 >> 2),
295         0x00000000,
296         (0x9e00 << 16) | (0xc900 >> 2),
297         0x00000000,
298         (0xae00 << 16) | (0xc900 >> 2),
299         0x00000000,
300         (0xbe00 << 16) | (0xc900 >> 2),
301         0x00000000,
302         (0x4e00 << 16) | (0xc904 >> 2),
303         0x00000000,
304         (0x5e00 << 16) | (0xc904 >> 2),
305         0x00000000,
306         (0x6e00 << 16) | (0xc904 >> 2),
307         0x00000000,
308         (0x7e00 << 16) | (0xc904 >> 2),
309         0x00000000,
310         (0x8e00 << 16) | (0xc904 >> 2),
311         0x00000000,
312         (0x9e00 << 16) | (0xc904 >> 2),
313         0x00000000,
314         (0xae00 << 16) | (0xc904 >> 2),
315         0x00000000,
316         (0xbe00 << 16) | (0xc904 >> 2),
317         0x00000000,
318         (0x4e00 << 16) | (0xc908 >> 2),
319         0x00000000,
320         (0x5e00 << 16) | (0xc908 >> 2),
321         0x00000000,
322         (0x6e00 << 16) | (0xc908 >> 2),
323         0x00000000,
324         (0x7e00 << 16) | (0xc908 >> 2),
325         0x00000000,
326         (0x8e00 << 16) | (0xc908 >> 2),
327         0x00000000,
328         (0x9e00 << 16) | (0xc908 >> 2),
329         0x00000000,
330         (0xae00 << 16) | (0xc908 >> 2),
331         0x00000000,
332         (0xbe00 << 16) | (0xc908 >> 2),
333         0x00000000,
334         (0x4e00 << 16) | (0xc90c >> 2),
335         0x00000000,
336         (0x5e00 << 16) | (0xc90c >> 2),
337         0x00000000,
338         (0x6e00 << 16) | (0xc90c >> 2),
339         0x00000000,
340         (0x7e00 << 16) | (0xc90c >> 2),
341         0x00000000,
342         (0x8e00 << 16) | (0xc90c >> 2),
343         0x00000000,
344         (0x9e00 << 16) | (0xc90c >> 2),
345         0x00000000,
346         (0xae00 << 16) | (0xc90c >> 2),
347         0x00000000,
348         (0xbe00 << 16) | (0xc90c >> 2),
349         0x00000000,
350         (0x4e00 << 16) | (0xc910 >> 2),
351         0x00000000,
352         (0x5e00 << 16) | (0xc910 >> 2),
353         0x00000000,
354         (0x6e00 << 16) | (0xc910 >> 2),
355         0x00000000,
356         (0x7e00 << 16) | (0xc910 >> 2),
357         0x00000000,
358         (0x8e00 << 16) | (0xc910 >> 2),
359         0x00000000,
360         (0x9e00 << 16) | (0xc910 >> 2),
361         0x00000000,
362         (0xae00 << 16) | (0xc910 >> 2),
363         0x00000000,
364         (0xbe00 << 16) | (0xc910 >> 2),
365         0x00000000,
366         (0x0e00 << 16) | (0xc99c >> 2),
367         0x00000000,
368         (0x0e00 << 16) | (0x9834 >> 2),
369         0x00000000,
370         (0x0000 << 16) | (0x30f00 >> 2),
371         0x00000000,
372         (0x0001 << 16) | (0x30f00 >> 2),
373         0x00000000,
374         (0x0000 << 16) | (0x30f04 >> 2),
375         0x00000000,
376         (0x0001 << 16) | (0x30f04 >> 2),
377         0x00000000,
378         (0x0000 << 16) | (0x30f08 >> 2),
379         0x00000000,
380         (0x0001 << 16) | (0x30f08 >> 2),
381         0x00000000,
382         (0x0000 << 16) | (0x30f0c >> 2),
383         0x00000000,
384         (0x0001 << 16) | (0x30f0c >> 2),
385         0x00000000,
386         (0x0600 << 16) | (0x9b7c >> 2),
387         0x00000000,
388         (0x0e00 << 16) | (0x8a14 >> 2),
389         0x00000000,
390         (0x0e00 << 16) | (0x8a18 >> 2),
391         0x00000000,
392         (0x0600 << 16) | (0x30a00 >> 2),
393         0x00000000,
394         (0x0e00 << 16) | (0x8bf0 >> 2),
395         0x00000000,
396         (0x0e00 << 16) | (0x8bcc >> 2),
397         0x00000000,
398         (0x0e00 << 16) | (0x8b24 >> 2),
399         0x00000000,
400         (0x0e00 << 16) | (0x30a04 >> 2),
401         0x00000000,
402         (0x0600 << 16) | (0x30a10 >> 2),
403         0x00000000,
404         (0x0600 << 16) | (0x30a14 >> 2),
405         0x00000000,
406         (0x0600 << 16) | (0x30a18 >> 2),
407         0x00000000,
408         (0x0600 << 16) | (0x30a2c >> 2),
409         0x00000000,
410         (0x0e00 << 16) | (0xc700 >> 2),
411         0x00000000,
412         (0x0e00 << 16) | (0xc704 >> 2),
413         0x00000000,
414         (0x0e00 << 16) | (0xc708 >> 2),
415         0x00000000,
416         (0x0e00 << 16) | (0xc768 >> 2),
417         0x00000000,
418         (0x0400 << 16) | (0xc770 >> 2),
419         0x00000000,
420         (0x0400 << 16) | (0xc774 >> 2),
421         0x00000000,
422         (0x0400 << 16) | (0xc778 >> 2),
423         0x00000000,
424         (0x0400 << 16) | (0xc77c >> 2),
425         0x00000000,
426         (0x0400 << 16) | (0xc780 >> 2),
427         0x00000000,
428         (0x0400 << 16) | (0xc784 >> 2),
429         0x00000000,
430         (0x0400 << 16) | (0xc788 >> 2),
431         0x00000000,
432         (0x0400 << 16) | (0xc78c >> 2),
433         0x00000000,
434         (0x0400 << 16) | (0xc798 >> 2),
435         0x00000000,
436         (0x0400 << 16) | (0xc79c >> 2),
437         0x00000000,
438         (0x0400 << 16) | (0xc7a0 >> 2),
439         0x00000000,
440         (0x0400 << 16) | (0xc7a4 >> 2),
441         0x00000000,
442         (0x0400 << 16) | (0xc7a8 >> 2),
443         0x00000000,
444         (0x0400 << 16) | (0xc7ac >> 2),
445         0x00000000,
446         (0x0400 << 16) | (0xc7b0 >> 2),
447         0x00000000,
448         (0x0400 << 16) | (0xc7b4 >> 2),
449         0x00000000,
450         (0x0e00 << 16) | (0x9100 >> 2),
451         0x00000000,
452         (0x0e00 << 16) | (0x3c010 >> 2),
453         0x00000000,
454         (0x0e00 << 16) | (0x92a8 >> 2),
455         0x00000000,
456         (0x0e00 << 16) | (0x92ac >> 2),
457         0x00000000,
458         (0x0e00 << 16) | (0x92b4 >> 2),
459         0x00000000,
460         (0x0e00 << 16) | (0x92b8 >> 2),
461         0x00000000,
462         (0x0e00 << 16) | (0x92bc >> 2),
463         0x00000000,
464         (0x0e00 << 16) | (0x92c0 >> 2),
465         0x00000000,
466         (0x0e00 << 16) | (0x92c4 >> 2),
467         0x00000000,
468         (0x0e00 << 16) | (0x92c8 >> 2),
469         0x00000000,
470         (0x0e00 << 16) | (0x92cc >> 2),
471         0x00000000,
472         (0x0e00 << 16) | (0x92d0 >> 2),
473         0x00000000,
474         (0x0e00 << 16) | (0x8c00 >> 2),
475         0x00000000,
476         (0x0e00 << 16) | (0x8c04 >> 2),
477         0x00000000,
478         (0x0e00 << 16) | (0x8c20 >> 2),
479         0x00000000,
480         (0x0e00 << 16) | (0x8c38 >> 2),
481         0x00000000,
482         (0x0e00 << 16) | (0x8c3c >> 2),
483         0x00000000,
484         (0x0e00 << 16) | (0xae00 >> 2),
485         0x00000000,
486         (0x0e00 << 16) | (0x9604 >> 2),
487         0x00000000,
488         (0x0e00 << 16) | (0xac08 >> 2),
489         0x00000000,
490         (0x0e00 << 16) | (0xac0c >> 2),
491         0x00000000,
492         (0x0e00 << 16) | (0xac10 >> 2),
493         0x00000000,
494         (0x0e00 << 16) | (0xac14 >> 2),
495         0x00000000,
496         (0x0e00 << 16) | (0xac58 >> 2),
497         0x00000000,
498         (0x0e00 << 16) | (0xac68 >> 2),
499         0x00000000,
500         (0x0e00 << 16) | (0xac6c >> 2),
501         0x00000000,
502         (0x0e00 << 16) | (0xac70 >> 2),
503         0x00000000,
504         (0x0e00 << 16) | (0xac74 >> 2),
505         0x00000000,
506         (0x0e00 << 16) | (0xac78 >> 2),
507         0x00000000,
508         (0x0e00 << 16) | (0xac7c >> 2),
509         0x00000000,
510         (0x0e00 << 16) | (0xac80 >> 2),
511         0x00000000,
512         (0x0e00 << 16) | (0xac84 >> 2),
513         0x00000000,
514         (0x0e00 << 16) | (0xac88 >> 2),
515         0x00000000,
516         (0x0e00 << 16) | (0xac8c >> 2),
517         0x00000000,
518         (0x0e00 << 16) | (0x970c >> 2),
519         0x00000000,
520         (0x0e00 << 16) | (0x9714 >> 2),
521         0x00000000,
522         (0x0e00 << 16) | (0x9718 >> 2),
523         0x00000000,
524         (0x0e00 << 16) | (0x971c >> 2),
525         0x00000000,
526         (0x0e00 << 16) | (0x31068 >> 2),
527         0x00000000,
528         (0x4e00 << 16) | (0x31068 >> 2),
529         0x00000000,
530         (0x5e00 << 16) | (0x31068 >> 2),
531         0x00000000,
532         (0x6e00 << 16) | (0x31068 >> 2),
533         0x00000000,
534         (0x7e00 << 16) | (0x31068 >> 2),
535         0x00000000,
536         (0x8e00 << 16) | (0x31068 >> 2),
537         0x00000000,
538         (0x9e00 << 16) | (0x31068 >> 2),
539         0x00000000,
540         (0xae00 << 16) | (0x31068 >> 2),
541         0x00000000,
542         (0xbe00 << 16) | (0x31068 >> 2),
543         0x00000000,
544         (0x0e00 << 16) | (0xcd10 >> 2),
545         0x00000000,
546         (0x0e00 << 16) | (0xcd14 >> 2),
547         0x00000000,
548         (0x0e00 << 16) | (0x88b0 >> 2),
549         0x00000000,
550         (0x0e00 << 16) | (0x88b4 >> 2),
551         0x00000000,
552         (0x0e00 << 16) | (0x88b8 >> 2),
553         0x00000000,
554         (0x0e00 << 16) | (0x88bc >> 2),
555         0x00000000,
556         (0x0400 << 16) | (0x89c0 >> 2),
557         0x00000000,
558         (0x0e00 << 16) | (0x88c4 >> 2),
559         0x00000000,
560         (0x0e00 << 16) | (0x88c8 >> 2),
561         0x00000000,
562         (0x0e00 << 16) | (0x88d0 >> 2),
563         0x00000000,
564         (0x0e00 << 16) | (0x88d4 >> 2),
565         0x00000000,
566         (0x0e00 << 16) | (0x88d8 >> 2),
567         0x00000000,
568         (0x0e00 << 16) | (0x8980 >> 2),
569         0x00000000,
570         (0x0e00 << 16) | (0x30938 >> 2),
571         0x00000000,
572         (0x0e00 << 16) | (0x3093c >> 2),
573         0x00000000,
574         (0x0e00 << 16) | (0x30940 >> 2),
575         0x00000000,
576         (0x0e00 << 16) | (0x89a0 >> 2),
577         0x00000000,
578         (0x0e00 << 16) | (0x30900 >> 2),
579         0x00000000,
580         (0x0e00 << 16) | (0x30904 >> 2),
581         0x00000000,
582         (0x0e00 << 16) | (0x89b4 >> 2),
583         0x00000000,
584         (0x0e00 << 16) | (0x3c210 >> 2),
585         0x00000000,
586         (0x0e00 << 16) | (0x3c214 >> 2),
587         0x00000000,
588         (0x0e00 << 16) | (0x3c218 >> 2),
589         0x00000000,
590         (0x0e00 << 16) | (0x8904 >> 2),
591         0x00000000,
592         0x5,
593         (0x0e00 << 16) | (0x8c28 >> 2),
594         (0x0e00 << 16) | (0x8c2c >> 2),
595         (0x0e00 << 16) | (0x8c30 >> 2),
596         (0x0e00 << 16) | (0x8c34 >> 2),
597         (0x0e00 << 16) | (0x9600 >> 2),
598 };
599
600 static const u32 kalindi_rlc_save_restore_register_list[] =
601 {
602         (0x0e00 << 16) | (0xc12c >> 2),
603         0x00000000,
604         (0x0e00 << 16) | (0xc140 >> 2),
605         0x00000000,
606         (0x0e00 << 16) | (0xc150 >> 2),
607         0x00000000,
608         (0x0e00 << 16) | (0xc15c >> 2),
609         0x00000000,
610         (0x0e00 << 16) | (0xc168 >> 2),
611         0x00000000,
612         (0x0e00 << 16) | (0xc170 >> 2),
613         0x00000000,
614         (0x0e00 << 16) | (0xc204 >> 2),
615         0x00000000,
616         (0x0e00 << 16) | (0xc2b4 >> 2),
617         0x00000000,
618         (0x0e00 << 16) | (0xc2b8 >> 2),
619         0x00000000,
620         (0x0e00 << 16) | (0xc2bc >> 2),
621         0x00000000,
622         (0x0e00 << 16) | (0xc2c0 >> 2),
623         0x00000000,
624         (0x0e00 << 16) | (0x8228 >> 2),
625         0x00000000,
626         (0x0e00 << 16) | (0x829c >> 2),
627         0x00000000,
628         (0x0e00 << 16) | (0x869c >> 2),
629         0x00000000,
630         (0x0600 << 16) | (0x98f4 >> 2),
631         0x00000000,
632         (0x0e00 << 16) | (0x98f8 >> 2),
633         0x00000000,
634         (0x0e00 << 16) | (0x9900 >> 2),
635         0x00000000,
636         (0x0e00 << 16) | (0xc260 >> 2),
637         0x00000000,
638         (0x0e00 << 16) | (0x90e8 >> 2),
639         0x00000000,
640         (0x0e00 << 16) | (0x3c000 >> 2),
641         0x00000000,
642         (0x0e00 << 16) | (0x3c00c >> 2),
643         0x00000000,
644         (0x0e00 << 16) | (0x8c1c >> 2),
645         0x00000000,
646         (0x0e00 << 16) | (0x9700 >> 2),
647         0x00000000,
648         (0x0e00 << 16) | (0xcd20 >> 2),
649         0x00000000,
650         (0x4e00 << 16) | (0xcd20 >> 2),
651         0x00000000,
652         (0x5e00 << 16) | (0xcd20 >> 2),
653         0x00000000,
654         (0x6e00 << 16) | (0xcd20 >> 2),
655         0x00000000,
656         (0x7e00 << 16) | (0xcd20 >> 2),
657         0x00000000,
658         (0x0e00 << 16) | (0x89bc >> 2),
659         0x00000000,
660         (0x0e00 << 16) | (0x8900 >> 2),
661         0x00000000,
662         0x3,
663         (0x0e00 << 16) | (0xc130 >> 2),
664         0x00000000,
665         (0x0e00 << 16) | (0xc134 >> 2),
666         0x00000000,
667         (0x0e00 << 16) | (0xc1fc >> 2),
668         0x00000000,
669         (0x0e00 << 16) | (0xc208 >> 2),
670         0x00000000,
671         (0x0e00 << 16) | (0xc264 >> 2),
672         0x00000000,
673         (0x0e00 << 16) | (0xc268 >> 2),
674         0x00000000,
675         (0x0e00 << 16) | (0xc26c >> 2),
676         0x00000000,
677         (0x0e00 << 16) | (0xc270 >> 2),
678         0x00000000,
679         (0x0e00 << 16) | (0xc274 >> 2),
680         0x00000000,
681         (0x0e00 << 16) | (0xc28c >> 2),
682         0x00000000,
683         (0x0e00 << 16) | (0xc290 >> 2),
684         0x00000000,
685         (0x0e00 << 16) | (0xc294 >> 2),
686         0x00000000,
687         (0x0e00 << 16) | (0xc298 >> 2),
688         0x00000000,
689         (0x0e00 << 16) | (0xc2a0 >> 2),
690         0x00000000,
691         (0x0e00 << 16) | (0xc2a4 >> 2),
692         0x00000000,
693         (0x0e00 << 16) | (0xc2a8 >> 2),
694         0x00000000,
695         (0x0e00 << 16) | (0xc2ac >> 2),
696         0x00000000,
697         (0x0e00 << 16) | (0x301d0 >> 2),
698         0x00000000,
699         (0x0e00 << 16) | (0x30238 >> 2),
700         0x00000000,
701         (0x0e00 << 16) | (0x30250 >> 2),
702         0x00000000,
703         (0x0e00 << 16) | (0x30254 >> 2),
704         0x00000000,
705         (0x0e00 << 16) | (0x30258 >> 2),
706         0x00000000,
707         (0x0e00 << 16) | (0x3025c >> 2),
708         0x00000000,
709         (0x4e00 << 16) | (0xc900 >> 2),
710         0x00000000,
711         (0x5e00 << 16) | (0xc900 >> 2),
712         0x00000000,
713         (0x6e00 << 16) | (0xc900 >> 2),
714         0x00000000,
715         (0x7e00 << 16) | (0xc900 >> 2),
716         0x00000000,
717         (0x4e00 << 16) | (0xc904 >> 2),
718         0x00000000,
719         (0x5e00 << 16) | (0xc904 >> 2),
720         0x00000000,
721         (0x6e00 << 16) | (0xc904 >> 2),
722         0x00000000,
723         (0x7e00 << 16) | (0xc904 >> 2),
724         0x00000000,
725         (0x4e00 << 16) | (0xc908 >> 2),
726         0x00000000,
727         (0x5e00 << 16) | (0xc908 >> 2),
728         0x00000000,
729         (0x6e00 << 16) | (0xc908 >> 2),
730         0x00000000,
731         (0x7e00 << 16) | (0xc908 >> 2),
732         0x00000000,
733         (0x4e00 << 16) | (0xc90c >> 2),
734         0x00000000,
735         (0x5e00 << 16) | (0xc90c >> 2),
736         0x00000000,
737         (0x6e00 << 16) | (0xc90c >> 2),
738         0x00000000,
739         (0x7e00 << 16) | (0xc90c >> 2),
740         0x00000000,
741         (0x4e00 << 16) | (0xc910 >> 2),
742         0x00000000,
743         (0x5e00 << 16) | (0xc910 >> 2),
744         0x00000000,
745         (0x6e00 << 16) | (0xc910 >> 2),
746         0x00000000,
747         (0x7e00 << 16) | (0xc910 >> 2),
748         0x00000000,
749         (0x0e00 << 16) | (0xc99c >> 2),
750         0x00000000,
751         (0x0e00 << 16) | (0x9834 >> 2),
752         0x00000000,
753         (0x0000 << 16) | (0x30f00 >> 2),
754         0x00000000,
755         (0x0000 << 16) | (0x30f04 >> 2),
756         0x00000000,
757         (0x0000 << 16) | (0x30f08 >> 2),
758         0x00000000,
759         (0x0000 << 16) | (0x30f0c >> 2),
760         0x00000000,
761         (0x0600 << 16) | (0x9b7c >> 2),
762         0x00000000,
763         (0x0e00 << 16) | (0x8a14 >> 2),
764         0x00000000,
765         (0x0e00 << 16) | (0x8a18 >> 2),
766         0x00000000,
767         (0x0600 << 16) | (0x30a00 >> 2),
768         0x00000000,
769         (0x0e00 << 16) | (0x8bf0 >> 2),
770         0x00000000,
771         (0x0e00 << 16) | (0x8bcc >> 2),
772         0x00000000,
773         (0x0e00 << 16) | (0x8b24 >> 2),
774         0x00000000,
775         (0x0e00 << 16) | (0x30a04 >> 2),
776         0x00000000,
777         (0x0600 << 16) | (0x30a10 >> 2),
778         0x00000000,
779         (0x0600 << 16) | (0x30a14 >> 2),
780         0x00000000,
781         (0x0600 << 16) | (0x30a18 >> 2),
782         0x00000000,
783         (0x0600 << 16) | (0x30a2c >> 2),
784         0x00000000,
785         (0x0e00 << 16) | (0xc700 >> 2),
786         0x00000000,
787         (0x0e00 << 16) | (0xc704 >> 2),
788         0x00000000,
789         (0x0e00 << 16) | (0xc708 >> 2),
790         0x00000000,
791         (0x0e00 << 16) | (0xc768 >> 2),
792         0x00000000,
793         (0x0400 << 16) | (0xc770 >> 2),
794         0x00000000,
795         (0x0400 << 16) | (0xc774 >> 2),
796         0x00000000,
797         (0x0400 << 16) | (0xc798 >> 2),
798         0x00000000,
799         (0x0400 << 16) | (0xc79c >> 2),
800         0x00000000,
801         (0x0e00 << 16) | (0x9100 >> 2),
802         0x00000000,
803         (0x0e00 << 16) | (0x3c010 >> 2),
804         0x00000000,
805         (0x0e00 << 16) | (0x8c00 >> 2),
806         0x00000000,
807         (0x0e00 << 16) | (0x8c04 >> 2),
808         0x00000000,
809         (0x0e00 << 16) | (0x8c20 >> 2),
810         0x00000000,
811         (0x0e00 << 16) | (0x8c38 >> 2),
812         0x00000000,
813         (0x0e00 << 16) | (0x8c3c >> 2),
814         0x00000000,
815         (0x0e00 << 16) | (0xae00 >> 2),
816         0x00000000,
817         (0x0e00 << 16) | (0x9604 >> 2),
818         0x00000000,
819         (0x0e00 << 16) | (0xac08 >> 2),
820         0x00000000,
821         (0x0e00 << 16) | (0xac0c >> 2),
822         0x00000000,
823         (0x0e00 << 16) | (0xac10 >> 2),
824         0x00000000,
825         (0x0e00 << 16) | (0xac14 >> 2),
826         0x00000000,
827         (0x0e00 << 16) | (0xac58 >> 2),
828         0x00000000,
829         (0x0e00 << 16) | (0xac68 >> 2),
830         0x00000000,
831         (0x0e00 << 16) | (0xac6c >> 2),
832         0x00000000,
833         (0x0e00 << 16) | (0xac70 >> 2),
834         0x00000000,
835         (0x0e00 << 16) | (0xac74 >> 2),
836         0x00000000,
837         (0x0e00 << 16) | (0xac78 >> 2),
838         0x00000000,
839         (0x0e00 << 16) | (0xac7c >> 2),
840         0x00000000,
841         (0x0e00 << 16) | (0xac80 >> 2),
842         0x00000000,
843         (0x0e00 << 16) | (0xac84 >> 2),
844         0x00000000,
845         (0x0e00 << 16) | (0xac88 >> 2),
846         0x00000000,
847         (0x0e00 << 16) | (0xac8c >> 2),
848         0x00000000,
849         (0x0e00 << 16) | (0x970c >> 2),
850         0x00000000,
851         (0x0e00 << 16) | (0x9714 >> 2),
852         0x00000000,
853         (0x0e00 << 16) | (0x9718 >> 2),
854         0x00000000,
855         (0x0e00 << 16) | (0x971c >> 2),
856         0x00000000,
857         (0x0e00 << 16) | (0x31068 >> 2),
858         0x00000000,
859         (0x4e00 << 16) | (0x31068 >> 2),
860         0x00000000,
861         (0x5e00 << 16) | (0x31068 >> 2),
862         0x00000000,
863         (0x6e00 << 16) | (0x31068 >> 2),
864         0x00000000,
865         (0x7e00 << 16) | (0x31068 >> 2),
866         0x00000000,
867         (0x0e00 << 16) | (0xcd10 >> 2),
868         0x00000000,
869         (0x0e00 << 16) | (0xcd14 >> 2),
870         0x00000000,
871         (0x0e00 << 16) | (0x88b0 >> 2),
872         0x00000000,
873         (0x0e00 << 16) | (0x88b4 >> 2),
874         0x00000000,
875         (0x0e00 << 16) | (0x88b8 >> 2),
876         0x00000000,
877         (0x0e00 << 16) | (0x88bc >> 2),
878         0x00000000,
879         (0x0400 << 16) | (0x89c0 >> 2),
880         0x00000000,
881         (0x0e00 << 16) | (0x88c4 >> 2),
882         0x00000000,
883         (0x0e00 << 16) | (0x88c8 >> 2),
884         0x00000000,
885         (0x0e00 << 16) | (0x88d0 >> 2),
886         0x00000000,
887         (0x0e00 << 16) | (0x88d4 >> 2),
888         0x00000000,
889         (0x0e00 << 16) | (0x88d8 >> 2),
890         0x00000000,
891         (0x0e00 << 16) | (0x8980 >> 2),
892         0x00000000,
893         (0x0e00 << 16) | (0x30938 >> 2),
894         0x00000000,
895         (0x0e00 << 16) | (0x3093c >> 2),
896         0x00000000,
897         (0x0e00 << 16) | (0x30940 >> 2),
898         0x00000000,
899         (0x0e00 << 16) | (0x89a0 >> 2),
900         0x00000000,
901         (0x0e00 << 16) | (0x30900 >> 2),
902         0x00000000,
903         (0x0e00 << 16) | (0x30904 >> 2),
904         0x00000000,
905         (0x0e00 << 16) | (0x89b4 >> 2),
906         0x00000000,
907         (0x0e00 << 16) | (0x3e1fc >> 2),
908         0x00000000,
909         (0x0e00 << 16) | (0x3c210 >> 2),
910         0x00000000,
911         (0x0e00 << 16) | (0x3c214 >> 2),
912         0x00000000,
913         (0x0e00 << 16) | (0x3c218 >> 2),
914         0x00000000,
915         (0x0e00 << 16) | (0x8904 >> 2),
916         0x00000000,
917         0x5,
918         (0x0e00 << 16) | (0x8c28 >> 2),
919         (0x0e00 << 16) | (0x8c2c >> 2),
920         (0x0e00 << 16) | (0x8c30 >> 2),
921         (0x0e00 << 16) | (0x8c34 >> 2),
922         (0x0e00 << 16) | (0x9600 >> 2),
923 };
924
925 static const u32 bonaire_golden_spm_registers[] =
926 {
927         0x30800, 0xe0ffffff, 0xe0000000
928 };
929
930 static const u32 bonaire_golden_common_registers[] =
931 {
932         0xc770, 0xffffffff, 0x00000800,
933         0xc774, 0xffffffff, 0x00000800,
934         0xc798, 0xffffffff, 0x00007fbf,
935         0xc79c, 0xffffffff, 0x00007faf
936 };
937
938 static const u32 bonaire_golden_registers[] =
939 {
940         0x3354, 0x00000333, 0x00000333,
941         0x3350, 0x000c0fc0, 0x00040200,
942         0x9a10, 0x00010000, 0x00058208,
943         0x3c000, 0xffff1fff, 0x00140000,
944         0x3c200, 0xfdfc0fff, 0x00000100,
945         0x3c234, 0x40000000, 0x40000200,
946         0x9830, 0xffffffff, 0x00000000,
947         0x9834, 0xf00fffff, 0x00000400,
948         0x9838, 0x0002021c, 0x00020200,
949         0xc78, 0x00000080, 0x00000000,
950         0x5bb0, 0x000000f0, 0x00000070,
951         0x5bc0, 0xf0311fff, 0x80300000,
952         0x98f8, 0x73773777, 0x12010001,
953         0x350c, 0x00810000, 0x408af000,
954         0x7030, 0x31000111, 0x00000011,
955         0x2f48, 0x73773777, 0x12010001,
956         0x220c, 0x00007fb6, 0x0021a1b1,
957         0x2210, 0x00007fb6, 0x002021b1,
958         0x2180, 0x00007fb6, 0x00002191,
959         0x2218, 0x00007fb6, 0x002121b1,
960         0x221c, 0x00007fb6, 0x002021b1,
961         0x21dc, 0x00007fb6, 0x00002191,
962         0x21e0, 0x00007fb6, 0x00002191,
963         0x3628, 0x0000003f, 0x0000000a,
964         0x362c, 0x0000003f, 0x0000000a,
965         0x2ae4, 0x00073ffe, 0x000022a2,
966         0x240c, 0x000007ff, 0x00000000,
967         0x8a14, 0xf000003f, 0x00000007,
968         0x8bf0, 0x00002001, 0x00000001,
969         0x8b24, 0xffffffff, 0x00ffffff,
970         0x30a04, 0x0000ff0f, 0x00000000,
971         0x28a4c, 0x07ffffff, 0x06000000,
972         0x4d8, 0x00000fff, 0x00000100,
973         0x3e78, 0x00000001, 0x00000002,
974         0x9100, 0x03000000, 0x0362c688,
975         0x8c00, 0x000000ff, 0x00000001,
976         0xe40, 0x00001fff, 0x00001fff,
977         0x9060, 0x0000007f, 0x00000020,
978         0x9508, 0x00010000, 0x00010000,
979         0xac14, 0x000003ff, 0x000000f3,
980         0xac0c, 0xffffffff, 0x00001032
981 };
982
983 static const u32 bonaire_mgcg_cgcg_init[] =
984 {
985         0xc420, 0xffffffff, 0xfffffffc,
986         0x30800, 0xffffffff, 0xe0000000,
987         0x3c2a0, 0xffffffff, 0x00000100,
988         0x3c208, 0xffffffff, 0x00000100,
989         0x3c2c0, 0xffffffff, 0xc0000100,
990         0x3c2c8, 0xffffffff, 0xc0000100,
991         0x3c2c4, 0xffffffff, 0xc0000100,
992         0x55e4, 0xffffffff, 0x00600100,
993         0x3c280, 0xffffffff, 0x00000100,
994         0x3c214, 0xffffffff, 0x06000100,
995         0x3c220, 0xffffffff, 0x00000100,
996         0x3c218, 0xffffffff, 0x06000100,
997         0x3c204, 0xffffffff, 0x00000100,
998         0x3c2e0, 0xffffffff, 0x00000100,
999         0x3c224, 0xffffffff, 0x00000100,
1000         0x3c200, 0xffffffff, 0x00000100,
1001         0x3c230, 0xffffffff, 0x00000100,
1002         0x3c234, 0xffffffff, 0x00000100,
1003         0x3c250, 0xffffffff, 0x00000100,
1004         0x3c254, 0xffffffff, 0x00000100,
1005         0x3c258, 0xffffffff, 0x00000100,
1006         0x3c25c, 0xffffffff, 0x00000100,
1007         0x3c260, 0xffffffff, 0x00000100,
1008         0x3c27c, 0xffffffff, 0x00000100,
1009         0x3c278, 0xffffffff, 0x00000100,
1010         0x3c210, 0xffffffff, 0x06000100,
1011         0x3c290, 0xffffffff, 0x00000100,
1012         0x3c274, 0xffffffff, 0x00000100,
1013         0x3c2b4, 0xffffffff, 0x00000100,
1014         0x3c2b0, 0xffffffff, 0x00000100,
1015         0x3c270, 0xffffffff, 0x00000100,
1016         0x30800, 0xffffffff, 0xe0000000,
1017         0x3c020, 0xffffffff, 0x00010000,
1018         0x3c024, 0xffffffff, 0x00030002,
1019         0x3c028, 0xffffffff, 0x00040007,
1020         0x3c02c, 0xffffffff, 0x00060005,
1021         0x3c030, 0xffffffff, 0x00090008,
1022         0x3c034, 0xffffffff, 0x00010000,
1023         0x3c038, 0xffffffff, 0x00030002,
1024         0x3c03c, 0xffffffff, 0x00040007,
1025         0x3c040, 0xffffffff, 0x00060005,
1026         0x3c044, 0xffffffff, 0x00090008,
1027         0x3c048, 0xffffffff, 0x00010000,
1028         0x3c04c, 0xffffffff, 0x00030002,
1029         0x3c050, 0xffffffff, 0x00040007,
1030         0x3c054, 0xffffffff, 0x00060005,
1031         0x3c058, 0xffffffff, 0x00090008,
1032         0x3c05c, 0xffffffff, 0x00010000,
1033         0x3c060, 0xffffffff, 0x00030002,
1034         0x3c064, 0xffffffff, 0x00040007,
1035         0x3c068, 0xffffffff, 0x00060005,
1036         0x3c06c, 0xffffffff, 0x00090008,
1037         0x3c070, 0xffffffff, 0x00010000,
1038         0x3c074, 0xffffffff, 0x00030002,
1039         0x3c078, 0xffffffff, 0x00040007,
1040         0x3c07c, 0xffffffff, 0x00060005,
1041         0x3c080, 0xffffffff, 0x00090008,
1042         0x3c084, 0xffffffff, 0x00010000,
1043         0x3c088, 0xffffffff, 0x00030002,
1044         0x3c08c, 0xffffffff, 0x00040007,
1045         0x3c090, 0xffffffff, 0x00060005,
1046         0x3c094, 0xffffffff, 0x00090008,
1047         0x3c098, 0xffffffff, 0x00010000,
1048         0x3c09c, 0xffffffff, 0x00030002,
1049         0x3c0a0, 0xffffffff, 0x00040007,
1050         0x3c0a4, 0xffffffff, 0x00060005,
1051         0x3c0a8, 0xffffffff, 0x00090008,
1052         0x3c000, 0xffffffff, 0x96e00200,
1053         0x8708, 0xffffffff, 0x00900100,
1054         0xc424, 0xffffffff, 0x0020003f,
1055         0x38, 0xffffffff, 0x0140001c,
1056         0x3c, 0x000f0000, 0x000f0000,
1057         0x220, 0xffffffff, 0xC060000C,
1058         0x224, 0xc0000fff, 0x00000100,
1059         0xf90, 0xffffffff, 0x00000100,
1060         0xf98, 0x00000101, 0x00000000,
1061         0x20a8, 0xffffffff, 0x00000104,
1062         0x55e4, 0xff000fff, 0x00000100,
1063         0x30cc, 0xc0000fff, 0x00000104,
1064         0xc1e4, 0x00000001, 0x00000001,
1065         0xd00c, 0xff000ff0, 0x00000100,
1066         0xd80c, 0xff000ff0, 0x00000100
1067 };
1068
1069 static const u32 spectre_golden_spm_registers[] =
1070 {
1071         0x30800, 0xe0ffffff, 0xe0000000
1072 };
1073
1074 static const u32 spectre_golden_common_registers[] =
1075 {
1076         0xc770, 0xffffffff, 0x00000800,
1077         0xc774, 0xffffffff, 0x00000800,
1078         0xc798, 0xffffffff, 0x00007fbf,
1079         0xc79c, 0xffffffff, 0x00007faf
1080 };
1081
1082 static const u32 spectre_golden_registers[] =
1083 {
1084         0x3c000, 0xffff1fff, 0x96940200,
1085         0x3c00c, 0xffff0001, 0xff000000,
1086         0x3c200, 0xfffc0fff, 0x00000100,
1087         0x6ed8, 0x00010101, 0x00010000,
1088         0x9834, 0xf00fffff, 0x00000400,
1089         0x9838, 0xfffffffc, 0x00020200,
1090         0x5bb0, 0x000000f0, 0x00000070,
1091         0x5bc0, 0xf0311fff, 0x80300000,
1092         0x98f8, 0x73773777, 0x12010001,
1093         0x9b7c, 0x00ff0000, 0x00fc0000,
1094         0x2f48, 0x73773777, 0x12010001,
1095         0x8a14, 0xf000003f, 0x00000007,
1096         0x8b24, 0xffffffff, 0x00ffffff,
1097         0x28350, 0x3f3f3fff, 0x00000082,
1098         0x28355, 0x0000003f, 0x00000000,
1099         0x3e78, 0x00000001, 0x00000002,
1100         0x913c, 0xffff03df, 0x00000004,
1101         0xc768, 0x00000008, 0x00000008,
1102         0x8c00, 0x000008ff, 0x00000800,
1103         0x9508, 0x00010000, 0x00010000,
1104         0xac0c, 0xffffffff, 0x54763210,
1105         0x214f8, 0x01ff01ff, 0x00000002,
1106         0x21498, 0x007ff800, 0x00200000,
1107         0x2015c, 0xffffffff, 0x00000f40,
1108         0x30934, 0xffffffff, 0x00000001
1109 };
1110
1111 static const u32 spectre_mgcg_cgcg_init[] =
1112 {
1113         0xc420, 0xffffffff, 0xfffffffc,
1114         0x30800, 0xffffffff, 0xe0000000,
1115         0x3c2a0, 0xffffffff, 0x00000100,
1116         0x3c208, 0xffffffff, 0x00000100,
1117         0x3c2c0, 0xffffffff, 0x00000100,
1118         0x3c2c8, 0xffffffff, 0x00000100,
1119         0x3c2c4, 0xffffffff, 0x00000100,
1120         0x55e4, 0xffffffff, 0x00600100,
1121         0x3c280, 0xffffffff, 0x00000100,
1122         0x3c214, 0xffffffff, 0x06000100,
1123         0x3c220, 0xffffffff, 0x00000100,
1124         0x3c218, 0xffffffff, 0x06000100,
1125         0x3c204, 0xffffffff, 0x00000100,
1126         0x3c2e0, 0xffffffff, 0x00000100,
1127         0x3c224, 0xffffffff, 0x00000100,
1128         0x3c200, 0xffffffff, 0x00000100,
1129         0x3c230, 0xffffffff, 0x00000100,
1130         0x3c234, 0xffffffff, 0x00000100,
1131         0x3c250, 0xffffffff, 0x00000100,
1132         0x3c254, 0xffffffff, 0x00000100,
1133         0x3c258, 0xffffffff, 0x00000100,
1134         0x3c25c, 0xffffffff, 0x00000100,
1135         0x3c260, 0xffffffff, 0x00000100,
1136         0x3c27c, 0xffffffff, 0x00000100,
1137         0x3c278, 0xffffffff, 0x00000100,
1138         0x3c210, 0xffffffff, 0x06000100,
1139         0x3c290, 0xffffffff, 0x00000100,
1140         0x3c274, 0xffffffff, 0x00000100,
1141         0x3c2b4, 0xffffffff, 0x00000100,
1142         0x3c2b0, 0xffffffff, 0x00000100,
1143         0x3c270, 0xffffffff, 0x00000100,
1144         0x30800, 0xffffffff, 0xe0000000,
1145         0x3c020, 0xffffffff, 0x00010000,
1146         0x3c024, 0xffffffff, 0x00030002,
1147         0x3c028, 0xffffffff, 0x00040007,
1148         0x3c02c, 0xffffffff, 0x00060005,
1149         0x3c030, 0xffffffff, 0x00090008,
1150         0x3c034, 0xffffffff, 0x00010000,
1151         0x3c038, 0xffffffff, 0x00030002,
1152         0x3c03c, 0xffffffff, 0x00040007,
1153         0x3c040, 0xffffffff, 0x00060005,
1154         0x3c044, 0xffffffff, 0x00090008,
1155         0x3c048, 0xffffffff, 0x00010000,
1156         0x3c04c, 0xffffffff, 0x00030002,
1157         0x3c050, 0xffffffff, 0x00040007,
1158         0x3c054, 0xffffffff, 0x00060005,
1159         0x3c058, 0xffffffff, 0x00090008,
1160         0x3c05c, 0xffffffff, 0x00010000,
1161         0x3c060, 0xffffffff, 0x00030002,
1162         0x3c064, 0xffffffff, 0x00040007,
1163         0x3c068, 0xffffffff, 0x00060005,
1164         0x3c06c, 0xffffffff, 0x00090008,
1165         0x3c070, 0xffffffff, 0x00010000,
1166         0x3c074, 0xffffffff, 0x00030002,
1167         0x3c078, 0xffffffff, 0x00040007,
1168         0x3c07c, 0xffffffff, 0x00060005,
1169         0x3c080, 0xffffffff, 0x00090008,
1170         0x3c084, 0xffffffff, 0x00010000,
1171         0x3c088, 0xffffffff, 0x00030002,
1172         0x3c08c, 0xffffffff, 0x00040007,
1173         0x3c090, 0xffffffff, 0x00060005,
1174         0x3c094, 0xffffffff, 0x00090008,
1175         0x3c098, 0xffffffff, 0x00010000,
1176         0x3c09c, 0xffffffff, 0x00030002,
1177         0x3c0a0, 0xffffffff, 0x00040007,
1178         0x3c0a4, 0xffffffff, 0x00060005,
1179         0x3c0a8, 0xffffffff, 0x00090008,
1180         0x3c0ac, 0xffffffff, 0x00010000,
1181         0x3c0b0, 0xffffffff, 0x00030002,
1182         0x3c0b4, 0xffffffff, 0x00040007,
1183         0x3c0b8, 0xffffffff, 0x00060005,
1184         0x3c0bc, 0xffffffff, 0x00090008,
1185         0x3c000, 0xffffffff, 0x96e00200,
1186         0x8708, 0xffffffff, 0x00900100,
1187         0xc424, 0xffffffff, 0x0020003f,
1188         0x38, 0xffffffff, 0x0140001c,
1189         0x3c, 0x000f0000, 0x000f0000,
1190         0x220, 0xffffffff, 0xC060000C,
1191         0x224, 0xc0000fff, 0x00000100,
1192         0xf90, 0xffffffff, 0x00000100,
1193         0xf98, 0x00000101, 0x00000000,
1194         0x20a8, 0xffffffff, 0x00000104,
1195         0x55e4, 0xff000fff, 0x00000100,
1196         0x30cc, 0xc0000fff, 0x00000104,
1197         0xc1e4, 0x00000001, 0x00000001,
1198         0xd00c, 0xff000ff0, 0x00000100,
1199         0xd80c, 0xff000ff0, 0x00000100
1200 };
1201
1202 static const u32 kalindi_golden_spm_registers[] =
1203 {
1204         0x30800, 0xe0ffffff, 0xe0000000
1205 };
1206
1207 static const u32 kalindi_golden_common_registers[] =
1208 {
1209         0xc770, 0xffffffff, 0x00000800,
1210         0xc774, 0xffffffff, 0x00000800,
1211         0xc798, 0xffffffff, 0x00007fbf,
1212         0xc79c, 0xffffffff, 0x00007faf
1213 };
1214
1215 static const u32 kalindi_golden_registers[] =
1216 {
1217         0x3c000, 0xffffdfff, 0x6e944040,
1218         0x55e4, 0xff607fff, 0xfc000100,
1219         0x3c220, 0xff000fff, 0x00000100,
1220         0x3c224, 0xff000fff, 0x00000100,
1221         0x3c200, 0xfffc0fff, 0x00000100,
1222         0x6ed8, 0x00010101, 0x00010000,
1223         0x9830, 0xffffffff, 0x00000000,
1224         0x9834, 0xf00fffff, 0x00000400,
1225         0x5bb0, 0x000000f0, 0x00000070,
1226         0x5bc0, 0xf0311fff, 0x80300000,
1227         0x98f8, 0x73773777, 0x12010001,
1228         0x98fc, 0xffffffff, 0x00000010,
1229         0x9b7c, 0x00ff0000, 0x00fc0000,
1230         0x8030, 0x00001f0f, 0x0000100a,
1231         0x2f48, 0x73773777, 0x12010001,
1232         0x2408, 0x000fffff, 0x000c007f,
1233         0x8a14, 0xf000003f, 0x00000007,
1234         0x8b24, 0x3fff3fff, 0x00ffcfff,
1235         0x30a04, 0x0000ff0f, 0x00000000,
1236         0x28a4c, 0x07ffffff, 0x06000000,
1237         0x4d8, 0x00000fff, 0x00000100,
1238         0x3e78, 0x00000001, 0x00000002,
1239         0xc768, 0x00000008, 0x00000008,
1240         0x8c00, 0x000000ff, 0x00000003,
1241         0x214f8, 0x01ff01ff, 0x00000002,
1242         0x21498, 0x007ff800, 0x00200000,
1243         0x2015c, 0xffffffff, 0x00000f40,
1244         0x88c4, 0x001f3ae3, 0x00000082,
1245         0x88d4, 0x0000001f, 0x00000010,
1246         0x30934, 0xffffffff, 0x00000000
1247 };
1248
1249 static const u32 kalindi_mgcg_cgcg_init[] =
1250 {
1251         0xc420, 0xffffffff, 0xfffffffc,
1252         0x30800, 0xffffffff, 0xe0000000,
1253         0x3c2a0, 0xffffffff, 0x00000100,
1254         0x3c208, 0xffffffff, 0x00000100,
1255         0x3c2c0, 0xffffffff, 0x00000100,
1256         0x3c2c8, 0xffffffff, 0x00000100,
1257         0x3c2c4, 0xffffffff, 0x00000100,
1258         0x55e4, 0xffffffff, 0x00600100,
1259         0x3c280, 0xffffffff, 0x00000100,
1260         0x3c214, 0xffffffff, 0x06000100,
1261         0x3c220, 0xffffffff, 0x00000100,
1262         0x3c218, 0xffffffff, 0x06000100,
1263         0x3c204, 0xffffffff, 0x00000100,
1264         0x3c2e0, 0xffffffff, 0x00000100,
1265         0x3c224, 0xffffffff, 0x00000100,
1266         0x3c200, 0xffffffff, 0x00000100,
1267         0x3c230, 0xffffffff, 0x00000100,
1268         0x3c234, 0xffffffff, 0x00000100,
1269         0x3c250, 0xffffffff, 0x00000100,
1270         0x3c254, 0xffffffff, 0x00000100,
1271         0x3c258, 0xffffffff, 0x00000100,
1272         0x3c25c, 0xffffffff, 0x00000100,
1273         0x3c260, 0xffffffff, 0x00000100,
1274         0x3c27c, 0xffffffff, 0x00000100,
1275         0x3c278, 0xffffffff, 0x00000100,
1276         0x3c210, 0xffffffff, 0x06000100,
1277         0x3c290, 0xffffffff, 0x00000100,
1278         0x3c274, 0xffffffff, 0x00000100,
1279         0x3c2b4, 0xffffffff, 0x00000100,
1280         0x3c2b0, 0xffffffff, 0x00000100,
1281         0x3c270, 0xffffffff, 0x00000100,
1282         0x30800, 0xffffffff, 0xe0000000,
1283         0x3c020, 0xffffffff, 0x00010000,
1284         0x3c024, 0xffffffff, 0x00030002,
1285         0x3c028, 0xffffffff, 0x00040007,
1286         0x3c02c, 0xffffffff, 0x00060005,
1287         0x3c030, 0xffffffff, 0x00090008,
1288         0x3c034, 0xffffffff, 0x00010000,
1289         0x3c038, 0xffffffff, 0x00030002,
1290         0x3c03c, 0xffffffff, 0x00040007,
1291         0x3c040, 0xffffffff, 0x00060005,
1292         0x3c044, 0xffffffff, 0x00090008,
1293         0x3c000, 0xffffffff, 0x96e00200,
1294         0x8708, 0xffffffff, 0x00900100,
1295         0xc424, 0xffffffff, 0x0020003f,
1296         0x38, 0xffffffff, 0x0140001c,
1297         0x3c, 0x000f0000, 0x000f0000,
1298         0x220, 0xffffffff, 0xC060000C,
1299         0x224, 0xc0000fff, 0x00000100,
1300         0x20a8, 0xffffffff, 0x00000104,
1301         0x55e4, 0xff000fff, 0x00000100,
1302         0x30cc, 0xc0000fff, 0x00000104,
1303         0xc1e4, 0x00000001, 0x00000001,
1304         0xd00c, 0xff000ff0, 0x00000100,
1305         0xd80c, 0xff000ff0, 0x00000100
1306 };
1307
1308 static const u32 hawaii_golden_spm_registers[] =
1309 {
1310         0x30800, 0xe0ffffff, 0xe0000000
1311 };
1312
1313 static const u32 hawaii_golden_common_registers[] =
1314 {
1315         0x30800, 0xffffffff, 0xe0000000,
1316         0x28350, 0xffffffff, 0x3a00161a,
1317         0x28354, 0xffffffff, 0x0000002e,
1318         0x9a10, 0xffffffff, 0x00018208,
1319         0x98f8, 0xffffffff, 0x12011003
1320 };
1321
1322 static const u32 hawaii_golden_registers[] =
1323 {
1324         0x3354, 0x00000333, 0x00000333,
1325         0x9a10, 0x00010000, 0x00058208,
1326         0x9830, 0xffffffff, 0x00000000,
1327         0x9834, 0xf00fffff, 0x00000400,
1328         0x9838, 0x0002021c, 0x00020200,
1329         0xc78, 0x00000080, 0x00000000,
1330         0x5bb0, 0x000000f0, 0x00000070,
1331         0x5bc0, 0xf0311fff, 0x80300000,
1332         0x350c, 0x00810000, 0x408af000,
1333         0x7030, 0x31000111, 0x00000011,
1334         0x2f48, 0x73773777, 0x12010001,
1335         0x2120, 0x0000007f, 0x0000001b,
1336         0x21dc, 0x00007fb6, 0x00002191,
1337         0x3628, 0x0000003f, 0x0000000a,
1338         0x362c, 0x0000003f, 0x0000000a,
1339         0x2ae4, 0x00073ffe, 0x000022a2,
1340         0x240c, 0x000007ff, 0x00000000,
1341         0x8bf0, 0x00002001, 0x00000001,
1342         0x8b24, 0xffffffff, 0x00ffffff,
1343         0x30a04, 0x0000ff0f, 0x00000000,
1344         0x28a4c, 0x07ffffff, 0x06000000,
1345         0x3e78, 0x00000001, 0x00000002,
1346         0xc768, 0x00000008, 0x00000008,
1347         0xc770, 0x00000f00, 0x00000800,
1348         0xc774, 0x00000f00, 0x00000800,
1349         0xc798, 0x00ffffff, 0x00ff7fbf,
1350         0xc79c, 0x00ffffff, 0x00ff7faf,
1351         0x8c00, 0x000000ff, 0x00000800,
1352         0xe40, 0x00001fff, 0x00001fff,
1353         0x9060, 0x0000007f, 0x00000020,
1354         0x9508, 0x00010000, 0x00010000,
1355         0xae00, 0x00100000, 0x000ff07c,
1356         0xac14, 0x000003ff, 0x0000000f,
1357         0xac10, 0xffffffff, 0x7564fdec,
1358         0xac0c, 0xffffffff, 0x3120b9a8,
1359         0xac08, 0x20000000, 0x0f9c0000
1360 };
1361
1362 static const u32 hawaii_mgcg_cgcg_init[] =
1363 {
1364         0xc420, 0xffffffff, 0xfffffffd,
1365         0x30800, 0xffffffff, 0xe0000000,
1366         0x3c2a0, 0xffffffff, 0x00000100,
1367         0x3c208, 0xffffffff, 0x00000100,
1368         0x3c2c0, 0xffffffff, 0x00000100,
1369         0x3c2c8, 0xffffffff, 0x00000100,
1370         0x3c2c4, 0xffffffff, 0x00000100,
1371         0x55e4, 0xffffffff, 0x00200100,
1372         0x3c280, 0xffffffff, 0x00000100,
1373         0x3c214, 0xffffffff, 0x06000100,
1374         0x3c220, 0xffffffff, 0x00000100,
1375         0x3c218, 0xffffffff, 0x06000100,
1376         0x3c204, 0xffffffff, 0x00000100,
1377         0x3c2e0, 0xffffffff, 0x00000100,
1378         0x3c224, 0xffffffff, 0x00000100,
1379         0x3c200, 0xffffffff, 0x00000100,
1380         0x3c230, 0xffffffff, 0x00000100,
1381         0x3c234, 0xffffffff, 0x00000100,
1382         0x3c250, 0xffffffff, 0x00000100,
1383         0x3c254, 0xffffffff, 0x00000100,
1384         0x3c258, 0xffffffff, 0x00000100,
1385         0x3c25c, 0xffffffff, 0x00000100,
1386         0x3c260, 0xffffffff, 0x00000100,
1387         0x3c27c, 0xffffffff, 0x00000100,
1388         0x3c278, 0xffffffff, 0x00000100,
1389         0x3c210, 0xffffffff, 0x06000100,
1390         0x3c290, 0xffffffff, 0x00000100,
1391         0x3c274, 0xffffffff, 0x00000100,
1392         0x3c2b4, 0xffffffff, 0x00000100,
1393         0x3c2b0, 0xffffffff, 0x00000100,
1394         0x3c270, 0xffffffff, 0x00000100,
1395         0x30800, 0xffffffff, 0xe0000000,
1396         0x3c020, 0xffffffff, 0x00010000,
1397         0x3c024, 0xffffffff, 0x00030002,
1398         0x3c028, 0xffffffff, 0x00040007,
1399         0x3c02c, 0xffffffff, 0x00060005,
1400         0x3c030, 0xffffffff, 0x00090008,
1401         0x3c034, 0xffffffff, 0x00010000,
1402         0x3c038, 0xffffffff, 0x00030002,
1403         0x3c03c, 0xffffffff, 0x00040007,
1404         0x3c040, 0xffffffff, 0x00060005,
1405         0x3c044, 0xffffffff, 0x00090008,
1406         0x3c048, 0xffffffff, 0x00010000,
1407         0x3c04c, 0xffffffff, 0x00030002,
1408         0x3c050, 0xffffffff, 0x00040007,
1409         0x3c054, 0xffffffff, 0x00060005,
1410         0x3c058, 0xffffffff, 0x00090008,
1411         0x3c05c, 0xffffffff, 0x00010000,
1412         0x3c060, 0xffffffff, 0x00030002,
1413         0x3c064, 0xffffffff, 0x00040007,
1414         0x3c068, 0xffffffff, 0x00060005,
1415         0x3c06c, 0xffffffff, 0x00090008,
1416         0x3c070, 0xffffffff, 0x00010000,
1417         0x3c074, 0xffffffff, 0x00030002,
1418         0x3c078, 0xffffffff, 0x00040007,
1419         0x3c07c, 0xffffffff, 0x00060005,
1420         0x3c080, 0xffffffff, 0x00090008,
1421         0x3c084, 0xffffffff, 0x00010000,
1422         0x3c088, 0xffffffff, 0x00030002,
1423         0x3c08c, 0xffffffff, 0x00040007,
1424         0x3c090, 0xffffffff, 0x00060005,
1425         0x3c094, 0xffffffff, 0x00090008,
1426         0x3c098, 0xffffffff, 0x00010000,
1427         0x3c09c, 0xffffffff, 0x00030002,
1428         0x3c0a0, 0xffffffff, 0x00040007,
1429         0x3c0a4, 0xffffffff, 0x00060005,
1430         0x3c0a8, 0xffffffff, 0x00090008,
1431         0x3c0ac, 0xffffffff, 0x00010000,
1432         0x3c0b0, 0xffffffff, 0x00030002,
1433         0x3c0b4, 0xffffffff, 0x00040007,
1434         0x3c0b8, 0xffffffff, 0x00060005,
1435         0x3c0bc, 0xffffffff, 0x00090008,
1436         0x3c0c0, 0xffffffff, 0x00010000,
1437         0x3c0c4, 0xffffffff, 0x00030002,
1438         0x3c0c8, 0xffffffff, 0x00040007,
1439         0x3c0cc, 0xffffffff, 0x00060005,
1440         0x3c0d0, 0xffffffff, 0x00090008,
1441         0x3c0d4, 0xffffffff, 0x00010000,
1442         0x3c0d8, 0xffffffff, 0x00030002,
1443         0x3c0dc, 0xffffffff, 0x00040007,
1444         0x3c0e0, 0xffffffff, 0x00060005,
1445         0x3c0e4, 0xffffffff, 0x00090008,
1446         0x3c0e8, 0xffffffff, 0x00010000,
1447         0x3c0ec, 0xffffffff, 0x00030002,
1448         0x3c0f0, 0xffffffff, 0x00040007,
1449         0x3c0f4, 0xffffffff, 0x00060005,
1450         0x3c0f8, 0xffffffff, 0x00090008,
1451         0xc318, 0xffffffff, 0x00020200,
1452         0x3350, 0xffffffff, 0x00000200,
1453         0x15c0, 0xffffffff, 0x00000400,
1454         0x55e8, 0xffffffff, 0x00000000,
1455         0x2f50, 0xffffffff, 0x00000902,
1456         0x3c000, 0xffffffff, 0x96940200,
1457         0x8708, 0xffffffff, 0x00900100,
1458         0xc424, 0xffffffff, 0x0020003f,
1459         0x38, 0xffffffff, 0x0140001c,
1460         0x3c, 0x000f0000, 0x000f0000,
1461         0x220, 0xffffffff, 0xc060000c,
1462         0x224, 0xc0000fff, 0x00000100,
1463         0xf90, 0xffffffff, 0x00000100,
1464         0xf98, 0x00000101, 0x00000000,
1465         0x20a8, 0xffffffff, 0x00000104,
1466         0x55e4, 0xff000fff, 0x00000100,
1467         0x30cc, 0xc0000fff, 0x00000104,
1468         0xc1e4, 0x00000001, 0x00000001,
1469         0xd00c, 0xff000ff0, 0x00000100,
1470         0xd80c, 0xff000ff0, 0x00000100
1471 };
1472
1473 static void cik_init_golden_registers(struct radeon_device *rdev)
1474 {
1475         switch (rdev->family) {
1476         case CHIP_BONAIRE:
1477                 radeon_program_register_sequence(rdev,
1478                                                  bonaire_mgcg_cgcg_init,
1479                                                  (const u32)ARRAY_SIZE(bonaire_mgcg_cgcg_init));
1480                 radeon_program_register_sequence(rdev,
1481                                                  bonaire_golden_registers,
1482                                                  (const u32)ARRAY_SIZE(bonaire_golden_registers));
1483                 radeon_program_register_sequence(rdev,
1484                                                  bonaire_golden_common_registers,
1485                                                  (const u32)ARRAY_SIZE(bonaire_golden_common_registers));
1486                 radeon_program_register_sequence(rdev,
1487                                                  bonaire_golden_spm_registers,
1488                                                  (const u32)ARRAY_SIZE(bonaire_golden_spm_registers));
1489                 break;
1490         case CHIP_KABINI:
1491                 radeon_program_register_sequence(rdev,
1492                                                  kalindi_mgcg_cgcg_init,
1493                                                  (const u32)ARRAY_SIZE(kalindi_mgcg_cgcg_init));
1494                 radeon_program_register_sequence(rdev,
1495                                                  kalindi_golden_registers,
1496                                                  (const u32)ARRAY_SIZE(kalindi_golden_registers));
1497                 radeon_program_register_sequence(rdev,
1498                                                  kalindi_golden_common_registers,
1499                                                  (const u32)ARRAY_SIZE(kalindi_golden_common_registers));
1500                 radeon_program_register_sequence(rdev,
1501                                                  kalindi_golden_spm_registers,
1502                                                  (const u32)ARRAY_SIZE(kalindi_golden_spm_registers));
1503                 break;
1504         case CHIP_KAVERI:
1505                 radeon_program_register_sequence(rdev,
1506                                                  spectre_mgcg_cgcg_init,
1507                                                  (const u32)ARRAY_SIZE(spectre_mgcg_cgcg_init));
1508                 radeon_program_register_sequence(rdev,
1509                                                  spectre_golden_registers,
1510                                                  (const u32)ARRAY_SIZE(spectre_golden_registers));
1511                 radeon_program_register_sequence(rdev,
1512                                                  spectre_golden_common_registers,
1513                                                  (const u32)ARRAY_SIZE(spectre_golden_common_registers));
1514                 radeon_program_register_sequence(rdev,
1515                                                  spectre_golden_spm_registers,
1516                                                  (const u32)ARRAY_SIZE(spectre_golden_spm_registers));
1517                 break;
1518         case CHIP_HAWAII:
1519                 radeon_program_register_sequence(rdev,
1520                                                  hawaii_mgcg_cgcg_init,
1521                                                  (const u32)ARRAY_SIZE(hawaii_mgcg_cgcg_init));
1522                 radeon_program_register_sequence(rdev,
1523                                                  hawaii_golden_registers,
1524                                                  (const u32)ARRAY_SIZE(hawaii_golden_registers));
1525                 radeon_program_register_sequence(rdev,
1526                                                  hawaii_golden_common_registers,
1527                                                  (const u32)ARRAY_SIZE(hawaii_golden_common_registers));
1528                 radeon_program_register_sequence(rdev,
1529                                                  hawaii_golden_spm_registers,
1530                                                  (const u32)ARRAY_SIZE(hawaii_golden_spm_registers));
1531                 break;
1532         default:
1533                 break;
1534         }
1535 }
1536
1537 /**
1538  * cik_get_xclk - get the xclk
1539  *
1540  * @rdev: radeon_device pointer
1541  *
1542  * Returns the reference clock used by the gfx engine
1543  * (CIK).
1544  */
1545 u32 cik_get_xclk(struct radeon_device *rdev)
1546 {
1547         u32 reference_clock = rdev->clock.spll.reference_freq;
1548
1549         if (rdev->flags & RADEON_IS_IGP) {
1550                 if (RREG32_SMC(GENERAL_PWRMGT) & GPU_COUNTER_CLK)
1551                         return reference_clock / 2;
1552         } else {
1553                 if (RREG32_SMC(CG_CLKPIN_CNTL) & XTALIN_DIVIDE)
1554                         return reference_clock / 4;
1555         }
1556         return reference_clock;
1557 }
1558
1559 /**
1560  * cik_mm_rdoorbell - read a doorbell dword
1561  *
1562  * @rdev: radeon_device pointer
1563  * @index: doorbell index
1564  *
1565  * Returns the value in the doorbell aperture at the
1566  * requested doorbell index (CIK).
1567  */
1568 u32 cik_mm_rdoorbell(struct radeon_device *rdev, u32 index)
1569 {
1570         if (index < rdev->doorbell.num_doorbells) {
1571                 return readl(rdev->doorbell.ptr + index);
1572         } else {
1573                 DRM_ERROR("reading beyond doorbell aperture: 0x%08x!\n", index);
1574                 return 0;
1575         }
1576 }
1577
1578 /**
1579  * cik_mm_wdoorbell - write a doorbell dword
1580  *
1581  * @rdev: radeon_device pointer
1582  * @index: doorbell index
1583  * @v: value to write
1584  *
1585  * Writes @v to the doorbell aperture at the
1586  * requested doorbell index (CIK).
1587  */
1588 void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v)
1589 {
1590         if (index < rdev->doorbell.num_doorbells) {
1591                 writel(v, rdev->doorbell.ptr + index);
1592         } else {
1593                 DRM_ERROR("writing beyond doorbell aperture: 0x%08x!\n", index);
1594         }
1595 }
1596
1597 #define BONAIRE_IO_MC_REGS_SIZE 36
1598
1599 static const u32 bonaire_io_mc_regs[BONAIRE_IO_MC_REGS_SIZE][2] =
1600 {
1601         {0x00000070, 0x04400000},
1602         {0x00000071, 0x80c01803},
1603         {0x00000072, 0x00004004},
1604         {0x00000073, 0x00000100},
1605         {0x00000074, 0x00ff0000},
1606         {0x00000075, 0x34000000},
1607         {0x00000076, 0x08000014},
1608         {0x00000077, 0x00cc08ec},
1609         {0x00000078, 0x00000400},
1610         {0x00000079, 0x00000000},
1611         {0x0000007a, 0x04090000},
1612         {0x0000007c, 0x00000000},
1613         {0x0000007e, 0x4408a8e8},
1614         {0x0000007f, 0x00000304},
1615         {0x00000080, 0x00000000},
1616         {0x00000082, 0x00000001},
1617         {0x00000083, 0x00000002},
1618         {0x00000084, 0xf3e4f400},
1619         {0x00000085, 0x052024e3},
1620         {0x00000087, 0x00000000},
1621         {0x00000088, 0x01000000},
1622         {0x0000008a, 0x1c0a0000},
1623         {0x0000008b, 0xff010000},
1624         {0x0000008d, 0xffffefff},
1625         {0x0000008e, 0xfff3efff},
1626         {0x0000008f, 0xfff3efbf},
1627         {0x00000092, 0xf7ffffff},
1628         {0x00000093, 0xffffff7f},
1629         {0x00000095, 0x00101101},
1630         {0x00000096, 0x00000fff},
1631         {0x00000097, 0x00116fff},
1632         {0x00000098, 0x60010000},
1633         {0x00000099, 0x10010000},
1634         {0x0000009a, 0x00006000},
1635         {0x0000009b, 0x00001000},
1636         {0x0000009f, 0x00b48000}
1637 };
1638
1639 #define HAWAII_IO_MC_REGS_SIZE 22
1640
1641 static const u32 hawaii_io_mc_regs[HAWAII_IO_MC_REGS_SIZE][2] =
1642 {
1643         {0x0000007d, 0x40000000},
1644         {0x0000007e, 0x40180304},
1645         {0x0000007f, 0x0000ff00},
1646         {0x00000081, 0x00000000},
1647         {0x00000083, 0x00000800},
1648         {0x00000086, 0x00000000},
1649         {0x00000087, 0x00000100},
1650         {0x00000088, 0x00020100},
1651         {0x00000089, 0x00000000},
1652         {0x0000008b, 0x00040000},
1653         {0x0000008c, 0x00000100},
1654         {0x0000008e, 0xff010000},
1655         {0x00000090, 0xffffefff},
1656         {0x00000091, 0xfff3efff},
1657         {0x00000092, 0xfff3efbf},
1658         {0x00000093, 0xf7ffffff},
1659         {0x00000094, 0xffffff7f},
1660         {0x00000095, 0x00000fff},
1661         {0x00000096, 0x00116fff},
1662         {0x00000097, 0x60010000},
1663         {0x00000098, 0x10010000},
1664         {0x0000009f, 0x00c79000}
1665 };
1666
1667
1668 /**
1669  * cik_srbm_select - select specific register instances
1670  *
1671  * @rdev: radeon_device pointer
1672  * @me: selected ME (micro engine)
1673  * @pipe: pipe
1674  * @queue: queue
1675  * @vmid: VMID
1676  *
1677  * Switches the currently active registers instances.  Some
1678  * registers are instanced per VMID, others are instanced per
1679  * me/pipe/queue combination.
1680  */
1681 static void cik_srbm_select(struct radeon_device *rdev,
1682                             u32 me, u32 pipe, u32 queue, u32 vmid)
1683 {
1684         u32 srbm_gfx_cntl = (PIPEID(pipe & 0x3) |
1685                              MEID(me & 0x3) |
1686                              VMID(vmid & 0xf) |
1687                              QUEUEID(queue & 0x7));
1688         WREG32(SRBM_GFX_CNTL, srbm_gfx_cntl);
1689 }
1690
1691 /* ucode loading */
1692 /**
1693  * ci_mc_load_microcode - load MC ucode into the hw
1694  *
1695  * @rdev: radeon_device pointer
1696  *
1697  * Load the GDDR MC ucode into the hw (CIK).
1698  * Returns 0 on success, error on failure.
1699  */
1700 static int ci_mc_load_microcode(struct radeon_device *rdev)
1701 {
1702         const __be32 *fw_data;
1703         u32 running, blackout = 0;
1704         u32 *io_mc_regs;
1705         int i, ucode_size, regs_size;
1706
1707         if (!rdev->mc_fw)
1708                 return -EINVAL;
1709
1710         switch (rdev->family) {
1711         case CHIP_BONAIRE:
1712                 io_mc_regs = (u32 *)&bonaire_io_mc_regs;
1713                 ucode_size = CIK_MC_UCODE_SIZE;
1714                 regs_size = BONAIRE_IO_MC_REGS_SIZE;
1715                 break;
1716         case CHIP_HAWAII:
1717                 io_mc_regs = (u32 *)&hawaii_io_mc_regs;
1718                 ucode_size = HAWAII_MC_UCODE_SIZE;
1719                 regs_size = HAWAII_IO_MC_REGS_SIZE;
1720                 break;
1721         default:
1722                 return -EINVAL;
1723         }
1724
1725         running = RREG32(MC_SEQ_SUP_CNTL) & RUN_MASK;
1726
1727         if (running == 0) {
1728                 if (running) {
1729                         blackout = RREG32(MC_SHARED_BLACKOUT_CNTL);
1730                         WREG32(MC_SHARED_BLACKOUT_CNTL, blackout | 1);
1731                 }
1732
1733                 /* reset the engine and set to writable */
1734                 WREG32(MC_SEQ_SUP_CNTL, 0x00000008);
1735                 WREG32(MC_SEQ_SUP_CNTL, 0x00000010);
1736
1737                 /* load mc io regs */
1738                 for (i = 0; i < regs_size; i++) {
1739                         WREG32(MC_SEQ_IO_DEBUG_INDEX, io_mc_regs[(i << 1)]);
1740                         WREG32(MC_SEQ_IO_DEBUG_DATA, io_mc_regs[(i << 1) + 1]);
1741                 }
1742                 /* load the MC ucode */
1743                 fw_data = (const __be32 *)rdev->mc_fw->data;
1744                 for (i = 0; i < ucode_size; i++)
1745                         WREG32(MC_SEQ_SUP_PGM, be32_to_cpup(fw_data++));
1746
1747                 /* put the engine back into the active state */
1748                 WREG32(MC_SEQ_SUP_CNTL, 0x00000008);
1749                 WREG32(MC_SEQ_SUP_CNTL, 0x00000004);
1750                 WREG32(MC_SEQ_SUP_CNTL, 0x00000001);
1751
1752                 /* wait for training to complete */
1753                 for (i = 0; i < rdev->usec_timeout; i++) {
1754                         if (RREG32(MC_SEQ_TRAIN_WAKEUP_CNTL) & TRAIN_DONE_D0)
1755                                 break;
1756                         udelay(1);
1757                 }
1758                 for (i = 0; i < rdev->usec_timeout; i++) {
1759                         if (RREG32(MC_SEQ_TRAIN_WAKEUP_CNTL) & TRAIN_DONE_D1)
1760                                 break;
1761                         udelay(1);
1762                 }
1763
1764                 if (running)
1765                         WREG32(MC_SHARED_BLACKOUT_CNTL, blackout);
1766         }
1767
1768         return 0;
1769 }
1770
1771 /**
1772  * cik_init_microcode - load ucode images from disk
1773  *
1774  * @rdev: radeon_device pointer
1775  *
1776  * Use the firmware interface to load the ucode images into
1777  * the driver (not loaded into hw).
1778  * Returns 0 on success, error on failure.
1779  */
1780 static int cik_init_microcode(struct radeon_device *rdev)
1781 {
1782         const char *chip_name;
1783         size_t pfp_req_size, me_req_size, ce_req_size,
1784                 mec_req_size, rlc_req_size, mc_req_size = 0,
1785                 sdma_req_size, smc_req_size = 0;
1786         char fw_name[30];
1787         int err;
1788
1789         DRM_DEBUG("\n");
1790
1791         switch (rdev->family) {
1792         case CHIP_BONAIRE:
1793                 chip_name = "BONAIRE";
1794                 pfp_req_size = CIK_PFP_UCODE_SIZE * 4;
1795                 me_req_size = CIK_ME_UCODE_SIZE * 4;
1796                 ce_req_size = CIK_CE_UCODE_SIZE * 4;
1797                 mec_req_size = CIK_MEC_UCODE_SIZE * 4;
1798                 rlc_req_size = BONAIRE_RLC_UCODE_SIZE * 4;
1799                 mc_req_size = CIK_MC_UCODE_SIZE * 4;
1800                 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
1801                 smc_req_size = ALIGN(BONAIRE_SMC_UCODE_SIZE, 4);
1802                 break;
1803         case CHIP_HAWAII:
1804                 chip_name = "HAWAII";
1805                 pfp_req_size = CIK_PFP_UCODE_SIZE * 4;
1806                 me_req_size = CIK_ME_UCODE_SIZE * 4;
1807                 ce_req_size = CIK_CE_UCODE_SIZE * 4;
1808                 mec_req_size = CIK_MEC_UCODE_SIZE * 4;
1809                 rlc_req_size = BONAIRE_RLC_UCODE_SIZE * 4;
1810                 mc_req_size = HAWAII_MC_UCODE_SIZE * 4;
1811                 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
1812                 smc_req_size = ALIGN(HAWAII_SMC_UCODE_SIZE, 4);
1813                 break;
1814         case CHIP_KAVERI:
1815                 chip_name = "KAVERI";
1816                 pfp_req_size = CIK_PFP_UCODE_SIZE * 4;
1817                 me_req_size = CIK_ME_UCODE_SIZE * 4;
1818                 ce_req_size = CIK_CE_UCODE_SIZE * 4;
1819                 mec_req_size = CIK_MEC_UCODE_SIZE * 4;
1820                 rlc_req_size = KV_RLC_UCODE_SIZE * 4;
1821                 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
1822                 break;
1823         case CHIP_KABINI:
1824                 chip_name = "KABINI";
1825                 pfp_req_size = CIK_PFP_UCODE_SIZE * 4;
1826                 me_req_size = CIK_ME_UCODE_SIZE * 4;
1827                 ce_req_size = CIK_CE_UCODE_SIZE * 4;
1828                 mec_req_size = CIK_MEC_UCODE_SIZE * 4;
1829                 rlc_req_size = KB_RLC_UCODE_SIZE * 4;
1830                 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
1831                 break;
1832         default: BUG();
1833         }
1834
1835         DRM_INFO("Loading %s Microcode\n", chip_name);
1836
1837         snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
1838         err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
1839         if (err)
1840                 goto out;
1841         if (rdev->pfp_fw->size != pfp_req_size) {
1842                 printk(KERN_ERR
1843                        "cik_cp: Bogus length %zu in firmware \"%s\"\n",
1844                        rdev->pfp_fw->size, fw_name);
1845                 err = -EINVAL;
1846                 goto out;
1847         }
1848
1849         snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
1850         err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
1851         if (err)
1852                 goto out;
1853         if (rdev->me_fw->size != me_req_size) {
1854                 printk(KERN_ERR
1855                        "cik_cp: Bogus length %zu in firmware \"%s\"\n",
1856                        rdev->me_fw->size, fw_name);
1857                 err = -EINVAL;
1858         }
1859
1860         snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
1861         err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
1862         if (err)
1863                 goto out;
1864         if (rdev->ce_fw->size != ce_req_size) {
1865                 printk(KERN_ERR
1866                        "cik_cp: Bogus length %zu in firmware \"%s\"\n",
1867                        rdev->ce_fw->size, fw_name);
1868                 err = -EINVAL;
1869         }
1870
1871         snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", chip_name);
1872         err = request_firmware(&rdev->mec_fw, fw_name, rdev->dev);
1873         if (err)
1874                 goto out;
1875         if (rdev->mec_fw->size != mec_req_size) {
1876                 printk(KERN_ERR
1877                        "cik_cp: Bogus length %zu in firmware \"%s\"\n",
1878                        rdev->mec_fw->size, fw_name);
1879                 err = -EINVAL;
1880         }
1881
1882         snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name);
1883         err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
1884         if (err)
1885                 goto out;
1886         if (rdev->rlc_fw->size != rlc_req_size) {
1887                 printk(KERN_ERR
1888                        "cik_rlc: Bogus length %zu in firmware \"%s\"\n",
1889                        rdev->rlc_fw->size, fw_name);
1890                 err = -EINVAL;
1891         }
1892
1893         snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma.bin", chip_name);
1894         err = request_firmware(&rdev->sdma_fw, fw_name, rdev->dev);
1895         if (err)
1896                 goto out;
1897         if (rdev->sdma_fw->size != sdma_req_size) {
1898                 printk(KERN_ERR
1899                        "cik_sdma: Bogus length %zu in firmware \"%s\"\n",
1900                        rdev->sdma_fw->size, fw_name);
1901                 err = -EINVAL;
1902         }
1903
1904         /* No SMC, MC ucode on APUs */
1905         if (!(rdev->flags & RADEON_IS_IGP)) {
1906                 snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
1907                 err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
1908                 if (err)
1909                         goto out;
1910                 if (rdev->mc_fw->size != mc_req_size) {
1911                         printk(KERN_ERR
1912                                "cik_mc: Bogus length %zu in firmware \"%s\"\n",
1913                                rdev->mc_fw->size, fw_name);
1914                         err = -EINVAL;
1915                 }
1916
1917                 snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
1918                 err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
1919                 if (err) {
1920                         printk(KERN_ERR
1921                                "smc: error loading firmware \"%s\"\n",
1922                                fw_name);
1923                         release_firmware(rdev->smc_fw);
1924                         rdev->smc_fw = NULL;
1925                         err = 0;
1926                 } else if (rdev->smc_fw->size != smc_req_size) {
1927                         printk(KERN_ERR
1928                                "cik_smc: Bogus length %zu in firmware \"%s\"\n",
1929                                rdev->smc_fw->size, fw_name);
1930                         err = -EINVAL;
1931                 }
1932         }
1933
1934 out:
1935         if (err) {
1936                 if (err != -EINVAL)
1937                         printk(KERN_ERR
1938                                "cik_cp: Failed to load firmware \"%s\"\n",
1939                                fw_name);
1940                 release_firmware(rdev->pfp_fw);
1941                 rdev->pfp_fw = NULL;
1942                 release_firmware(rdev->me_fw);
1943                 rdev->me_fw = NULL;
1944                 release_firmware(rdev->ce_fw);
1945                 rdev->ce_fw = NULL;
1946                 release_firmware(rdev->rlc_fw);
1947                 rdev->rlc_fw = NULL;
1948                 release_firmware(rdev->mc_fw);
1949                 rdev->mc_fw = NULL;
1950                 release_firmware(rdev->smc_fw);
1951                 rdev->smc_fw = NULL;
1952         }
1953         return err;
1954 }
1955
1956 /*
1957  * Core functions
1958  */
1959 /**
1960  * cik_tiling_mode_table_init - init the hw tiling table
1961  *
1962  * @rdev: radeon_device pointer
1963  *
1964  * Starting with SI, the tiling setup is done globally in a
1965  * set of 32 tiling modes.  Rather than selecting each set of
1966  * parameters per surface as on older asics, we just select
1967  * which index in the tiling table we want to use, and the
1968  * surface uses those parameters (CIK).
1969  */
1970 static void cik_tiling_mode_table_init(struct radeon_device *rdev)
1971 {
1972         const u32 num_tile_mode_states = 32;
1973         const u32 num_secondary_tile_mode_states = 16;
1974         u32 reg_offset, gb_tile_moden, split_equal_to_row_size;
1975         u32 num_pipe_configs;
1976         u32 num_rbs = rdev->config.cik.max_backends_per_se *
1977                 rdev->config.cik.max_shader_engines;
1978
1979         switch (rdev->config.cik.mem_row_size_in_kb) {
1980         case 1:
1981                 split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_1KB;
1982                 break;
1983         case 2:
1984         default:
1985                 split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_2KB;
1986                 break;
1987         case 4:
1988                 split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_4KB;
1989                 break;
1990         }
1991
1992         num_pipe_configs = rdev->config.cik.max_tile_pipes;
1993         if (num_pipe_configs > 8)
1994                 num_pipe_configs = 16;
1995
1996         if (num_pipe_configs == 16) {
1997                 for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
1998                         switch (reg_offset) {
1999                         case 0:
2000                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2001                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2002                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2003                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
2004                                 break;
2005                         case 1:
2006                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2007                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2008                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2009                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
2010                                 break;
2011                         case 2:
2012                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2013                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2014                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2015                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2016                                 break;
2017                         case 3:
2018                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2019                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2020                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2021                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
2022                                 break;
2023                         case 4:
2024                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2025                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2026                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2027                                                  TILE_SPLIT(split_equal_to_row_size));
2028                                 break;
2029                         case 5:
2030                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2031                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
2032                                 break;
2033                         case 6:
2034                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2035                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2036                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2037                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2038                                 break;
2039                         case 7:
2040                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2041                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2042                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2043                                                  TILE_SPLIT(split_equal_to_row_size));
2044                                 break;
2045                         case 8:
2046                                 gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
2047                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16));
2048                                 break;
2049                         case 9:
2050                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2051                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
2052                                 break;
2053                         case 10:
2054                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2055                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2056                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2057                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2058                                 break;
2059                         case 11:
2060                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2061                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2062                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) |
2063                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2064                                 break;
2065                         case 12:
2066                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2067                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2068                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2069                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2070                                 break;
2071                         case 13:
2072                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2073                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
2074                                 break;
2075                         case 14:
2076                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2077                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2078                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2079                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2080                                 break;
2081                         case 16:
2082                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2083                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2084                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) |
2085                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2086                                 break;
2087                         case 17:
2088                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2089                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2090                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2091                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2092                                 break;
2093                         case 27:
2094                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2095                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
2096                                 break;
2097                         case 28:
2098                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2099                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2100                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2101                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2102                                 break;
2103                         case 29:
2104                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2105                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2106                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) |
2107                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2108                                 break;
2109                         case 30:
2110                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2111                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2112                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
2113                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2114                                 break;
2115                         default:
2116                                 gb_tile_moden = 0;
2117                                 break;
2118                         }
2119                         rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden;
2120                         WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2121                 }
2122                 for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) {
2123                         switch (reg_offset) {
2124                         case 0:
2125                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2126                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2127                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2128                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2129                                 break;
2130                         case 1:
2131                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2132                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2133                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2134                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2135                                 break;
2136                         case 2:
2137                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2138                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2139                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2140                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2141                                 break;
2142                         case 3:
2143                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2144                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2145                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2146                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2147                                 break;
2148                         case 4:
2149                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2150                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2151                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2152                                                  NUM_BANKS(ADDR_SURF_8_BANK));
2153                                 break;
2154                         case 5:
2155                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2156                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2157                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2158                                                  NUM_BANKS(ADDR_SURF_4_BANK));
2159                                 break;
2160                         case 6:
2161                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2162                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2163                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2164                                                  NUM_BANKS(ADDR_SURF_2_BANK));
2165                                 break;
2166                         case 8:
2167                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2168                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2169                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2170                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2171                                 break;
2172                         case 9:
2173                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2174                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2175                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2176                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2177                                 break;
2178                         case 10:
2179                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2180                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2181                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2182                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2183                                 break;
2184                         case 11:
2185                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2186                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2187                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2188                                                  NUM_BANKS(ADDR_SURF_8_BANK));
2189                                 break;
2190                         case 12:
2191                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2192                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2193                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2194                                                  NUM_BANKS(ADDR_SURF_4_BANK));
2195                                 break;
2196                         case 13:
2197                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2198                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2199                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2200                                                  NUM_BANKS(ADDR_SURF_2_BANK));
2201                                 break;
2202                         case 14:
2203                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2204                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2205                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2206                                                  NUM_BANKS(ADDR_SURF_2_BANK));
2207                                 break;
2208                         default:
2209                                 gb_tile_moden = 0;
2210                                 break;
2211                         }
2212                         WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2213                 }
2214         } else if (num_pipe_configs == 8) {
2215                 for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
2216                         switch (reg_offset) {
2217                         case 0:
2218                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2219                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2220                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2221                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
2222                                 break;
2223                         case 1:
2224                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2225                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2226                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2227                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
2228                                 break;
2229                         case 2:
2230                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2231                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2232                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2233                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2234                                 break;
2235                         case 3:
2236                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2237                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2238                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2239                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
2240                                 break;
2241                         case 4:
2242                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2243                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2244                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2245                                                  TILE_SPLIT(split_equal_to_row_size));
2246                                 break;
2247                         case 5:
2248                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2249                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
2250                                 break;
2251                         case 6:
2252                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2253                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2254                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2255                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2256                                 break;
2257                         case 7:
2258                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2259                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2260                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2261                                                  TILE_SPLIT(split_equal_to_row_size));
2262                                 break;
2263                         case 8:
2264                                 gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
2265                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16));
2266                                 break;
2267                         case 9:
2268                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2269                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
2270                                 break;
2271                         case 10:
2272                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2273                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2274                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2275                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2276                                 break;
2277                         case 11:
2278                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2279                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2280                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
2281                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2282                                 break;
2283                         case 12:
2284                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2285                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2286                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2287                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2288                                 break;
2289                         case 13:
2290                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2291                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
2292                                 break;
2293                         case 14:
2294                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2295                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2296                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2297                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2298                                 break;
2299                         case 16:
2300                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2301                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2302                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
2303                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2304                                 break;
2305                         case 17:
2306                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2307                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2308                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2309                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2310                                 break;
2311                         case 27:
2312                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2313                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
2314                                 break;
2315                         case 28:
2316                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2317                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2318                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2319                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2320                                 break;
2321                         case 29:
2322                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2323                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2324                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) |
2325                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2326                                 break;
2327                         case 30:
2328                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2329                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2330                                                  PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) |
2331                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2332                                 break;
2333                         default:
2334                                 gb_tile_moden = 0;
2335                                 break;
2336                         }
2337                         rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden;
2338                         WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2339                 }
2340                 for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) {
2341                         switch (reg_offset) {
2342                         case 0:
2343                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2344                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2345                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2346                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2347                                 break;
2348                         case 1:
2349                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2350                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2351                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2352                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2353                                 break;
2354                         case 2:
2355                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2356                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2357                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2358                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2359                                 break;
2360                         case 3:
2361                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2362                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2363                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2364                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2365                                 break;
2366                         case 4:
2367                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2368                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2369                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2370                                                  NUM_BANKS(ADDR_SURF_8_BANK));
2371                                 break;
2372                         case 5:
2373                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2374                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2375                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2376                                                  NUM_BANKS(ADDR_SURF_4_BANK));
2377                                 break;
2378                         case 6:
2379                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2380                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2381                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2382                                                  NUM_BANKS(ADDR_SURF_2_BANK));
2383                                 break;
2384                         case 8:
2385                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2386                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
2387                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2388                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2389                                 break;
2390                         case 9:
2391                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2392                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2393                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2394                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2395                                 break;
2396                         case 10:
2397                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2398                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2399                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2400                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2401                                 break;
2402                         case 11:
2403                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2404                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2405                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2406                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2407                                 break;
2408                         case 12:
2409                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2410                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2411                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2412                                                  NUM_BANKS(ADDR_SURF_8_BANK));
2413                                 break;
2414                         case 13:
2415                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2416                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2417                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2418                                                  NUM_BANKS(ADDR_SURF_4_BANK));
2419                                 break;
2420                         case 14:
2421                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2422                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2423                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2424                                                  NUM_BANKS(ADDR_SURF_2_BANK));
2425                                 break;
2426                         default:
2427                                 gb_tile_moden = 0;
2428                                 break;
2429                         }
2430                         rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden;
2431                         WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2432                 }
2433         } else if (num_pipe_configs == 4) {
2434                 if (num_rbs == 4) {
2435                         for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
2436                                 switch (reg_offset) {
2437                                 case 0:
2438                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2439                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2440                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2441                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
2442                                         break;
2443                                 case 1:
2444                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2445                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2446                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2447                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
2448                                         break;
2449                                 case 2:
2450                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2451                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2452                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2453                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2454                                         break;
2455                                 case 3:
2456                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2457                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2458                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2459                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
2460                                         break;
2461                                 case 4:
2462                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2463                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2464                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2465                                                          TILE_SPLIT(split_equal_to_row_size));
2466                                         break;
2467                                 case 5:
2468                                         gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2469                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
2470                                         break;
2471                                 case 6:
2472                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2473                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2474                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2475                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2476                                         break;
2477                                 case 7:
2478                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2479                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2480                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2481                                                          TILE_SPLIT(split_equal_to_row_size));
2482                                         break;
2483                                 case 8:
2484                                         gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
2485                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16));
2486                                         break;
2487                                 case 9:
2488                                         gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2489                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
2490                                         break;
2491                                 case 10:
2492                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2493                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2494                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2495                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2496                                         break;
2497                                 case 11:
2498                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2499                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2500                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2501                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2502                                         break;
2503                                 case 12:
2504                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2505                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2506                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2507                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2508                                         break;
2509                                 case 13:
2510                                         gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2511                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
2512                                         break;
2513                                 case 14:
2514                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2515                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2516                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2517                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2518                                         break;
2519                                 case 16:
2520                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2521                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2522                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2523                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2524                                         break;
2525                                 case 17:
2526                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2527                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2528                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2529                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2530                                         break;
2531                                 case 27:
2532                                         gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2533                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
2534                                         break;
2535                                 case 28:
2536                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2537                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2538                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2539                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2540                                         break;
2541                                 case 29:
2542                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2543                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2544                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2545                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2546                                         break;
2547                                 case 30:
2548                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2549                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2550                                                          PIPE_CONFIG(ADDR_SURF_P4_16x16) |
2551                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2552                                         break;
2553                                 default:
2554                                         gb_tile_moden = 0;
2555                                         break;
2556                                 }
2557                                 rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden;
2558                                 WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2559                         }
2560                 } else if (num_rbs < 4) {
2561                         for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
2562                                 switch (reg_offset) {
2563                                 case 0:
2564                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2565                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2566                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2567                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
2568                                         break;
2569                                 case 1:
2570                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2571                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2572                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2573                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
2574                                         break;
2575                                 case 2:
2576                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2577                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2578                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2579                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2580                                         break;
2581                                 case 3:
2582                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2583                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2584                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2585                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
2586                                         break;
2587                                 case 4:
2588                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2589                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2590                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2591                                                          TILE_SPLIT(split_equal_to_row_size));
2592                                         break;
2593                                 case 5:
2594                                         gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2595                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
2596                                         break;
2597                                 case 6:
2598                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2599                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2600                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2601                                                          TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2602                                         break;
2603                                 case 7:
2604                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2605                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2606                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2607                                                          TILE_SPLIT(split_equal_to_row_size));
2608                                         break;
2609                                 case 8:
2610                                         gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) |
2611                                                  PIPE_CONFIG(ADDR_SURF_P4_8x16));
2612                                         break;
2613                                 case 9:
2614                                         gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2615                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
2616                                         break;
2617                                 case 10:
2618                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2619                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2620                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2621                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2622                                         break;
2623                                 case 11:
2624                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2625                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2626                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2627                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2628                                         break;
2629                                 case 12:
2630                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2631                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2632                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2633                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2634                                         break;
2635                                 case 13:
2636                                         gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2637                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
2638                                         break;
2639                                 case 14:
2640                                         gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2641                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2642                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2643                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2644                                         break;
2645                                 case 16:
2646                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2647                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2648                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2649                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2650                                         break;
2651                                 case 17:
2652                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2653                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2654                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2655                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2656                                         break;
2657                                 case 27:
2658                                         gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2659                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
2660                                         break;
2661                                 case 28:
2662                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2663                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2664                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2665                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2666                                         break;
2667                                 case 29:
2668                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2669                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2670                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2671                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2672                                         break;
2673                                 case 30:
2674                                         gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2675                                                          MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2676                                                          PIPE_CONFIG(ADDR_SURF_P4_8x16) |
2677                                                          SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2678                                         break;
2679                                 default:
2680                                         gb_tile_moden = 0;
2681                                         break;
2682                                 }
2683                                 rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden;
2684                                 WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2685                         }
2686                 }
2687                 for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) {
2688                         switch (reg_offset) {
2689                         case 0:
2690                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2691                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2692                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2693                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2694                                 break;
2695                         case 1:
2696                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2697                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2698                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2699                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2700                                 break;
2701                         case 2:
2702                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2703                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2704                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2705                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2706                                 break;
2707                         case 3:
2708                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2709                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2710                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2711                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2712                                 break;
2713                         case 4:
2714                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2715                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2716                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2717                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2718                                 break;
2719                         case 5:
2720                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2721                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2722                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2723                                                  NUM_BANKS(ADDR_SURF_8_BANK));
2724                                 break;
2725                         case 6:
2726                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2727                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2728                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2729                                                  NUM_BANKS(ADDR_SURF_4_BANK));
2730                                 break;
2731                         case 8:
2732                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
2733                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
2734                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2735                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2736                                 break;
2737                         case 9:
2738                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
2739                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2740                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2741                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2742                                 break;
2743                         case 10:
2744                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2745                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2746                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2747                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2748                                 break;
2749                         case 11:
2750                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2751                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2752                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2753                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2754                                 break;
2755                         case 12:
2756                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2757                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2758                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2759                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2760                                 break;
2761                         case 13:
2762                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2763                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2764                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2765                                                  NUM_BANKS(ADDR_SURF_8_BANK));
2766                                 break;
2767                         case 14:
2768                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2769                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2770                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) |
2771                                                  NUM_BANKS(ADDR_SURF_4_BANK));
2772                                 break;
2773                         default:
2774                                 gb_tile_moden = 0;
2775                                 break;
2776                         }
2777                         rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden;
2778                         WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2779                 }
2780         } else if (num_pipe_configs == 2) {
2781                 for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
2782                         switch (reg_offset) {
2783                         case 0:
2784                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2785                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2786                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2787                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
2788                                 break;
2789                         case 1:
2790                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2791                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2792                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2793                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B));
2794                                 break;
2795                         case 2:
2796                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2797                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2798                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2799                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2800                                 break;
2801                         case 3:
2802                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2803                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2804                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2805                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B));
2806                                 break;
2807                         case 4:
2808                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2809                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2810                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2811                                                  TILE_SPLIT(split_equal_to_row_size));
2812                                 break;
2813                         case 5:
2814                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2815                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING));
2816                                 break;
2817                         case 6:
2818                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2819                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2820                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2821                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B));
2822                                 break;
2823                         case 7:
2824                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2825                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
2826                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2827                                                  TILE_SPLIT(split_equal_to_row_size));
2828                                 break;
2829                         case 8:
2830                                 gb_tile_moden = ARRAY_MODE(ARRAY_LINEAR_ALIGNED);
2831                                 break;
2832                         case 9:
2833                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2834                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING));
2835                                 break;
2836                         case 10:
2837                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2838                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2839                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2840                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2841                                 break;
2842                         case 11:
2843                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2844                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2845                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2846                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2847                                 break;
2848                         case 12:
2849                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2850                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) |
2851                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2852                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2853                                 break;
2854                         case 13:
2855                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2856                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING));
2857                                 break;
2858                         case 14:
2859                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2860                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2861                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2862                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2863                                 break;
2864                         case 16:
2865                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2866                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2867                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2868                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2869                                 break;
2870                         case 17:
2871                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2872                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) |
2873                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2874                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2875                                 break;
2876                         case 27:
2877                                 gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) |
2878                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING));
2879                                 break;
2880                         case 28:
2881                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2882                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2883                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2884                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2885                                 break;
2886                         case 29:
2887                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) |
2888                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2889                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2890                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2891                                 break;
2892                         case 30:
2893                                 gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) |
2894                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) |
2895                                                  PIPE_CONFIG(ADDR_SURF_P2) |
2896                                                  SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2));
2897                                 break;
2898                         default:
2899                                 gb_tile_moden = 0;
2900                                 break;
2901                         }
2902                         rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden;
2903                         WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2904                 }
2905                 for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) {
2906                         switch (reg_offset) {
2907                         case 0:
2908                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
2909                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2910                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2911                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2912                                 break;
2913                         case 1:
2914                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
2915                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2916                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2917                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2918                                 break;
2919                         case 2:
2920                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2921                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2922                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2923                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2924                                 break;
2925                         case 3:
2926                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2927                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2928                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2929                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2930                                 break;
2931                         case 4:
2932                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2933                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2934                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2935                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2936                                 break;
2937                         case 5:
2938                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2939                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2940                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2941                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2942                                 break;
2943                         case 6:
2944                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2945                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2946                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2947                                                  NUM_BANKS(ADDR_SURF_8_BANK));
2948                                 break;
2949                         case 8:
2950                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
2951                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) |
2952                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2953                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2954                                 break;
2955                         case 9:
2956                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) |
2957                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2958                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2959                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2960                                 break;
2961                         case 10:
2962                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
2963                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) |
2964                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2965                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2966                                 break;
2967                         case 11:
2968                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) |
2969                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2970                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2971                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2972                                 break;
2973                         case 12:
2974                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2975                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) |
2976                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2977                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2978                                 break;
2979                         case 13:
2980                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2981                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2982                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) |
2983                                                  NUM_BANKS(ADDR_SURF_16_BANK));
2984                                 break;
2985                         case 14:
2986                                 gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) |
2987                                                  BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) |
2988                                                  MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) |
2989                                                  NUM_BANKS(ADDR_SURF_8_BANK));
2990                                 break;
2991                         default:
2992                                 gb_tile_moden = 0;
2993                                 break;
2994                         }
2995                         rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden;
2996                         WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2997                 }
2998         } else
2999                 DRM_ERROR("unknown num pipe config: 0x%x\n", num_pipe_configs);
3000 }
3001
3002 /**
3003  * cik_select_se_sh - select which SE, SH to address
3004  *
3005  * @rdev: radeon_device pointer
3006  * @se_num: shader engine to address
3007  * @sh_num: sh block to address
3008  *
3009  * Select which SE, SH combinations to address. Certain
3010  * registers are instanced per SE or SH.  0xffffffff means
3011  * broadcast to all SEs or SHs (CIK).
3012  */
3013 static void cik_select_se_sh(struct radeon_device *rdev,
3014                              u32 se_num, u32 sh_num)
3015 {
3016         u32 data = INSTANCE_BROADCAST_WRITES;
3017
3018         if ((se_num == 0xffffffff) && (sh_num == 0xffffffff))
3019                 data |= SH_BROADCAST_WRITES | SE_BROADCAST_WRITES;
3020         else if (se_num == 0xffffffff)
3021                 data |= SE_BROADCAST_WRITES | SH_INDEX(sh_num);
3022         else if (sh_num == 0xffffffff)
3023                 data |= SH_BROADCAST_WRITES | SE_INDEX(se_num);
3024         else
3025                 data |= SH_INDEX(sh_num) | SE_INDEX(se_num);
3026         WREG32(GRBM_GFX_INDEX, data);
3027 }
3028
3029 /**
3030  * cik_create_bitmask - create a bitmask
3031  *
3032  * @bit_width: length of the mask
3033  *
3034  * create a variable length bit mask (CIK).
3035  * Returns the bitmask.
3036  */
3037 static u32 cik_create_bitmask(u32 bit_width)
3038 {
3039         u32 i, mask = 0;
3040
3041         for (i = 0; i < bit_width; i++) {
3042                 mask <<= 1;
3043                 mask |= 1;
3044         }
3045         return mask;
3046 }
3047
3048 /**
3049  * cik_select_se_sh - select which SE, SH to address
3050  *
3051  * @rdev: radeon_device pointer
3052  * @max_rb_num: max RBs (render backends) for the asic
3053  * @se_num: number of SEs (shader engines) for the asic
3054  * @sh_per_se: number of SH blocks per SE for the asic
3055  *
3056  * Calculates the bitmask of disabled RBs (CIK).
3057  * Returns the disabled RB bitmask.
3058  */
3059 static u32 cik_get_rb_disabled(struct radeon_device *rdev,
3060                               u32 max_rb_num, u32 se_num,
3061                               u32 sh_per_se)
3062 {
3063         u32 data, mask;
3064
3065         data = RREG32(CC_RB_BACKEND_DISABLE);
3066         if (data & 1)
3067                 data &= BACKEND_DISABLE_MASK;
3068         else
3069                 data = 0;
3070         data |= RREG32(GC_USER_RB_BACKEND_DISABLE);
3071
3072         data >>= BACKEND_DISABLE_SHIFT;
3073
3074         mask = cik_create_bitmask(max_rb_num / se_num / sh_per_se);
3075
3076         return data & mask;
3077 }
3078
3079 /**
3080  * cik_setup_rb - setup the RBs on the asic
3081  *
3082  * @rdev: radeon_device pointer
3083  * @se_num: number of SEs (shader engines) for the asic
3084  * @sh_per_se: number of SH blocks per SE for the asic
3085  * @max_rb_num: max RBs (render backends) for the asic
3086  *
3087  * Configures per-SE/SH RB registers (CIK).
3088  */
3089 static void cik_setup_rb(struct radeon_device *rdev,
3090                          u32 se_num, u32 sh_per_se,
3091                          u32 max_rb_num)
3092 {
3093         int i, j;
3094         u32 data, mask;
3095         u32 disabled_rbs = 0;
3096         u32 enabled_rbs = 0;
3097
3098         for (i = 0; i < se_num; i++) {
3099                 for (j = 0; j < sh_per_se; j++) {
3100                         cik_select_se_sh(rdev, i, j);
3101                         data = cik_get_rb_disabled(rdev, max_rb_num, se_num, sh_per_se);
3102                         if (rdev->family == CHIP_HAWAII)
3103                                 disabled_rbs |= data << ((i * sh_per_se + j) * HAWAII_RB_BITMAP_WIDTH_PER_SH);
3104                         else
3105                                 disabled_rbs |= data << ((i * sh_per_se + j) * CIK_RB_BITMAP_WIDTH_PER_SH);
3106                 }
3107         }
3108         cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
3109
3110         mask = 1;
3111         for (i = 0; i < max_rb_num; i++) {
3112                 if (!(disabled_rbs & mask))
3113                         enabled_rbs |= mask;
3114                 mask <<= 1;
3115         }
3116
3117         for (i = 0; i < se_num; i++) {
3118                 cik_select_se_sh(rdev, i, 0xffffffff);
3119                 data = 0;
3120                 for (j = 0; j < sh_per_se; j++) {
3121                         switch (enabled_rbs & 3) {
3122                         case 0:
3123                                 if (j == 0)
3124                                         data |= PKR_MAP(RASTER_CONFIG_RB_MAP_3);
3125                                 else
3126                                         data |= PKR_MAP(RASTER_CONFIG_RB_MAP_0);
3127                                 break;
3128                         case 1:
3129                                 data |= (RASTER_CONFIG_RB_MAP_0 << (i * sh_per_se + j) * 2);
3130                                 break;
3131                         case 2:
3132                                 data |= (RASTER_CONFIG_RB_MAP_3 << (i * sh_per_se + j) * 2);
3133                                 break;
3134                         case 3:
3135                         default:
3136                                 data |= (RASTER_CONFIG_RB_MAP_2 << (i * sh_per_se + j) * 2);
3137                                 break;
3138                         }
3139                         enabled_rbs >>= 2;
3140                 }
3141                 WREG32(PA_SC_RASTER_CONFIG, data);
3142         }
3143         cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
3144 }
3145
3146 /**
3147  * cik_gpu_init - setup the 3D engine
3148  *
3149  * @rdev: radeon_device pointer
3150  *
3151  * Configures the 3D engine and tiling configuration
3152  * registers so that the 3D engine is usable.
3153  */
3154 static void cik_gpu_init(struct radeon_device *rdev)
3155 {
3156         u32 gb_addr_config = RREG32(GB_ADDR_CONFIG);
3157         u32 mc_shared_chmap, mc_arb_ramcfg;
3158         u32 hdp_host_path_cntl;
3159         u32 tmp;
3160         int i, j;
3161
3162         switch (rdev->family) {
3163         case CHIP_BONAIRE:
3164                 rdev->config.cik.max_shader_engines = 2;
3165                 rdev->config.cik.max_tile_pipes = 4;
3166                 rdev->config.cik.max_cu_per_sh = 7;
3167                 rdev->config.cik.max_sh_per_se = 1;
3168                 rdev->config.cik.max_backends_per_se = 2;
3169                 rdev->config.cik.max_texture_channel_caches = 4;
3170                 rdev->config.cik.max_gprs = 256;
3171                 rdev->config.cik.max_gs_threads = 32;
3172                 rdev->config.cik.max_hw_contexts = 8;
3173
3174                 rdev->config.cik.sc_prim_fifo_size_frontend = 0x20;
3175                 rdev->config.cik.sc_prim_fifo_size_backend = 0x100;
3176                 rdev->config.cik.sc_hiz_tile_fifo_size = 0x30;
3177                 rdev->config.cik.sc_earlyz_tile_fifo_size = 0x130;
3178                 gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN;
3179                 break;
3180         case CHIP_HAWAII:
3181                 rdev->config.cik.max_shader_engines = 4;
3182                 rdev->config.cik.max_tile_pipes = 16;
3183                 rdev->config.cik.max_cu_per_sh = 11;
3184                 rdev->config.cik.max_sh_per_se = 1;
3185                 rdev->config.cik.max_backends_per_se = 4;
3186                 rdev->config.cik.max_texture_channel_caches = 16;
3187                 rdev->config.cik.max_gprs = 256;
3188                 rdev->config.cik.max_gs_threads = 32;
3189                 rdev->config.cik.max_hw_contexts = 8;
3190
3191                 rdev->config.cik.sc_prim_fifo_size_frontend = 0x20;
3192                 rdev->config.cik.sc_prim_fifo_size_backend = 0x100;
3193                 rdev->config.cik.sc_hiz_tile_fifo_size = 0x30;
3194                 rdev->config.cik.sc_earlyz_tile_fifo_size = 0x130;
3195                 gb_addr_config = HAWAII_GB_ADDR_CONFIG_GOLDEN;
3196                 break;
3197         case CHIP_KAVERI:
3198                 rdev->config.cik.max_shader_engines = 1;
3199                 rdev->config.cik.max_tile_pipes = 4;
3200                 if ((rdev->pdev->device == 0x1304) ||
3201                     (rdev->pdev->device == 0x1305) ||
3202                     (rdev->pdev->device == 0x130C) ||
3203                     (rdev->pdev->device == 0x130F) ||
3204                     (rdev->pdev->device == 0x1310) ||
3205                     (rdev->pdev->device == 0x1311) ||
3206                     (rdev->pdev->device == 0x131C)) {
3207                         rdev->config.cik.max_cu_per_sh = 8;
3208                         rdev->config.cik.max_backends_per_se = 2;
3209                 } else if ((rdev->pdev->device == 0x1309) ||
3210                            (rdev->pdev->device == 0x130A) ||
3211                            (rdev->pdev->device == 0x130D) ||
3212                            (rdev->pdev->device == 0x1313) ||
3213                            (rdev->pdev->device == 0x131D)) {
3214                         rdev->config.cik.max_cu_per_sh = 6;
3215                         rdev->config.cik.max_backends_per_se = 2;
3216                 } else if ((rdev->pdev->device == 0x1306) ||
3217                            (rdev->pdev->device == 0x1307) ||
3218                            (rdev->pdev->device == 0x130B) ||
3219                            (rdev->pdev->device == 0x130E) ||
3220                            (rdev->pdev->device == 0x1315) ||
3221                            (rdev->pdev->device == 0x131B)) {
3222                         rdev->config.cik.max_cu_per_sh = 4;
3223                         rdev->config.cik.max_backends_per_se = 1;
3224                 } else {
3225                         rdev->config.cik.max_cu_per_sh = 3;
3226                         rdev->config.cik.max_backends_per_se = 1;
3227                 }
3228                 rdev->config.cik.max_sh_per_se = 1;
3229                 rdev->config.cik.max_texture_channel_caches = 4;
3230                 rdev->config.cik.max_gprs = 256;
3231                 rdev->config.cik.max_gs_threads = 16;
3232                 rdev->config.cik.max_hw_contexts = 8;
3233
3234                 rdev->config.cik.sc_prim_fifo_size_frontend = 0x20;
3235                 rdev->config.cik.sc_prim_fifo_size_backend = 0x100;
3236                 rdev->config.cik.sc_hiz_tile_fifo_size = 0x30;
3237                 rdev->config.cik.sc_earlyz_tile_fifo_size = 0x130;
3238                 gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN;
3239                 break;
3240         case CHIP_KABINI:
3241         default:
3242                 rdev->config.cik.max_shader_engines = 1;
3243                 rdev->config.cik.max_tile_pipes = 2;
3244                 rdev->config.cik.max_cu_per_sh = 2;
3245                 rdev->config.cik.max_sh_per_se = 1;
3246                 rdev->config.cik.max_backends_per_se = 1;
3247                 rdev->config.cik.max_texture_channel_caches = 2;
3248                 rdev->config.cik.max_gprs = 256;
3249                 rdev->config.cik.max_gs_threads = 16;
3250                 rdev->config.cik.max_hw_contexts = 8;
3251
3252                 rdev->config.cik.sc_prim_fifo_size_frontend = 0x20;
3253                 rdev->config.cik.sc_prim_fifo_size_backend = 0x100;
3254                 rdev->config.cik.sc_hiz_tile_fifo_size = 0x30;
3255                 rdev->config.cik.sc_earlyz_tile_fifo_size = 0x130;
3256                 gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN;
3257                 break;
3258         }
3259
3260         /* Initialize HDP */
3261         for (i = 0, j = 0; i < 32; i++, j += 0x18) {
3262                 WREG32((0x2c14 + j), 0x00000000);
3263                 WREG32((0x2c18 + j), 0x00000000);
3264                 WREG32((0x2c1c + j), 0x00000000);
3265                 WREG32((0x2c20 + j), 0x00000000);
3266                 WREG32((0x2c24 + j), 0x00000000);
3267         }
3268
3269         WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff));
3270
3271         WREG32(BIF_FB_EN, FB_READ_EN | FB_WRITE_EN);
3272
3273         mc_shared_chmap = RREG32(MC_SHARED_CHMAP);
3274         mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG);
3275
3276         rdev->config.cik.num_tile_pipes = rdev->config.cik.max_tile_pipes;
3277         rdev->config.cik.mem_max_burst_length_bytes = 256;
3278         tmp = (mc_arb_ramcfg & NOOFCOLS_MASK) >> NOOFCOLS_SHIFT;
3279         rdev->config.cik.mem_row_size_in_kb = (4 * (1 << (8 + tmp))) / 1024;
3280         if (rdev->config.cik.mem_row_size_in_kb > 4)
3281                 rdev->config.cik.mem_row_size_in_kb = 4;
3282         /* XXX use MC settings? */
3283         rdev->config.cik.shader_engine_tile_size = 32;
3284         rdev->config.cik.num_gpus = 1;
3285         rdev->config.cik.multi_gpu_tile_size = 64;
3286
3287         /* fix up row size */
3288         gb_addr_config &= ~ROW_SIZE_MASK;
3289         switch (rdev->config.cik.mem_row_size_in_kb) {
3290         case 1:
3291         default:
3292                 gb_addr_config |= ROW_SIZE(0);
3293                 break;
3294         case 2:
3295                 gb_addr_config |= ROW_SIZE(1);
3296                 break;
3297         case 4:
3298                 gb_addr_config |= ROW_SIZE(2);
3299                 break;
3300         }
3301
3302         /* setup tiling info dword.  gb_addr_config is not adequate since it does
3303          * not have bank info, so create a custom tiling dword.
3304          * bits 3:0   num_pipes
3305          * bits 7:4   num_banks
3306          * bits 11:8  group_size
3307          * bits 15:12 row_size
3308          */
3309         rdev->config.cik.tile_config = 0;
3310         switch (rdev->config.cik.num_tile_pipes) {
3311         case 1:
3312                 rdev->config.cik.tile_config |= (0 << 0);
3313                 break;
3314         case 2:
3315                 rdev->config.cik.tile_config |= (1 << 0);
3316                 break;
3317         case 4:
3318                 rdev->config.cik.tile_config |= (2 << 0);
3319                 break;
3320         case 8:
3321         default:
3322                 /* XXX what about 12? */
3323                 rdev->config.cik.tile_config |= (3 << 0);
3324                 break;
3325         }
3326         rdev->config.cik.tile_config |=
3327                 ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4;
3328         rdev->config.cik.tile_config |=
3329                 ((gb_addr_config & PIPE_INTERLEAVE_SIZE_MASK) >> PIPE_INTERLEAVE_SIZE_SHIFT) << 8;
3330         rdev->config.cik.tile_config |=
3331                 ((gb_addr_config & ROW_SIZE_MASK) >> ROW_SIZE_SHIFT) << 12;
3332
3333         WREG32(GB_ADDR_CONFIG, gb_addr_config);
3334         WREG32(HDP_ADDR_CONFIG, gb_addr_config);
3335         WREG32(DMIF_ADDR_CALC, gb_addr_config);
3336         WREG32(SDMA0_TILING_CONFIG + SDMA0_REGISTER_OFFSET, gb_addr_config & 0x70);
3337         WREG32(SDMA0_TILING_CONFIG + SDMA1_REGISTER_OFFSET, gb_addr_config & 0x70);
3338         WREG32(UVD_UDEC_ADDR_CONFIG, gb_addr_config);
3339         WREG32(UVD_UDEC_DB_ADDR_CONFIG, gb_addr_config);
3340         WREG32(UVD_UDEC_DBW_ADDR_CONFIG, gb_addr_config);
3341
3342         cik_tiling_mode_table_init(rdev);
3343
3344         cik_setup_rb(rdev, rdev->config.cik.max_shader_engines,
3345                      rdev->config.cik.max_sh_per_se,
3346                      rdev->config.cik.max_backends_per_se);
3347
3348         /* set HW defaults for 3D engine */
3349         WREG32(CP_MEQ_THRESHOLDS, MEQ1_START(0x30) | MEQ2_START(0x60));
3350
3351         WREG32(SX_DEBUG_1, 0x20);
3352
3353         WREG32(TA_CNTL_AUX, 0x00010000);
3354
3355         tmp = RREG32(SPI_CONFIG_CNTL);
3356         tmp |= 0x03000000;
3357         WREG32(SPI_CONFIG_CNTL, tmp);
3358
3359         WREG32(SQ_CONFIG, 1);
3360
3361         WREG32(DB_DEBUG, 0);
3362
3363         tmp = RREG32(DB_DEBUG2) & ~0xf00fffff;
3364         tmp |= 0x00000400;
3365         WREG32(DB_DEBUG2, tmp);
3366
3367         tmp = RREG32(DB_DEBUG3) & ~0x0002021c;
3368         tmp |= 0x00020200;
3369         WREG32(DB_DEBUG3, tmp);
3370
3371         tmp = RREG32(CB_HW_CONTROL) & ~0x00010000;
3372         tmp |= 0x00018208;
3373         WREG32(CB_HW_CONTROL, tmp);
3374
3375         WREG32(SPI_CONFIG_CNTL_1, VTX_DONE_DELAY(4));
3376
3377         WREG32(PA_SC_FIFO_SIZE, (SC_FRONTEND_PRIM_FIFO_SIZE(rdev->config.cik.sc_prim_fifo_size_frontend) |
3378                                  SC_BACKEND_PRIM_FIFO_SIZE(rdev->config.cik.sc_prim_fifo_size_backend) |
3379                                  SC_HIZ_TILE_FIFO_SIZE(rdev->config.cik.sc_hiz_tile_fifo_size) |
3380                                  SC_EARLYZ_TILE_FIFO_SIZE(rdev->config.cik.sc_earlyz_tile_fifo_size)));
3381
3382         WREG32(VGT_NUM_INSTANCES, 1);
3383
3384         WREG32(CP_PERFMON_CNTL, 0);
3385
3386         WREG32(SQ_CONFIG, 0);
3387
3388         WREG32(PA_SC_FORCE_EOV_MAX_CNTS, (FORCE_EOV_MAX_CLK_CNT(4095) |
3389                                           FORCE_EOV_MAX_REZ_CNT(255)));
3390
3391         WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(VC_AND_TC) |
3392                AUTO_INVLD_EN(ES_AND_GS_AUTO));
3393
3394         WREG32(VGT_GS_VERTEX_REUSE, 16);
3395         WREG32(PA_SC_LINE_STIPPLE_STATE, 0);
3396
3397         tmp = RREG32(HDP_MISC_CNTL);
3398         tmp |= HDP_FLUSH_INVALIDATE_CACHE;
3399         WREG32(HDP_MISC_CNTL, tmp);
3400
3401         hdp_host_path_cntl = RREG32(HDP_HOST_PATH_CNTL);
3402         WREG32(HDP_HOST_PATH_CNTL, hdp_host_path_cntl);
3403
3404         WREG32(PA_CL_ENHANCE, CLIP_VTX_REORDER_ENA | NUM_CLIP_SEQ(3));
3405         WREG32(PA_SC_ENHANCE, ENABLE_PA_SC_OUT_OF_ORDER);
3406
3407         udelay(50);
3408 }
3409
3410 /*
3411  * GPU scratch registers helpers function.
3412  */
3413 /**
3414  * cik_scratch_init - setup driver info for CP scratch regs
3415  *
3416  * @rdev: radeon_device pointer
3417  *
3418  * Set up the number and offset of the CP scratch registers.
3419  * NOTE: use of CP scratch registers is a legacy inferface and
3420  * is not used by default on newer asics (r6xx+).  On newer asics,
3421  * memory buffers are used for fences rather than scratch regs.
3422  */
3423 static void cik_scratch_init(struct radeon_device *rdev)
3424 {
3425         int i;
3426
3427         rdev->scratch.num_reg = 7;
3428         rdev->scratch.reg_base = SCRATCH_REG0;
3429         for (i = 0; i < rdev->scratch.num_reg; i++) {
3430                 rdev->scratch.free[i] = true;
3431                 rdev->scratch.reg[i] = rdev->scratch.reg_base + (i * 4);
3432         }
3433 }
3434
3435 /**
3436  * cik_ring_test - basic gfx ring test
3437  *
3438  * @rdev: radeon_device pointer
3439  * @ring: radeon_ring structure holding ring information
3440  *
3441  * Allocate a scratch register and write to it using the gfx ring (CIK).
3442  * Provides a basic gfx ring test to verify that the ring is working.
3443  * Used by cik_cp_gfx_resume();
3444  * Returns 0 on success, error on failure.
3445  */
3446 int cik_ring_test(struct radeon_device *rdev, struct radeon_ring *ring)
3447 {
3448         uint32_t scratch;
3449         uint32_t tmp = 0;
3450         unsigned i;
3451         int r;
3452
3453         r = radeon_scratch_get(rdev, &scratch);
3454         if (r) {
3455                 DRM_ERROR("radeon: cp failed to get scratch reg (%d).\n", r);
3456                 return r;
3457         }
3458         WREG32(scratch, 0xCAFEDEAD);
3459         r = radeon_ring_lock(rdev, ring, 3);
3460         if (r) {
3461                 DRM_ERROR("radeon: cp failed to lock ring %d (%d).\n", ring->idx, r);
3462                 radeon_scratch_free(rdev, scratch);
3463                 return r;
3464         }
3465         radeon_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1));
3466         radeon_ring_write(ring, ((scratch - PACKET3_SET_UCONFIG_REG_START) >> 2));
3467         radeon_ring_write(ring, 0xDEADBEEF);
3468         radeon_ring_unlock_commit(rdev, ring);
3469
3470         for (i = 0; i < rdev->usec_timeout; i++) {
3471                 tmp = RREG32(scratch);
3472                 if (tmp == 0xDEADBEEF)
3473                         break;
3474                 DRM_UDELAY(1);
3475         }
3476         if (i < rdev->usec_timeout) {
3477                 DRM_INFO("ring test on %d succeeded in %d usecs\n", ring->idx, i);
3478         } else {
3479                 DRM_ERROR("radeon: ring %d test failed (scratch(0x%04X)=0x%08X)\n",
3480                           ring->idx, scratch, tmp);
3481                 r = -EINVAL;
3482         }
3483         radeon_scratch_free(rdev, scratch);
3484         return r;
3485 }
3486
3487 /**
3488  * cik_fence_gfx_ring_emit - emit a fence on the gfx ring
3489  *
3490  * @rdev: radeon_device pointer
3491  * @fence: radeon fence object
3492  *
3493  * Emits a fence sequnce number on the gfx ring and flushes
3494  * GPU caches.
3495  */
3496 void cik_fence_gfx_ring_emit(struct radeon_device *rdev,
3497                              struct radeon_fence *fence)
3498 {
3499         struct radeon_ring *ring = &rdev->ring[fence->ring];
3500         u64 addr = rdev->fence_drv[fence->ring].gpu_addr;
3501
3502         /* EVENT_WRITE_EOP - flush caches, send int */
3503         radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4));
3504         radeon_ring_write(ring, (EOP_TCL1_ACTION_EN |
3505                                  EOP_TC_ACTION_EN |
3506                                  EVENT_TYPE(CACHE_FLUSH_AND_INV_TS_EVENT) |
3507                                  EVENT_INDEX(5)));
3508         radeon_ring_write(ring, addr & 0xfffffffc);
3509         radeon_ring_write(ring, (upper_32_bits(addr) & 0xffff) | DATA_SEL(1) | INT_SEL(2));
3510         radeon_ring_write(ring, fence->seq);
3511         radeon_ring_write(ring, 0);
3512         /* HDP flush */
3513         /* We should be using the new WAIT_REG_MEM special op packet here
3514          * but it causes the CP to hang
3515          */
3516         radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
3517         radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
3518                                  WRITE_DATA_DST_SEL(0)));
3519         radeon_ring_write(ring, HDP_MEM_COHERENCY_FLUSH_CNTL >> 2);
3520         radeon_ring_write(ring, 0);
3521         radeon_ring_write(ring, 0);
3522 }
3523
3524 /**
3525  * cik_fence_compute_ring_emit - emit a fence on the compute ring
3526  *
3527  * @rdev: radeon_device pointer
3528  * @fence: radeon fence object
3529  *
3530  * Emits a fence sequnce number on the compute ring and flushes
3531  * GPU caches.
3532  */
3533 void cik_fence_compute_ring_emit(struct radeon_device *rdev,
3534                                  struct radeon_fence *fence)
3535 {
3536         struct radeon_ring *ring = &rdev->ring[fence->ring];
3537         u64 addr = rdev->fence_drv[fence->ring].gpu_addr;
3538
3539         /* RELEASE_MEM - flush caches, send int */
3540         radeon_ring_write(ring, PACKET3(PACKET3_RELEASE_MEM, 5));
3541         radeon_ring_write(ring, (EOP_TCL1_ACTION_EN |
3542                                  EOP_TC_ACTION_EN |
3543                                  EVENT_TYPE(CACHE_FLUSH_AND_INV_TS_EVENT) |
3544                                  EVENT_INDEX(5)));
3545         radeon_ring_write(ring, DATA_SEL(1) | INT_SEL(2));
3546         radeon_ring_write(ring, addr & 0xfffffffc);
3547         radeon_ring_write(ring, upper_32_bits(addr));
3548         radeon_ring_write(ring, fence->seq);
3549         radeon_ring_write(ring, 0);
3550         /* HDP flush */
3551         /* We should be using the new WAIT_REG_MEM special op packet here
3552          * but it causes the CP to hang
3553          */
3554         radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
3555         radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
3556                                  WRITE_DATA_DST_SEL(0)));
3557         radeon_ring_write(ring, HDP_MEM_COHERENCY_FLUSH_CNTL >> 2);
3558         radeon_ring_write(ring, 0);
3559         radeon_ring_write(ring, 0);
3560 }
3561
3562 bool cik_semaphore_ring_emit(struct radeon_device *rdev,
3563                              struct radeon_ring *ring,
3564                              struct radeon_semaphore *semaphore,
3565                              bool emit_wait)
3566 {
3567 /* TODO: figure out why semaphore cause lockups */
3568 #if 0
3569         uint64_t addr = semaphore->gpu_addr;
3570         unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL;
3571
3572         radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1));
3573         radeon_ring_write(ring, addr & 0xffffffff);
3574         radeon_ring_write(ring, (upper_32_bits(addr) & 0xffff) | sel);
3575
3576         return true;
3577 #else
3578         return false;
3579 #endif
3580 }
3581
3582 /**
3583  * cik_copy_cpdma - copy pages using the CP DMA engine
3584  *
3585  * @rdev: radeon_device pointer
3586  * @src_offset: src GPU address
3587  * @dst_offset: dst GPU address
3588  * @num_gpu_pages: number of GPU pages to xfer
3589  * @fence: radeon fence object
3590  *
3591  * Copy GPU paging using the CP DMA engine (CIK+).
3592  * Used by the radeon ttm implementation to move pages if
3593  * registered as the asic copy callback.
3594  */
3595 int cik_copy_cpdma(struct radeon_device *rdev,
3596                    uint64_t src_offset, uint64_t dst_offset,
3597                    unsigned num_gpu_pages,
3598                    struct radeon_fence **fence)
3599 {
3600         struct radeon_semaphore *sem = NULL;
3601         int ring_index = rdev->asic->copy.blit_ring_index;
3602         struct radeon_ring *ring = &rdev->ring[ring_index];
3603         u32 size_in_bytes, cur_size_in_bytes, control;
3604         int i, num_loops;
3605         int r = 0;
3606
3607         r = radeon_semaphore_create(rdev, &sem);
3608         if (r) {
3609                 DRM_ERROR("radeon: moving bo (%d).\n", r);
3610                 return r;
3611         }
3612
3613         size_in_bytes = (num_gpu_pages << RADEON_GPU_PAGE_SHIFT);
3614         num_loops = DIV_ROUND_UP(size_in_bytes, 0x1fffff);
3615         r = radeon_ring_lock(rdev, ring, num_loops * 7 + 18);
3616         if (r) {
3617                 DRM_ERROR("radeon: moving bo (%d).\n", r);
3618                 radeon_semaphore_free(rdev, &sem, NULL);
3619                 return r;
3620         }
3621
3622         radeon_semaphore_sync_to(sem, *fence);
3623         radeon_semaphore_sync_rings(rdev, sem, ring->idx);
3624
3625         for (i = 0; i < num_loops; i++) {
3626                 cur_size_in_bytes = size_in_bytes;
3627                 if (cur_size_in_bytes > 0x1fffff)
3628                         cur_size_in_bytes = 0x1fffff;
3629                 size_in_bytes -= cur_size_in_bytes;
3630                 control = 0;
3631                 if (size_in_bytes == 0)
3632                         control |= PACKET3_DMA_DATA_CP_SYNC;
3633                 radeon_ring_write(ring, PACKET3(PACKET3_DMA_DATA, 5));
3634                 radeon_ring_write(ring, control);
3635                 radeon_ring_write(ring, lower_32_bits(src_offset));
3636                 radeon_ring_write(ring, upper_32_bits(src_offset));
3637                 radeon_ring_write(ring, lower_32_bits(dst_offset));
3638                 radeon_ring_write(ring, upper_32_bits(dst_offset));
3639                 radeon_ring_write(ring, cur_size_in_bytes);
3640                 src_offset += cur_size_in_bytes;
3641                 dst_offset += cur_size_in_bytes;
3642         }
3643
3644         r = radeon_fence_emit(rdev, fence, ring->idx);
3645         if (r) {
3646                 radeon_ring_unlock_undo(rdev, ring);
3647                 return r;
3648         }
3649
3650         radeon_ring_unlock_commit(rdev, ring);
3651         radeon_semaphore_free(rdev, &sem, *fence);
3652
3653         return r;
3654 }
3655
3656 /*
3657  * IB stuff
3658  */
3659 /**
3660  * cik_ring_ib_execute - emit an IB (Indirect Buffer) on the gfx ring
3661  *
3662  * @rdev: radeon_device pointer
3663  * @ib: radeon indirect buffer object
3664  *
3665  * Emits an DE (drawing engine) or CE (constant engine) IB
3666  * on the gfx ring.  IBs are usually generated by userspace
3667  * acceleration drivers and submitted to the kernel for
3668  * sheduling on the ring.  This function schedules the IB
3669  * on the gfx ring for execution by the GPU.
3670  */
3671 void cik_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib)
3672 {
3673         struct radeon_ring *ring = &rdev->ring[ib->ring];
3674         u32 header, control = INDIRECT_BUFFER_VALID;
3675
3676         if (ib->is_const_ib) {
3677                 /* set switch buffer packet before const IB */
3678                 radeon_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0));
3679                 radeon_ring_write(ring, 0);
3680
3681                 header = PACKET3(PACKET3_INDIRECT_BUFFER_CONST, 2);
3682         } else {
3683                 u32 next_rptr;
3684                 if (ring->rptr_save_reg) {
3685                         next_rptr = ring->wptr + 3 + 4;
3686                         radeon_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1));
3687                         radeon_ring_write(ring, ((ring->rptr_save_reg -
3688                                                   PACKET3_SET_UCONFIG_REG_START) >> 2));
3689                         radeon_ring_write(ring, next_rptr);
3690                 } else if (rdev->wb.enabled) {
3691                         next_rptr = ring->wptr + 5 + 4;
3692                         radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
3693                         radeon_ring_write(ring, WRITE_DATA_DST_SEL(1));
3694                         radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc);
3695                         radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr) & 0xffffffff);
3696                         radeon_ring_write(ring, next_rptr);
3697                 }
3698
3699                 header = PACKET3(PACKET3_INDIRECT_BUFFER, 2);
3700         }
3701
3702         control |= ib->length_dw |
3703                 (ib->vm ? (ib->vm->id << 24) : 0);
3704
3705         radeon_ring_write(ring, header);
3706         radeon_ring_write(ring,
3707 #ifdef __BIG_ENDIAN
3708                           (2 << 0) |
3709 #endif
3710                           (ib->gpu_addr & 0xFFFFFFFC));
3711         radeon_ring_write(ring, upper_32_bits(ib->gpu_addr) & 0xFFFF);
3712         radeon_ring_write(ring, control);
3713 }
3714
3715 /**
3716  * cik_ib_test - basic gfx ring IB test
3717  *
3718  * @rdev: radeon_device pointer
3719  * @ring: radeon_ring structure holding ring information
3720  *
3721  * Allocate an IB and execute it on the gfx ring (CIK).
3722  * Provides a basic gfx ring test to verify that IBs are working.
3723  * Returns 0 on success, error on failure.
3724  */
3725 int cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
3726 {
3727         struct radeon_ib ib;
3728         uint32_t scratch;
3729         uint32_t tmp = 0;
3730         unsigned i;
3731         int r;
3732
3733         r = radeon_scratch_get(rdev, &scratch);
3734         if (r) {
3735                 DRM_ERROR("radeon: failed to get scratch reg (%d).\n", r);
3736                 return r;
3737         }
3738         WREG32(scratch, 0xCAFEDEAD);
3739         r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256);
3740         if (r) {
3741                 DRM_ERROR("radeon: failed to get ib (%d).\n", r);
3742                 radeon_scratch_free(rdev, scratch);
3743                 return r;
3744         }
3745         ib.ptr[0] = PACKET3(PACKET3_SET_UCONFIG_REG, 1);
3746         ib.ptr[1] = ((scratch - PACKET3_SET_UCONFIG_REG_START) >> 2);
3747         ib.ptr[2] = 0xDEADBEEF;
3748         ib.length_dw = 3;
3749         r = radeon_ib_schedule(rdev, &ib, NULL);
3750         if (r) {
3751                 radeon_scratch_free(rdev, scratch);
3752                 radeon_ib_free(rdev, &ib);
3753                 DRM_ERROR("radeon: failed to schedule ib (%d).\n", r);
3754                 return r;
3755         }
3756         r = radeon_fence_wait(ib.fence, false);
3757         if (r) {
3758                 DRM_ERROR("radeon: fence wait failed (%d).\n", r);
3759                 radeon_scratch_free(rdev, scratch);
3760                 radeon_ib_free(rdev, &ib);
3761                 return r;
3762         }
3763         for (i = 0; i < rdev->usec_timeout; i++) {
3764                 tmp = RREG32(scratch);
3765                 if (tmp == 0xDEADBEEF)
3766                         break;
3767                 DRM_UDELAY(1);
3768         }
3769         if (i < rdev->usec_timeout) {
3770                 DRM_INFO("ib test on ring %d succeeded in %u usecs\n", ib.fence->ring, i);
3771         } else {
3772                 DRM_ERROR("radeon: ib test failed (scratch(0x%04X)=0x%08X)\n",
3773                           scratch, tmp);
3774                 r = -EINVAL;
3775         }
3776         radeon_scratch_free(rdev, scratch);
3777         radeon_ib_free(rdev, &ib);
3778         return r;
3779 }
3780
3781 /*
3782  * CP.
3783  * On CIK, gfx and compute now have independant command processors.
3784  *
3785  * GFX
3786  * Gfx consists of a single ring and can process both gfx jobs and
3787  * compute jobs.  The gfx CP consists of three microengines (ME):
3788  * PFP - Pre-Fetch Parser
3789  * ME - Micro Engine
3790  * CE - Constant Engine
3791  * The PFP and ME make up what is considered the Drawing Engine (DE).
3792  * The CE is an asynchronous engine used for updating buffer desciptors
3793  * used by the DE so that they can be loaded into cache in parallel
3794  * while the DE is processing state update packets.
3795  *
3796  * Compute
3797  * The compute CP consists of two microengines (ME):
3798  * MEC1 - Compute MicroEngine 1
3799  * MEC2 - Compute MicroEngine 2
3800  * Each MEC supports 4 compute pipes and each pipe supports 8 queues.
3801  * The queues are exposed to userspace and are programmed directly
3802  * by the compute runtime.
3803  */
3804 /**
3805  * cik_cp_gfx_enable - enable/disable the gfx CP MEs
3806  *
3807  * @rdev: radeon_device pointer
3808  * @enable: enable or disable the MEs
3809  *
3810  * Halts or unhalts the gfx MEs.
3811  */
3812 static void cik_cp_gfx_enable(struct radeon_device *rdev, bool enable)
3813 {
3814         if (enable)
3815                 WREG32(CP_ME_CNTL, 0);
3816         else {
3817                 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT));
3818                 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
3819         }
3820         udelay(50);
3821 }
3822
3823 /**
3824  * cik_cp_gfx_load_microcode - load the gfx CP ME ucode
3825  *
3826  * @rdev: radeon_device pointer
3827  *
3828  * Loads the gfx PFP, ME, and CE ucode.
3829  * Returns 0 for success, -EINVAL if the ucode is not available.
3830  */
3831 static int cik_cp_gfx_load_microcode(struct radeon_device *rdev)
3832 {
3833         const __be32 *fw_data;
3834         int i;
3835
3836         if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw)
3837                 return -EINVAL;
3838
3839         cik_cp_gfx_enable(rdev, false);
3840
3841         /* PFP */
3842         fw_data = (const __be32 *)rdev->pfp_fw->data;
3843         WREG32(CP_PFP_UCODE_ADDR, 0);
3844         for (i = 0; i < CIK_PFP_UCODE_SIZE; i++)
3845                 WREG32(CP_PFP_UCODE_DATA, be32_to_cpup(fw_data++));
3846         WREG32(CP_PFP_UCODE_ADDR, 0);
3847
3848         /* CE */
3849         fw_data = (const __be32 *)rdev->ce_fw->data;
3850         WREG32(CP_CE_UCODE_ADDR, 0);
3851         for (i = 0; i < CIK_CE_UCODE_SIZE; i++)
3852                 WREG32(CP_CE_UCODE_DATA, be32_to_cpup(fw_data++));
3853         WREG32(CP_CE_UCODE_ADDR, 0);
3854
3855         /* ME */
3856         fw_data = (const __be32 *)rdev->me_fw->data;
3857         WREG32(CP_ME_RAM_WADDR, 0);
3858         for (i = 0; i < CIK_ME_UCODE_SIZE; i++)
3859                 WREG32(CP_ME_RAM_DATA, be32_to_cpup(fw_data++));
3860         WREG32(CP_ME_RAM_WADDR, 0);
3861
3862         WREG32(CP_PFP_UCODE_ADDR, 0);
3863         WREG32(CP_CE_UCODE_ADDR, 0);
3864         WREG32(CP_ME_RAM_WADDR, 0);
3865         WREG32(CP_ME_RAM_RADDR, 0);
3866         return 0;
3867 }
3868
3869 /**
3870  * cik_cp_gfx_start - start the gfx ring
3871  *
3872  * @rdev: radeon_device pointer
3873  *
3874  * Enables the ring and loads the clear state context and other
3875  * packets required to init the ring.
3876  * Returns 0 for success, error for failure.
3877  */
3878 static int cik_cp_gfx_start(struct radeon_device *rdev)
3879 {
3880         struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
3881         int r, i;
3882
3883         /* init the CP */
3884         WREG32(CP_MAX_CONTEXT, rdev->config.cik.max_hw_contexts - 1);
3885         WREG32(CP_ENDIAN_SWAP, 0);
3886         WREG32(CP_DEVICE_ID, 1);
3887
3888         cik_cp_gfx_enable(rdev, true);
3889
3890         r = radeon_ring_lock(rdev, ring, cik_default_size + 17);
3891         if (r) {
3892                 DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
3893                 return r;
3894         }
3895
3896         /* init the CE partitions.  CE only used for gfx on CIK */
3897         radeon_ring_write(ring, PACKET3(PACKET3_SET_BASE, 2));
3898         radeon_ring_write(ring, PACKET3_BASE_INDEX(CE_PARTITION_BASE));
3899         radeon_ring_write(ring, 0xc000);
3900         radeon_ring_write(ring, 0xc000);
3901
3902         /* setup clear context state */
3903         radeon_ring_write(ring, PACKET3(PACKET3_PREAMBLE_CNTL, 0));
3904         radeon_ring_write(ring, PACKET3_PREAMBLE_BEGIN_CLEAR_STATE);
3905
3906         radeon_ring_write(ring, PACKET3(PACKET3_CONTEXT_CONTROL, 1));
3907         radeon_ring_write(ring, 0x80000000);
3908         radeon_ring_write(ring, 0x80000000);
3909
3910         for (i = 0; i < cik_default_size; i++)
3911                 radeon_ring_write(ring, cik_default_state[i]);
3912
3913         radeon_ring_write(ring, PACKET3(PACKET3_PREAMBLE_CNTL, 0));
3914         radeon_ring_write(ring, PACKET3_PREAMBLE_END_CLEAR_STATE);
3915
3916         /* set clear context state */
3917         radeon_ring_write(ring, PACKET3(PACKET3_CLEAR_STATE, 0));
3918         radeon_ring_write(ring, 0);
3919
3920         radeon_ring_write(ring, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
3921         radeon_ring_write(ring, 0x00000316);
3922         radeon_ring_write(ring, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */
3923         radeon_ring_write(ring, 0x00000010); /* VGT_OUT_DEALLOC_CNTL */
3924
3925         radeon_ring_unlock_commit(rdev, ring);
3926
3927         return 0;
3928 }
3929
3930 /**
3931  * cik_cp_gfx_fini - stop the gfx ring
3932  *
3933  * @rdev: radeon_device pointer
3934  *
3935  * Stop the gfx ring and tear down the driver ring
3936  * info.
3937  */
3938 static void cik_cp_gfx_fini(struct radeon_device *rdev)
3939 {
3940         cik_cp_gfx_enable(rdev, false);
3941         radeon_ring_fini(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]);
3942 }
3943
3944 /**
3945  * cik_cp_gfx_resume - setup the gfx ring buffer registers
3946  *
3947  * @rdev: radeon_device pointer
3948  *
3949  * Program the location and size of the gfx ring buffer
3950  * and test it to make sure it's working.
3951  * Returns 0 for success, error for failure.
3952  */
3953 static int cik_cp_gfx_resume(struct radeon_device *rdev)
3954 {
3955         struct radeon_ring *ring;
3956         u32 tmp;
3957         u32 rb_bufsz;
3958         u64 rb_addr;
3959         int r;
3960
3961         WREG32(CP_SEM_WAIT_TIMER, 0x0);
3962         if (rdev->family != CHIP_HAWAII)
3963                 WREG32(CP_SEM_INCOMPLETE_TIMER_CNTL, 0x0);
3964
3965         /* Set the write pointer delay */
3966         WREG32(CP_RB_WPTR_DELAY, 0);
3967
3968         /* set the RB to use vmid 0 */
3969         WREG32(CP_RB_VMID, 0);
3970
3971         WREG32(SCRATCH_ADDR, ((rdev->wb.gpu_addr + RADEON_WB_SCRATCH_OFFSET) >> 8) & 0xFFFFFFFF);
3972
3973         /* ring 0 - compute and gfx */
3974         /* Set ring buffer size */
3975         ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
3976         rb_bufsz = order_base_2(ring->ring_size / 8);
3977         tmp = (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3978 #ifdef __BIG_ENDIAN
3979         tmp |= BUF_SWAP_32BIT;
3980 #endif
3981         WREG32(CP_RB0_CNTL, tmp);
3982
3983         /* Initialize the ring buffer's read and write pointers */
3984         WREG32(CP_RB0_CNTL, tmp | RB_RPTR_WR_ENA);
3985         ring->wptr = 0;
3986         WREG32(CP_RB0_WPTR, ring->wptr);
3987
3988         /* set the wb address wether it's enabled or not */
3989         WREG32(CP_RB0_RPTR_ADDR, (rdev->wb.gpu_addr + RADEON_WB_CP_RPTR_OFFSET) & 0xFFFFFFFC);
3990         WREG32(CP_RB0_RPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + RADEON_WB_CP_RPTR_OFFSET) & 0xFF);
3991
3992         /* scratch register shadowing is no longer supported */
3993         WREG32(SCRATCH_UMSK, 0);
3994
3995         if (!rdev->wb.enabled)
3996                 tmp |= RB_NO_UPDATE;
3997
3998         mdelay(1);
3999         WREG32(CP_RB0_CNTL, tmp);
4000
4001         rb_addr = ring->gpu_addr >> 8;
4002         WREG32(CP_RB0_BASE, rb_addr);
4003         WREG32(CP_RB0_BASE_HI, upper_32_bits(rb_addr));
4004
4005         ring->rptr = RREG32(CP_RB0_RPTR);
4006
4007         /* start the ring */
4008         cik_cp_gfx_start(rdev);
4009         rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true;
4010         r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]);
4011         if (r) {
4012                 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
4013                 return r;
4014         }
4015         return 0;
4016 }
4017
4018 u32 cik_compute_ring_get_rptr(struct radeon_device *rdev,
4019                               struct radeon_ring *ring)
4020 {
4021         u32 rptr;
4022
4023
4024
4025         if (rdev->wb.enabled) {
4026                 rptr = le32_to_cpu(rdev->wb.wb[ring->rptr_offs/4]);
4027         } else {
4028                 mutex_lock(&rdev->srbm_mutex);
4029                 cik_srbm_select(rdev, ring->me, ring->pipe, ring->queue, 0);
4030                 rptr = RREG32(CP_HQD_PQ_RPTR);
4031                 cik_srbm_select(rdev, 0, 0, 0, 0);
4032                 mutex_unlock(&rdev->srbm_mutex);
4033         }
4034
4035         return rptr;
4036 }
4037
4038 u32 cik_compute_ring_get_wptr(struct radeon_device *rdev,
4039                               struct radeon_ring *ring)
4040 {
4041         u32 wptr;
4042
4043         if (rdev->wb.enabled) {
4044                 wptr = le32_to_cpu(rdev->wb.wb[ring->wptr_offs/4]);
4045         } else {
4046                 mutex_lock(&rdev->srbm_mutex);
4047                 cik_srbm_select(rdev, ring->me, ring->pipe, ring->queue, 0);
4048                 wptr = RREG32(CP_HQD_PQ_WPTR);
4049                 cik_srbm_select(rdev, 0, 0, 0, 0);
4050                 mutex_unlock(&rdev->srbm_mutex);
4051         }
4052
4053         return wptr;
4054 }
4055
4056 void cik_compute_ring_set_wptr(struct radeon_device *rdev,
4057                                struct radeon_ring *ring)
4058 {
4059         rdev->wb.wb[ring->wptr_offs/4] = cpu_to_le32(ring->wptr);
4060         WDOORBELL32(ring->doorbell_index, ring->wptr);
4061 }
4062
4063 /**
4064  * cik_cp_compute_enable - enable/disable the compute CP MEs
4065  *
4066  * @rdev: radeon_device pointer
4067  * @enable: enable or disable the MEs
4068  *
4069  * Halts or unhalts the compute MEs.
4070  */
4071 static void cik_cp_compute_enable(struct radeon_device *rdev, bool enable)
4072 {
4073         if (enable)
4074                 WREG32(CP_MEC_CNTL, 0);
4075         else
4076                 WREG32(CP_MEC_CNTL, (MEC_ME1_HALT | MEC_ME2_HALT));
4077         udelay(50);
4078 }
4079
4080 /**
4081  * cik_cp_compute_load_microcode - load the compute CP ME ucode
4082  *
4083  * @rdev: radeon_device pointer
4084  *
4085  * Loads the compute MEC1&2 ucode.
4086  * Returns 0 for success, -EINVAL if the ucode is not available.
4087  */
4088 static int cik_cp_compute_load_microcode(struct radeon_device *rdev)
4089 {
4090         const __be32 *fw_data;
4091         int i;
4092
4093         if (!rdev->mec_fw)
4094                 return -EINVAL;
4095
4096         cik_cp_compute_enable(rdev, false);
4097
4098         /* MEC1 */
4099         fw_data = (const __be32 *)rdev->mec_fw->data;
4100         WREG32(CP_MEC_ME1_UCODE_ADDR, 0);
4101         for (i = 0; i < CIK_MEC_UCODE_SIZE; i++)
4102                 WREG32(CP_MEC_ME1_UCODE_DATA, be32_to_cpup(fw_data++));
4103         WREG32(CP_MEC_ME1_UCODE_ADDR, 0);
4104
4105         if (rdev->family == CHIP_KAVERI) {
4106                 /* MEC2 */
4107                 fw_data = (const __be32 *)rdev->mec_fw->data;
4108                 WREG32(CP_MEC_ME2_UCODE_ADDR, 0);
4109                 for (i = 0; i < CIK_MEC_UCODE_SIZE; i++)
4110                         WREG32(CP_MEC_ME2_UCODE_DATA, be32_to_cpup(fw_data++));
4111                 WREG32(CP_MEC_ME2_UCODE_ADDR, 0);
4112         }
4113
4114         return 0;
4115 }
4116
4117 /**
4118  * cik_cp_compute_start - start the compute queues
4119  *
4120  * @rdev: radeon_device pointer
4121  *
4122  * Enable the compute queues.
4123  * Returns 0 for success, error for failure.
4124  */
4125 static int cik_cp_compute_start(struct radeon_device *rdev)
4126 {
4127         cik_cp_compute_enable(rdev, true);
4128
4129         return 0;
4130 }
4131
4132 /**
4133  * cik_cp_compute_fini - stop the compute queues
4134  *
4135  * @rdev: radeon_device pointer
4136  *
4137  * Stop the compute queues and tear down the driver queue
4138  * info.
4139  */
4140 static void cik_cp_compute_fini(struct radeon_device *rdev)
4141 {
4142         int i, idx, r;
4143
4144         cik_cp_compute_enable(rdev, false);
4145
4146         for (i = 0; i < 2; i++) {
4147                 if (i == 0)
4148                         idx = CAYMAN_RING_TYPE_CP1_INDEX;
4149                 else
4150                         idx = CAYMAN_RING_TYPE_CP2_INDEX;
4151
4152                 if (rdev->ring[idx].mqd_obj) {
4153                         r = radeon_bo_reserve(rdev->ring[idx].mqd_obj, false);
4154                         if (unlikely(r != 0))
4155                                 dev_warn(rdev->dev, "(%d) reserve MQD bo failed\n", r);
4156
4157                         radeon_bo_unpin(rdev->ring[idx].mqd_obj);
4158                         radeon_bo_unreserve(rdev->ring[idx].mqd_obj);
4159
4160                         radeon_bo_unref(&rdev->ring[idx].mqd_obj);
4161                         rdev->ring[idx].mqd_obj = NULL;
4162                 }
4163         }
4164 }
4165
4166 static void cik_mec_fini(struct radeon_device *rdev)
4167 {
4168         int r;
4169
4170         if (rdev->mec.hpd_eop_obj) {
4171                 r = radeon_bo_reserve(rdev->mec.hpd_eop_obj, false);
4172                 if (unlikely(r != 0))
4173                         dev_warn(rdev->dev, "(%d) reserve HPD EOP bo failed\n", r);
4174                 radeon_bo_unpin(rdev->mec.hpd_eop_obj);
4175                 radeon_bo_unreserve(rdev->mec.hpd_eop_obj);
4176
4177                 radeon_bo_unref(&rdev->mec.hpd_eop_obj);
4178                 rdev->mec.hpd_eop_obj = NULL;
4179         }
4180 }
4181
4182 #define MEC_HPD_SIZE 2048
4183
4184 static int cik_mec_init(struct radeon_device *rdev)
4185 {
4186         int r;
4187         u32 *hpd;
4188
4189         /*
4190          * KV:    2 MEC, 4 Pipes/MEC, 8 Queues/Pipe - 64 Queues total
4191          * CI/KB: 1 MEC, 4 Pipes/MEC, 8 Queues/Pipe - 32 Queues total
4192          */
4193         if (rdev->family == CHIP_KAVERI)
4194                 rdev->mec.num_mec = 2;
4195         else
4196                 rdev->mec.num_mec = 1;
4197         rdev->mec.num_pipe = 4;
4198         rdev->mec.num_queue = rdev->mec.num_mec * rdev->mec.num_pipe * 8;
4199
4200         if (rdev->mec.hpd_eop_obj == NULL) {
4201                 r = radeon_bo_create(rdev,
4202                                      rdev->mec.num_mec *rdev->mec.num_pipe * MEC_HPD_SIZE * 2,
4203                                      PAGE_SIZE, true,
4204                                      RADEON_GEM_DOMAIN_GTT, NULL,
4205                                      &rdev->mec.hpd_eop_obj);
4206                 if (r) {
4207                         dev_warn(rdev->dev, "(%d) create HDP EOP bo failed\n", r);
4208                         return r;
4209                 }
4210         }
4211
4212         r = radeon_bo_reserve(rdev->mec.hpd_eop_obj, false);
4213         if (unlikely(r != 0)) {
4214                 cik_mec_fini(rdev);
4215                 return r;
4216         }
4217         r = radeon_bo_pin(rdev->mec.hpd_eop_obj, RADEON_GEM_DOMAIN_GTT,
4218                           &rdev->mec.hpd_eop_gpu_addr);
4219         if (r) {
4220                 dev_warn(rdev->dev, "(%d) pin HDP EOP bo failed\n", r);
4221                 cik_mec_fini(rdev);
4222                 return r;
4223         }
4224         r = radeon_bo_kmap(rdev->mec.hpd_eop_obj, (void **)&hpd);
4225         if (r) {
4226                 dev_warn(rdev->dev, "(%d) map HDP EOP bo failed\n", r);
4227                 cik_mec_fini(rdev);
4228                 return r;
4229         }
4230
4231         /* clear memory.  Not sure if this is required or not */
4232         memset(hpd, 0, rdev->mec.num_mec *rdev->mec.num_pipe * MEC_HPD_SIZE * 2);
4233
4234         radeon_bo_kunmap(rdev->mec.hpd_eop_obj);
4235         radeon_bo_unreserve(rdev->mec.hpd_eop_obj);
4236
4237         return 0;
4238 }
4239
4240 struct hqd_registers
4241 {
4242         u32 cp_mqd_base_addr;
4243         u32 cp_mqd_base_addr_hi;
4244         u32 cp_hqd_active;
4245         u32 cp_hqd_vmid;
4246         u32 cp_hqd_persistent_state;
4247         u32 cp_hqd_pipe_priority;
4248         u32 cp_hqd_queue_priority;
4249         u32 cp_hqd_quantum;
4250         u32 cp_hqd_pq_base;
4251         u32 cp_hqd_pq_base_hi;
4252         u32 cp_hqd_pq_rptr;
4253         u32 cp_hqd_pq_rptr_report_addr;
4254         u32 cp_hqd_pq_rptr_report_addr_hi;
4255         u32 cp_hqd_pq_wptr_poll_addr;
4256         u32 cp_hqd_pq_wptr_poll_addr_hi;
4257         u32 cp_hqd_pq_doorbell_control;
4258         u32 cp_hqd_pq_wptr;
4259         u32 cp_hqd_pq_control;
4260         u32 cp_hqd_ib_base_addr;
4261         u32 cp_hqd_ib_base_addr_hi;
4262         u32 cp_hqd_ib_rptr;
4263         u32 cp_hqd_ib_control;
4264         u32 cp_hqd_iq_timer;
4265         u32 cp_hqd_iq_rptr;
4266         u32 cp_hqd_dequeue_request;
4267         u32 cp_hqd_dma_offload;
4268         u32 cp_hqd_sema_cmd;
4269         u32 cp_hqd_msg_type;
4270         u32 cp_hqd_atomic0_preop_lo;
4271         u32 cp_hqd_atomic0_preop_hi;
4272         u32 cp_hqd_atomic1_preop_lo;
4273         u32 cp_hqd_atomic1_preop_hi;
4274         u32 cp_hqd_hq_scheduler0;
4275         u32 cp_hqd_hq_scheduler1;
4276         u32 cp_mqd_control;
4277 };
4278
4279 struct bonaire_mqd
4280 {
4281         u32 header;
4282         u32 dispatch_initiator;
4283         u32 dimensions[3];
4284         u32 start_idx[3];
4285         u32 num_threads[3];
4286         u32 pipeline_stat_enable;
4287         u32 perf_counter_enable;
4288         u32 pgm[2];
4289         u32 tba[2];
4290         u32 tma[2];
4291         u32 pgm_rsrc[2];
4292         u32 vmid;
4293         u32 resource_limits;
4294         u32 static_thread_mgmt01[2];
4295         u32 tmp_ring_size;
4296         u32 static_thread_mgmt23[2];
4297         u32 restart[3];
4298         u32 thread_trace_enable;
4299         u32 reserved1;
4300         u32 user_data[16];
4301         u32 vgtcs_invoke_count[2];
4302         struct hqd_registers queue_state;
4303         u32 dequeue_cntr;
4304         u32 interrupt_queue[64];
4305 };
4306
4307 /**
4308  * cik_cp_compute_resume - setup the compute queue registers
4309  *
4310  * @rdev: radeon_device pointer
4311  *
4312  * Program the compute queues and test them to make sure they
4313  * are working.
4314  * Returns 0 for success, error for failure.
4315  */
4316 static int cik_cp_compute_resume(struct radeon_device *rdev)
4317 {
4318         int r, i, idx;
4319         u32 tmp;
4320         bool use_doorbell = true;
4321         u64 hqd_gpu_addr;
4322         u64 mqd_gpu_addr;
4323         u64 eop_gpu_addr;
4324         u64 wb_gpu_addr;
4325         u32 *buf;
4326         struct bonaire_mqd *mqd;
4327
4328         r = cik_cp_compute_start(rdev);
4329         if (r)
4330                 return r;
4331
4332         /* fix up chicken bits */
4333         tmp = RREG32(CP_CPF_DEBUG);
4334         tmp |= (1 << 23);
4335         WREG32(CP_CPF_DEBUG, tmp);
4336
4337         /* init the pipes */
4338         mutex_lock(&rdev->srbm_mutex);
4339         for (i = 0; i < (rdev->mec.num_pipe * rdev->mec.num_mec); i++) {
4340                 int me = (i < 4) ? 1 : 2;
4341                 int pipe = (i < 4) ? i : (i - 4);
4342
4343                 eop_gpu_addr = rdev->mec.hpd_eop_gpu_addr + (i * MEC_HPD_SIZE * 2);
4344
4345                 cik_srbm_select(rdev, me, pipe, 0, 0);
4346
4347                 /* write the EOP addr */
4348                 WREG32(CP_HPD_EOP_BASE_ADDR, eop_gpu_addr >> 8);
4349                 WREG32(CP_HPD_EOP_BASE_ADDR_HI, upper_32_bits(eop_gpu_addr) >> 8);
4350
4351                 /* set the VMID assigned */
4352                 WREG32(CP_HPD_EOP_VMID, 0);
4353
4354                 /* set the EOP size, register value is 2^(EOP_SIZE+1) dwords */
4355                 tmp = RREG32(CP_HPD_EOP_CONTROL);
4356                 tmp &= ~EOP_SIZE_MASK;
4357                 tmp |= order_base_2(MEC_HPD_SIZE / 8);
4358                 WREG32(CP_HPD_EOP_CONTROL, tmp);
4359         }
4360         cik_srbm_select(rdev, 0, 0, 0, 0);
4361         mutex_unlock(&rdev->srbm_mutex);
4362
4363         /* init the queues.  Just two for now. */
4364         for (i = 0; i < 2; i++) {
4365                 if (i == 0)
4366                         idx = CAYMAN_RING_TYPE_CP1_INDEX;
4367                 else
4368                         idx = CAYMAN_RING_TYPE_CP2_INDEX;
4369
4370                 if (rdev->ring[idx].mqd_obj == NULL) {
4371                         r = radeon_bo_create(rdev,
4372                                              sizeof(struct bonaire_mqd),
4373                                              PAGE_SIZE, true,
4374                                              RADEON_GEM_DOMAIN_GTT, NULL,
4375                                              &rdev->ring[idx].mqd_obj);
4376                         if (r) {
4377                                 dev_warn(rdev->dev, "(%d) create MQD bo failed\n", r);
4378                                 return r;
4379                         }
4380                 }
4381
4382                 r = radeon_bo_reserve(rdev->ring[idx].mqd_obj, false);
4383                 if (unlikely(r != 0)) {
4384                         cik_cp_compute_fini(rdev);
4385                         return r;
4386                 }
4387                 r = radeon_bo_pin(rdev->ring[idx].mqd_obj, RADEON_GEM_DOMAIN_GTT,
4388                                   &mqd_gpu_addr);
4389                 if (r) {
4390                         dev_warn(rdev->dev, "(%d) pin MQD bo failed\n", r);
4391                         cik_cp_compute_fini(rdev);
4392                         return r;
4393                 }
4394                 r = radeon_bo_kmap(rdev->ring[idx].mqd_obj, (void **)&buf);
4395                 if (r) {
4396                         dev_warn(rdev->dev, "(%d) map MQD bo failed\n", r);
4397                         cik_cp_compute_fini(rdev);
4398                         return r;
4399                 }
4400
4401                 /* init the mqd struct */
4402                 memset(buf, 0, sizeof(struct bonaire_mqd));
4403
4404                 mqd = (struct bonaire_mqd *)buf;
4405                 mqd->header = 0xC0310800;
4406                 mqd->static_thread_mgmt01[0] = 0xffffffff;
4407                 mqd->static_thread_mgmt01[1] = 0xffffffff;
4408                 mqd->static_thread_mgmt23[0] = 0xffffffff;
4409                 mqd->static_thread_mgmt23[1] = 0xffffffff;
4410
4411                 mutex_lock(&rdev->srbm_mutex);
4412                 cik_srbm_select(rdev, rdev->ring[idx].me,
4413                                 rdev->ring[idx].pipe,
4414                                 rdev->ring[idx].queue, 0);
4415
4416                 /* disable wptr polling */
4417                 tmp = RREG32(CP_PQ_WPTR_POLL_CNTL);
4418                 tmp &= ~WPTR_POLL_EN;
4419                 WREG32(CP_PQ_WPTR_POLL_CNTL, tmp);
4420
4421                 /* enable doorbell? */
4422                 mqd->queue_state.cp_hqd_pq_doorbell_control =
4423                         RREG32(CP_HQD_PQ_DOORBELL_CONTROL);
4424                 if (use_doorbell)
4425                         mqd->queue_state.cp_hqd_pq_doorbell_control |= DOORBELL_EN;
4426                 else
4427                         mqd->queue_state.cp_hqd_pq_doorbell_control &= ~DOORBELL_EN;
4428                 WREG32(CP_HQD_PQ_DOORBELL_CONTROL,
4429                        mqd->queue_state.cp_hqd_pq_doorbell_control);
4430
4431                 /* disable the queue if it's active */
4432                 mqd->queue_state.cp_hqd_dequeue_request = 0;
4433                 mqd->queue_state.cp_hqd_pq_rptr = 0;
4434                 mqd->queue_state.cp_hqd_pq_wptr= 0;
4435                 if (RREG32(CP_HQD_ACTIVE) & 1) {
4436                         WREG32(CP_HQD_DEQUEUE_REQUEST, 1);
4437                         for (i = 0; i < rdev->usec_timeout; i++) {
4438                                 if (!(RREG32(CP_HQD_ACTIVE) & 1))
4439                                         break;
4440                                 udelay(1);
4441                         }
4442                         WREG32(CP_HQD_DEQUEUE_REQUEST, mqd->queue_state.cp_hqd_dequeue_request);
4443                         WREG32(CP_HQD_PQ_RPTR, mqd->queue_state.cp_hqd_pq_rptr);
4444                         WREG32(CP_HQD_PQ_WPTR, mqd->queue_state.cp_hqd_pq_wptr);
4445                 }
4446
4447                 /* set the pointer to the MQD */
4448                 mqd->queue_state.cp_mqd_base_addr = mqd_gpu_addr & 0xfffffffc;
4449                 mqd->queue_state.cp_mqd_base_addr_hi = upper_32_bits(mqd_gpu_addr);
4450                 WREG32(CP_MQD_BASE_ADDR, mqd->queue_state.cp_mqd_base_addr);
4451                 WREG32(CP_MQD_BASE_ADDR_HI, mqd->queue_state.cp_mqd_base_addr_hi);
4452                 /* set MQD vmid to 0 */
4453                 mqd->queue_state.cp_mqd_control = RREG32(CP_MQD_CONTROL);
4454                 mqd->queue_state.cp_mqd_control &= ~MQD_VMID_MASK;
4455                 WREG32(CP_MQD_CONTROL, mqd->queue_state.cp_mqd_control);
4456
4457                 /* set the pointer to the HQD, this is similar CP_RB0_BASE/_HI */
4458                 hqd_gpu_addr = rdev->ring[idx].gpu_addr >> 8;
4459                 mqd->queue_state.cp_hqd_pq_base = hqd_gpu_addr;
4460                 mqd->queue_state.cp_hqd_pq_base_hi = upper_32_bits(hqd_gpu_addr);
4461                 WREG32(CP_HQD_PQ_BASE, mqd->queue_state.cp_hqd_pq_base);
4462                 WREG32(CP_HQD_PQ_BASE_HI, mqd->queue_state.cp_hqd_pq_base_hi);
4463
4464                 /* set up the HQD, this is similar to CP_RB0_CNTL */
4465                 mqd->queue_state.cp_hqd_pq_control = RREG32(CP_HQD_PQ_CONTROL);
4466                 mqd->queue_state.cp_hqd_pq_control &=
4467                         ~(QUEUE_SIZE_MASK | RPTR_BLOCK_SIZE_MASK);
4468
4469                 mqd->queue_state.cp_hqd_pq_control |=
4470                         order_base_2(rdev->ring[idx].ring_size / 8);
4471                 mqd->queue_state.cp_hqd_pq_control |=
4472                         (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8);
4473 #ifdef __BIG_ENDIAN
4474                 mqd->queue_state.cp_hqd_pq_control |= BUF_SWAP_32BIT;
4475 #endif
4476                 mqd->queue_state.cp_hqd_pq_control &=
4477                         ~(UNORD_DISPATCH | ROQ_PQ_IB_FLIP | PQ_VOLATILE);
4478                 mqd->queue_state.cp_hqd_pq_control |=
4479                         PRIV_STATE | KMD_QUEUE; /* assuming kernel queue control */
4480                 WREG32(CP_HQD_PQ_CONTROL, mqd->queue_state.cp_hqd_pq_control);
4481
4482                 /* only used if CP_PQ_WPTR_POLL_CNTL.WPTR_POLL_EN=1 */
4483                 if (i == 0)
4484                         wb_gpu_addr = rdev->wb.gpu_addr + CIK_WB_CP1_WPTR_OFFSET;
4485                 else
4486                         wb_gpu_addr = rdev->wb.gpu_addr + CIK_WB_CP2_WPTR_OFFSET;
4487                 mqd->queue_state.cp_hqd_pq_wptr_poll_addr = wb_gpu_addr & 0xfffffffc;
4488                 mqd->queue_state.cp_hqd_pq_wptr_poll_addr_hi = upper_32_bits(wb_gpu_addr) & 0xffff;
4489                 WREG32(CP_HQD_PQ_WPTR_POLL_ADDR, mqd->queue_state.cp_hqd_pq_wptr_poll_addr);
4490                 WREG32(CP_HQD_PQ_WPTR_POLL_ADDR_HI,
4491                        mqd->queue_state.cp_hqd_pq_wptr_poll_addr_hi);
4492
4493                 /* set the wb address wether it's enabled or not */
4494                 if (i == 0)
4495                         wb_gpu_addr = rdev->wb.gpu_addr + RADEON_WB_CP1_RPTR_OFFSET;
4496                 else
4497                         wb_gpu_addr = rdev->wb.gpu_addr + RADEON_WB_CP2_RPTR_OFFSET;
4498                 mqd->queue_state.cp_hqd_pq_rptr_report_addr = wb_gpu_addr & 0xfffffffc;
4499                 mqd->queue_state.cp_hqd_pq_rptr_report_addr_hi =
4500                         upper_32_bits(wb_gpu_addr) & 0xffff;
4501                 WREG32(CP_HQD_PQ_RPTR_REPORT_ADDR,
4502                        mqd->queue_state.cp_hqd_pq_rptr_report_addr);
4503                 WREG32(CP_HQD_PQ_RPTR_REPORT_ADDR_HI,
4504                        mqd->queue_state.cp_hqd_pq_rptr_report_addr_hi);
4505
4506                 /* enable the doorbell if requested */
4507                 if (use_doorbell) {
4508                         mqd->queue_state.cp_hqd_pq_doorbell_control =
4509                                 RREG32(CP_HQD_PQ_DOORBELL_CONTROL);
4510                         mqd->queue_state.cp_hqd_pq_doorbell_control &= ~DOORBELL_OFFSET_MASK;
4511                         mqd->queue_state.cp_hqd_pq_doorbell_control |=
4512                                 DOORBELL_OFFSET(rdev->ring[idx].doorbell_index);
4513                         mqd->queue_state.cp_hqd_pq_doorbell_control |= DOORBELL_EN;
4514                         mqd->queue_state.cp_hqd_pq_doorbell_control &=
4515                                 ~(DOORBELL_SOURCE | DOORBELL_HIT);
4516
4517                 } else {
4518                         mqd->queue_state.cp_hqd_pq_doorbell_control = 0;
4519                 }
4520                 WREG32(CP_HQD_PQ_DOORBELL_CONTROL,
4521                        mqd->queue_state.cp_hqd_pq_doorbell_control);
4522
4523                 /* read and write pointers, similar to CP_RB0_WPTR/_RPTR */
4524                 rdev->ring[idx].wptr = 0;
4525                 mqd->queue_state.cp_hqd_pq_wptr = rdev->ring[idx].wptr;
4526                 WREG32(CP_HQD_PQ_WPTR, mqd->queue_state.cp_hqd_pq_wptr);
4527                 rdev->ring[idx].rptr = RREG32(CP_HQD_PQ_RPTR);
4528                 mqd->queue_state.cp_hqd_pq_rptr = rdev->ring[idx].rptr;
4529
4530                 /* set the vmid for the queue */
4531                 mqd->queue_state.cp_hqd_vmid = 0;
4532                 WREG32(CP_HQD_VMID, mqd->queue_state.cp_hqd_vmid);
4533
4534                 /* activate the queue */
4535                 mqd->queue_state.cp_hqd_active = 1;
4536                 WREG32(CP_HQD_ACTIVE, mqd->queue_state.cp_hqd_active);
4537
4538                 cik_srbm_select(rdev, 0, 0, 0, 0);
4539                 mutex_unlock(&rdev->srbm_mutex);
4540
4541                 radeon_bo_kunmap(rdev->ring[idx].mqd_obj);
4542                 radeon_bo_unreserve(rdev->ring[idx].mqd_obj);
4543
4544                 rdev->ring[idx].ready = true;
4545                 r = radeon_ring_test(rdev, idx, &rdev->ring[idx]);
4546                 if (r)
4547                         rdev->ring[idx].ready = false;
4548         }
4549
4550         return 0;
4551 }
4552
4553 static void cik_cp_enable(struct radeon_device *rdev, bool enable)
4554 {
4555         cik_cp_gfx_enable(rdev, enable);
4556         cik_cp_compute_enable(rdev, enable);
4557 }
4558
4559 static int cik_cp_load_microcode(struct radeon_device *rdev)
4560 {
4561         int r;
4562
4563         r = cik_cp_gfx_load_microcode(rdev);
4564         if (r)
4565                 return r;
4566         r = cik_cp_compute_load_microcode(rdev);
4567         if (r)
4568                 return r;
4569
4570         return 0;
4571 }
4572
4573 static void cik_cp_fini(struct radeon_device *rdev)
4574 {
4575         cik_cp_gfx_fini(rdev);
4576         cik_cp_compute_fini(rdev);
4577 }
4578
4579 static int cik_cp_resume(struct radeon_device *rdev)
4580 {
4581         int r;
4582
4583         cik_enable_gui_idle_interrupt(rdev, false);
4584
4585         r = cik_cp_load_microcode(rdev);
4586         if (r)
4587                 return r;
4588
4589         r = cik_cp_gfx_resume(rdev);
4590         if (r)
4591                 return r;
4592         r = cik_cp_compute_resume(rdev);
4593         if (r)
4594                 return r;
4595
4596         cik_enable_gui_idle_interrupt(rdev, true);
4597
4598         return 0;
4599 }
4600
4601 static void cik_print_gpu_status_regs(struct radeon_device *rdev)
4602 {
4603         dev_info(rdev->dev, "  GRBM_STATUS=0x%08X\n",
4604                 RREG32(GRBM_STATUS));
4605         dev_info(rdev->dev, "  GRBM_STATUS2=0x%08X\n",
4606                 RREG32(GRBM_STATUS2));
4607         dev_info(rdev->dev, "  GRBM_STATUS_SE0=0x%08X\n",
4608                 RREG32(GRBM_STATUS_SE0));
4609         dev_info(rdev->dev, "  GRBM_STATUS_SE1=0x%08X\n",
4610                 RREG32(GRBM_STATUS_SE1));
4611         dev_info(rdev->dev, "  GRBM_STATUS_SE2=0x%08X\n",
4612                 RREG32(GRBM_STATUS_SE2));
4613         dev_info(rdev->dev, "  GRBM_STATUS_SE3=0x%08X\n",
4614                 RREG32(GRBM_STATUS_SE3));
4615         dev_info(rdev->dev, "  SRBM_STATUS=0x%08X\n",
4616                 RREG32(SRBM_STATUS));
4617         dev_info(rdev->dev, "  SRBM_STATUS2=0x%08X\n",
4618                 RREG32(SRBM_STATUS2));
4619         dev_info(rdev->dev, "  SDMA0_STATUS_REG   = 0x%08X\n",
4620                 RREG32(SDMA0_STATUS_REG + SDMA0_REGISTER_OFFSET));
4621         dev_info(rdev->dev, "  SDMA1_STATUS_REG   = 0x%08X\n",
4622                  RREG32(SDMA0_STATUS_REG + SDMA1_REGISTER_OFFSET));
4623         dev_info(rdev->dev, "  CP_STAT = 0x%08x\n", RREG32(CP_STAT));
4624         dev_info(rdev->dev, "  CP_STALLED_STAT1 = 0x%08x\n",
4625                  RREG32(CP_STALLED_STAT1));
4626         dev_info(rdev->dev, "  CP_STALLED_STAT2 = 0x%08x\n",
4627                  RREG32(CP_STALLED_STAT2));
4628         dev_info(rdev->dev, "  CP_STALLED_STAT3 = 0x%08x\n",
4629                  RREG32(CP_STALLED_STAT3));
4630         dev_info(rdev->dev, "  CP_CPF_BUSY_STAT = 0x%08x\n",
4631                  RREG32(CP_CPF_BUSY_STAT));
4632         dev_info(rdev->dev, "  CP_CPF_STALLED_STAT1 = 0x%08x\n",
4633                  RREG32(CP_CPF_STALLED_STAT1));
4634         dev_info(rdev->dev, "  CP_CPF_STATUS = 0x%08x\n", RREG32(CP_CPF_STATUS));
4635         dev_info(rdev->dev, "  CP_CPC_BUSY_STAT = 0x%08x\n", RREG32(CP_CPC_BUSY_STAT));
4636         dev_info(rdev->dev, "  CP_CPC_STALLED_STAT1 = 0x%08x\n",
4637                  RREG32(CP_CPC_STALLED_STAT1));
4638         dev_info(rdev->dev, "  CP_CPC_STATUS = 0x%08x\n", RREG32(CP_CPC_STATUS));
4639 }
4640
4641 /**
4642  * cik_gpu_check_soft_reset - check which blocks are busy
4643  *
4644  * @rdev: radeon_device pointer
4645  *
4646  * Check which blocks are busy and return the relevant reset
4647  * mask to be used by cik_gpu_soft_reset().
4648  * Returns a mask of the blocks to be reset.
4649  */
4650 u32 cik_gpu_check_soft_reset(struct radeon_device *rdev)
4651 {
4652         u32 reset_mask = 0;
4653         u32 tmp;
4654
4655         /* GRBM_STATUS */
4656         tmp = RREG32(GRBM_STATUS);
4657         if (tmp & (PA_BUSY | SC_BUSY |
4658                    BCI_BUSY | SX_BUSY |
4659                    TA_BUSY | VGT_BUSY |
4660                    DB_BUSY | CB_BUSY |
4661                    GDS_BUSY | SPI_BUSY |
4662                    IA_BUSY | IA_BUSY_NO_DMA))
4663                 reset_mask |= RADEON_RESET_GFX;
4664
4665         if (tmp & (CP_BUSY | CP_COHERENCY_BUSY))
4666                 reset_mask |= RADEON_RESET_CP;
4667
4668         /* GRBM_STATUS2 */
4669         tmp = RREG32(GRBM_STATUS2);
4670         if (tmp & RLC_BUSY)
4671                 reset_mask |= RADEON_RESET_RLC;
4672
4673         /* SDMA0_STATUS_REG */
4674         tmp = RREG32(SDMA0_STATUS_REG + SDMA0_REGISTER_OFFSET);
4675         if (!(tmp & SDMA_IDLE))
4676                 reset_mask |= RADEON_RESET_DMA;
4677
4678         /* SDMA1_STATUS_REG */
4679         tmp = RREG32(SDMA0_STATUS_REG + SDMA1_REGISTER_OFFSET);
4680         if (!(tmp & SDMA_IDLE))
4681                 reset_mask |= RADEON_RESET_DMA1;
4682
4683         /* SRBM_STATUS2 */
4684         tmp = RREG32(SRBM_STATUS2);
4685         if (tmp & SDMA_BUSY)
4686                 reset_mask |= RADEON_RESET_DMA;
4687
4688         if (tmp & SDMA1_BUSY)
4689                 reset_mask |= RADEON_RESET_DMA1;
4690
4691         /* SRBM_STATUS */
4692         tmp = RREG32(SRBM_STATUS);
4693
4694         if (tmp & IH_BUSY)
4695                 reset_mask |= RADEON_RESET_IH;
4696
4697         if (tmp & SEM_BUSY)
4698                 reset_mask |= RADEON_RESET_SEM;
4699
4700         if (tmp & GRBM_RQ_PENDING)
4701                 reset_mask |= RADEON_RESET_GRBM;
4702
4703         if (tmp & VMC_BUSY)
4704                 reset_mask |= RADEON_RESET_VMC;
4705
4706         if (tmp & (MCB_BUSY | MCB_NON_DISPLAY_BUSY |
4707                    MCC_BUSY | MCD_BUSY))
4708                 reset_mask |= RADEON_RESET_MC;
4709
4710         if (evergreen_is_display_hung(rdev))
4711                 reset_mask |= RADEON_RESET_DISPLAY;
4712
4713         /* Skip MC reset as it's mostly likely not hung, just busy */
4714         if (reset_mask & RADEON_RESET_MC) {
4715                 DRM_DEBUG("MC busy: 0x%08X, clearing.\n", reset_mask);
4716                 reset_mask &= ~RADEON_RESET_MC;
4717         }
4718
4719         return reset_mask;
4720 }
4721
4722 /**
4723  * cik_gpu_soft_reset - soft reset GPU
4724  *
4725  * @rdev: radeon_device pointer
4726  * @reset_mask: mask of which blocks to reset
4727  *
4728  * Soft reset the blocks specified in @reset_mask.
4729  */
4730 static void cik_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask)
4731 {
4732         struct evergreen_mc_save save;
4733         u32 grbm_soft_reset = 0, srbm_soft_reset = 0;
4734         u32 tmp;
4735
4736         if (reset_mask == 0)
4737                 return;
4738
4739         dev_info(rdev->dev, "GPU softreset: 0x%08X\n", reset_mask);
4740
4741         cik_print_gpu_status_regs(rdev);
4742         dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_ADDR   0x%08X\n",
4743                  RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
4744         dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
4745                  RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
4746
4747         /* disable CG/PG */
4748         cik_fini_pg(rdev);
4749         cik_fini_cg(rdev);
4750
4751         /* stop the rlc */
4752         cik_rlc_stop(rdev);
4753
4754         /* Disable GFX parsing/prefetching */
4755         WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT);
4756
4757         /* Disable MEC parsing/prefetching */
4758         WREG32(CP_MEC_CNTL, MEC_ME1_HALT | MEC_ME2_HALT);
4759
4760         if (reset_mask & RADEON_RESET_DMA) {
4761                 /* sdma0 */
4762                 tmp = RREG32(SDMA0_ME_CNTL + SDMA0_REGISTER_OFFSET);
4763                 tmp |= SDMA_HALT;
4764                 WREG32(SDMA0_ME_CNTL + SDMA0_REGISTER_OFFSET, tmp);
4765         }
4766         if (reset_mask & RADEON_RESET_DMA1) {
4767                 /* sdma1 */
4768                 tmp = RREG32(SDMA0_ME_CNTL + SDMA1_REGISTER_OFFSET);
4769                 tmp |= SDMA_HALT;
4770                 WREG32(SDMA0_ME_CNTL + SDMA1_REGISTER_OFFSET, tmp);
4771         }
4772
4773         evergreen_mc_stop(rdev, &save);
4774         if (evergreen_mc_wait_for_idle(rdev)) {
4775                 dev_warn(rdev->dev, "Wait for MC idle timedout !\n");
4776         }
4777
4778         if (reset_mask & (RADEON_RESET_GFX | RADEON_RESET_COMPUTE | RADEON_RESET_CP))
4779                 grbm_soft_reset = SOFT_RESET_CP | SOFT_RESET_GFX;
4780
4781         if (reset_mask & RADEON_RESET_CP) {
4782                 grbm_soft_reset |= SOFT_RESET_CP;
4783
4784                 srbm_soft_reset |= SOFT_RESET_GRBM;
4785         }
4786
4787         if (reset_mask & RADEON_RESET_DMA)
4788                 srbm_soft_reset |= SOFT_RESET_SDMA;
4789
4790         if (reset_mask & RADEON_RESET_DMA1)
4791                 srbm_soft_reset |= SOFT_RESET_SDMA1;
4792
4793         if (reset_mask & RADEON_RESET_DISPLAY)
4794                 srbm_soft_reset |= SOFT_RESET_DC;
4795
4796         if (reset_mask & RADEON_RESET_RLC)
4797                 grbm_soft_reset |= SOFT_RESET_RLC;
4798
4799         if (reset_mask & RADEON_RESET_SEM)
4800                 srbm_soft_reset |= SOFT_RESET_SEM;
4801
4802         if (reset_mask & RADEON_RESET_IH)
4803                 srbm_soft_reset |= SOFT_RESET_IH;
4804
4805         if (reset_mask & RADEON_RESET_GRBM)
4806                 srbm_soft_reset |= SOFT_RESET_GRBM;
4807
4808         if (reset_mask & RADEON_RESET_VMC)
4809                 srbm_soft_reset |= SOFT_RESET_VMC;
4810
4811         if (!(rdev->flags & RADEON_IS_IGP)) {
4812                 if (reset_mask & RADEON_RESET_MC)
4813                         srbm_soft_reset |= SOFT_RESET_MC;
4814         }
4815
4816         if (grbm_soft_reset) {
4817                 tmp = RREG32(GRBM_SOFT_RESET);
4818                 tmp |= grbm_soft_reset;
4819                 dev_info(rdev->dev, "GRBM_SOFT_RESET=0x%08X\n", tmp);
4820                 WREG32(GRBM_SOFT_RESET, tmp);
4821                 tmp = RREG32(GRBM_SOFT_RESET);
4822
4823                 udelay(50);
4824
4825                 tmp &= ~grbm_soft_reset;
4826                 WREG32(GRBM_SOFT_RESET, tmp);
4827                 tmp = RREG32(GRBM_SOFT_RESET);
4828         }
4829
4830         if (srbm_soft_reset) {
4831                 tmp = RREG32(SRBM_SOFT_RESET);
4832                 tmp |= srbm_soft_reset;
4833                 dev_info(rdev->dev, "SRBM_SOFT_RESET=0x%08X\n", tmp);
4834                 WREG32(SRBM_SOFT_RESET, tmp);
4835                 tmp = RREG32(SRBM_SOFT_RESET);
4836
4837                 udelay(50);
4838
4839                 tmp &= ~srbm_soft_reset;
4840                 WREG32(SRBM_SOFT_RESET, tmp);
4841                 tmp = RREG32(SRBM_SOFT_RESET);
4842         }
4843
4844         /* Wait a little for things to settle down */
4845         udelay(50);
4846
4847         evergreen_mc_resume(rdev, &save);
4848         udelay(50);
4849
4850         cik_print_gpu_status_regs(rdev);
4851 }
4852
4853 /**
4854  * cik_asic_reset - soft reset GPU
4855  *
4856  * @rdev: radeon_device pointer
4857  *
4858  * Look up which blocks are hung and attempt
4859  * to reset them.
4860  * Returns 0 for success.
4861  */
4862 int cik_asic_reset(struct radeon_device *rdev)
4863 {
4864         u32 reset_mask;
4865
4866         reset_mask = cik_gpu_check_soft_reset(rdev);
4867
4868         if (reset_mask)
4869                 r600_set_bios_scratch_engine_hung(rdev, true);
4870
4871         cik_gpu_soft_reset(rdev, reset_mask);
4872
4873         reset_mask = cik_gpu_check_soft_reset(rdev);
4874
4875         if (!reset_mask)
4876                 r600_set_bios_scratch_engine_hung(rdev, false);
4877
4878         return 0;
4879 }
4880
4881 /**
4882  * cik_gfx_is_lockup - check if the 3D engine is locked up
4883  *
4884  * @rdev: radeon_device pointer
4885  * @ring: radeon_ring structure holding ring information
4886  *
4887  * Check if the 3D engine is locked up (CIK).
4888  * Returns true if the engine is locked, false if not.
4889  */
4890 bool cik_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
4891 {
4892         u32 reset_mask = cik_gpu_check_soft_reset(rdev);
4893
4894         if (!(reset_mask & (RADEON_RESET_GFX |
4895                             RADEON_RESET_COMPUTE |
4896                             RADEON_RESET_CP))) {
4897                 radeon_ring_lockup_update(ring);
4898                 return false;
4899         }
4900         /* force CP activities */
4901         radeon_ring_force_activity(rdev, ring);
4902         return radeon_ring_test_lockup(rdev, ring);
4903 }
4904
4905 /* MC */
4906 /**
4907  * cik_mc_program - program the GPU memory controller
4908  *
4909  * @rdev: radeon_device pointer
4910  *
4911  * Set the location of vram, gart, and AGP in the GPU's
4912  * physical address space (CIK).
4913  */
4914 static void cik_mc_program(struct radeon_device *rdev)
4915 {
4916         struct evergreen_mc_save save;
4917         u32 tmp;
4918         int i, j;
4919
4920         /* Initialize HDP */
4921         for (i = 0, j = 0; i < 32; i++, j += 0x18) {
4922                 WREG32((0x2c14 + j), 0x00000000);
4923                 WREG32((0x2c18 + j), 0x00000000);
4924                 WREG32((0x2c1c + j), 0x00000000);
4925                 WREG32((0x2c20 + j), 0x00000000);
4926                 WREG32((0x2c24 + j), 0x00000000);
4927         }
4928         WREG32(HDP_REG_COHERENCY_FLUSH_CNTL, 0);
4929
4930         evergreen_mc_stop(rdev, &save);
4931         if (radeon_mc_wait_for_idle(rdev)) {
4932                 dev_warn(rdev->dev, "Wait for MC idle timedout !\n");
4933         }
4934         /* Lockout access through VGA aperture*/
4935         WREG32(VGA_HDP_CONTROL, VGA_MEMORY_DISABLE);
4936         /* Update configuration */
4937         WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR,
4938                rdev->mc.vram_start >> 12);
4939         WREG32(MC_VM_SYSTEM_APERTURE_HIGH_ADDR,
4940                rdev->mc.vram_end >> 12);
4941         WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR,
4942                rdev->vram_scratch.gpu_addr >> 12);
4943         tmp = ((rdev->mc.vram_end >> 24) & 0xFFFF) << 16;
4944         tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF);
4945         WREG32(MC_VM_FB_LOCATION, tmp);
4946         /* XXX double check these! */
4947         WREG32(HDP_NONSURFACE_BASE, (rdev->mc.vram_start >> 8));
4948         WREG32(HDP_NONSURFACE_INFO, (2 << 7) | (1 << 30));
4949         WREG32(HDP_NONSURFACE_SIZE, 0x3FFFFFFF);
4950         WREG32(MC_VM_AGP_BASE, 0);
4951         WREG32(MC_VM_AGP_TOP, 0x0FFFFFFF);
4952         WREG32(MC_VM_AGP_BOT, 0x0FFFFFFF);
4953         if (radeon_mc_wait_for_idle(rdev)) {
4954                 dev_warn(rdev->dev, "Wait for MC idle timedout !\n");
4955         }
4956         evergreen_mc_resume(rdev, &save);
4957         /* we need to own VRAM, so turn off the VGA renderer here
4958          * to stop it overwriting our objects */
4959         rv515_vga_render_disable(rdev);
4960 }
4961
4962 /**
4963  * cik_mc_init - initialize the memory controller driver params
4964  *
4965  * @rdev: radeon_device pointer
4966  *
4967  * Look up the amount of vram, vram width, and decide how to place
4968  * vram and gart within the GPU's physical address space (CIK).
4969  * Returns 0 for success.
4970  */
4971 static int cik_mc_init(struct radeon_device *rdev)
4972 {
4973         u32 tmp;
4974         int chansize, numchan;
4975
4976         /* Get VRAM informations */
4977         rdev->mc.vram_is_ddr = true;
4978         tmp = RREG32(MC_ARB_RAMCFG);
4979         if (tmp & CHANSIZE_MASK) {
4980                 chansize = 64;
4981         } else {
4982                 chansize = 32;
4983         }
4984         tmp = RREG32(MC_SHARED_CHMAP);
4985         switch ((tmp & NOOFCHAN_MASK) >> NOOFCHAN_SHIFT) {
4986         case 0:
4987         default:
4988                 numchan = 1;
4989                 break;
4990         case 1:
4991                 numchan = 2;
4992                 break;
4993         case 2:
4994                 numchan = 4;
4995                 break;
4996         case 3:
4997                 numchan = 8;
4998                 break;
4999         case 4:
5000                 numchan = 3;
5001                 break;
5002         case 5:
5003                 numchan = 6;
5004                 break;
5005         case 6:
5006                 numchan = 10;
5007                 break;
5008         case 7:
5009                 numchan = 12;
5010                 break;
5011         case 8:
5012                 numchan = 16;
5013                 break;
5014         }
5015         rdev->mc.vram_width = numchan * chansize;
5016         /* Could aper size report 0 ? */
5017         rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
5018         rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
5019         /* size in MB on si */
5020         rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
5021         rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
5022         rdev->mc.visible_vram_size = rdev->mc.aper_size;
5023         si_vram_gtt_location(rdev, &rdev->mc);
5024         radeon_update_bandwidth_info(rdev);
5025
5026         return 0;
5027 }
5028
5029 /*
5030  * GART
5031  * VMID 0 is the physical GPU addresses as used by the kernel.
5032  * VMIDs 1-15 are used for userspace clients and are handled
5033  * by the radeon vm/hsa code.
5034  */
5035 /**
5036  * cik_pcie_gart_tlb_flush - gart tlb flush callback
5037  *
5038  * @rdev: radeon_device pointer
5039  *
5040  * Flush the TLB for the VMID 0 page table (CIK).
5041  */
5042 void cik_pcie_gart_tlb_flush(struct radeon_device *rdev)
5043 {
5044         /* flush hdp cache */
5045         WREG32(HDP_MEM_COHERENCY_FLUSH_CNTL, 0);
5046
5047         /* bits 0-15 are the VM contexts0-15 */
5048         WREG32(VM_INVALIDATE_REQUEST, 0x1);
5049 }
5050
5051 /**
5052  * cik_pcie_gart_enable - gart enable
5053  *
5054  * @rdev: radeon_device pointer
5055  *
5056  * This sets up the TLBs, programs the page tables for VMID0,
5057  * sets up the hw for VMIDs 1-15 which are allocated on
5058  * demand, and sets up the global locations for the LDS, GDS,
5059  * and GPUVM for FSA64 clients (CIK).
5060  * Returns 0 for success, errors for failure.
5061  */
5062 static int cik_pcie_gart_enable(struct radeon_device *rdev)
5063 {
5064         int r, i;
5065
5066         if (rdev->gart.robj == NULL) {
5067                 dev_err(rdev->dev, "No VRAM object for PCIE GART.\n");
5068                 return -EINVAL;
5069         }
5070         r = radeon_gart_table_vram_pin(rdev);
5071         if (r)
5072                 return r;
5073         radeon_gart_restore(rdev);
5074         /* Setup TLB control */
5075         WREG32(MC_VM_MX_L1_TLB_CNTL,
5076                (0xA << 7) |
5077                ENABLE_L1_TLB |
5078                SYSTEM_ACCESS_MODE_NOT_IN_SYS |
5079                ENABLE_ADVANCED_DRIVER_MODEL |
5080                SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU);
5081         /* Setup L2 cache */
5082         WREG32(VM_L2_CNTL, ENABLE_L2_CACHE |
5083                ENABLE_L2_FRAGMENT_PROCESSING |
5084                ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE |
5085                ENABLE_L2_PDE0_CACHE_LRU_UPDATE_BY_WRITE |
5086                EFFECTIVE_L2_QUEUE_SIZE(7) |
5087                CONTEXT1_IDENTITY_ACCESS_MODE(1));
5088         WREG32(VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS | INVALIDATE_L2_CACHE);
5089         WREG32(VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY |
5090                L2_CACHE_BIGK_FRAGMENT_SIZE(6));
5091         /* setup context0 */
5092         WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR, rdev->mc.gtt_start >> 12);
5093         WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR, rdev->mc.gtt_end >> 12);
5094         WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR, rdev->gart.table_addr >> 12);
5095         WREG32(VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR,
5096                         (u32)(rdev->dummy_page.addr >> 12));
5097         WREG32(VM_CONTEXT0_CNTL2, 0);
5098         WREG32(VM_CONTEXT0_CNTL, (ENABLE_CONTEXT | PAGE_TABLE_DEPTH(0) |
5099                                   RANGE_PROTECTION_FAULT_ENABLE_DEFAULT));
5100
5101         WREG32(0x15D4, 0);
5102         WREG32(0x15D8, 0);
5103         WREG32(0x15DC, 0);
5104
5105         /* empty context1-15 */
5106         /* FIXME start with 4G, once using 2 level pt switch to full
5107          * vm size space
5108          */
5109         /* set vm size, must be a multiple of 4 */
5110         WREG32(VM_CONTEXT1_PAGE_TABLE_START_ADDR, 0);
5111         WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn);
5112         for (i = 1; i < 16; i++) {
5113                 if (i < 8)
5114                         WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
5115                                rdev->gart.table_addr >> 12);
5116                 else
5117                         WREG32(VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2),
5118                                rdev->gart.table_addr >> 12);
5119         }
5120
5121         /* enable context1-15 */
5122         WREG32(VM_CONTEXT1_PROTECTION_FAULT_DEFAULT_ADDR,
5123                (u32)(rdev->dummy_page.addr >> 12));
5124         WREG32(VM_CONTEXT1_CNTL2, 4);
5125         WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) |
5126                                 RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT |
5127                                 RANGE_PROTECTION_FAULT_ENABLE_DEFAULT |
5128                                 DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT |
5129                                 DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT |
5130                                 PDE0_PROTECTION_FAULT_ENABLE_INTERRUPT |
5131                                 PDE0_PROTECTION_FAULT_ENABLE_DEFAULT |
5132                                 VALID_PROTECTION_FAULT_ENABLE_INTERRUPT |
5133                                 VALID_PROTECTION_FAULT_ENABLE_DEFAULT |
5134                                 READ_PROTECTION_FAULT_ENABLE_INTERRUPT |
5135                                 READ_PROTECTION_FAULT_ENABLE_DEFAULT |
5136                                 WRITE_PROTECTION_FAULT_ENABLE_INTERRUPT |
5137                                 WRITE_PROTECTION_FAULT_ENABLE_DEFAULT);
5138
5139         /* TC cache setup ??? */
5140         WREG32(TC_CFG_L1_LOAD_POLICY0, 0);
5141         WREG32(TC_CFG_L1_LOAD_POLICY1, 0);
5142         WREG32(TC_CFG_L1_STORE_POLICY, 0);
5143
5144         WREG32(TC_CFG_L2_LOAD_POLICY0, 0);
5145         WREG32(TC_CFG_L2_LOAD_POLICY1, 0);
5146         WREG32(TC_CFG_L2_STORE_POLICY0, 0);
5147         WREG32(TC_CFG_L2_STORE_POLICY1, 0);
5148         WREG32(TC_CFG_L2_ATOMIC_POLICY, 0);
5149
5150         WREG32(TC_CFG_L1_VOLATILE, 0);
5151         WREG32(TC_CFG_L2_VOLATILE, 0);
5152
5153         if (rdev->family == CHIP_KAVERI) {
5154                 u32 tmp = RREG32(CHUB_CONTROL);
5155                 tmp &= ~BYPASS_VM;
5156                 WREG32(CHUB_CONTROL, tmp);
5157         }
5158
5159         /* XXX SH_MEM regs */
5160         /* where to put LDS, scratch, GPUVM in FSA64 space */
5161         mutex_lock(&rdev->srbm_mutex);
5162         for (i = 0; i < 16; i++) {
5163                 cik_srbm_select(rdev, 0, 0, 0, i);
5164                 /* CP and shaders */
5165                 WREG32(SH_MEM_CONFIG, 0);
5166                 WREG32(SH_MEM_APE1_BASE, 1);
5167                 WREG32(SH_MEM_APE1_LIMIT, 0);
5168                 WREG32(SH_MEM_BASES, 0);
5169                 /* SDMA GFX */
5170                 WREG32(SDMA0_GFX_VIRTUAL_ADDR + SDMA0_REGISTER_OFFSET, 0);
5171                 WREG32(SDMA0_GFX_APE1_CNTL + SDMA0_REGISTER_OFFSET, 0);
5172                 WREG32(SDMA0_GFX_VIRTUAL_ADDR + SDMA1_REGISTER_OFFSET, 0);
5173                 WREG32(SDMA0_GFX_APE1_CNTL + SDMA1_REGISTER_OFFSET, 0);
5174                 /* XXX SDMA RLC - todo */
5175         }
5176         cik_srbm_select(rdev, 0, 0, 0, 0);
5177         mutex_unlock(&rdev->srbm_mutex);
5178
5179         cik_pcie_gart_tlb_flush(rdev);
5180         DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n",
5181                  (unsigned)(rdev->mc.gtt_size >> 20),
5182                  (unsigned long long)rdev->gart.table_addr);
5183         rdev->gart.ready = true;
5184         return 0;
5185 }
5186
5187 /**
5188  * cik_pcie_gart_disable - gart disable
5189  *
5190  * @rdev: radeon_device pointer
5191  *
5192  * This disables all VM page table (CIK).
5193  */
5194 static void cik_pcie_gart_disable(struct radeon_device *rdev)
5195 {
5196         /* Disable all tables */
5197         WREG32(VM_CONTEXT0_CNTL, 0);
5198         WREG32(VM_CONTEXT1_CNTL, 0);
5199         /* Setup TLB control */
5200         WREG32(MC_VM_MX_L1_TLB_CNTL, SYSTEM_ACCESS_MODE_NOT_IN_SYS |
5201                SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU);
5202         /* Setup L2 cache */
5203         WREG32(VM_L2_CNTL,
5204                ENABLE_L2_FRAGMENT_PROCESSING |
5205                ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE |
5206                ENABLE_L2_PDE0_CACHE_LRU_UPDATE_BY_WRITE |
5207                EFFECTIVE_L2_QUEUE_SIZE(7) |
5208                CONTEXT1_IDENTITY_ACCESS_MODE(1));
5209         WREG32(VM_L2_CNTL2, 0);
5210         WREG32(VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY |
5211                L2_CACHE_BIGK_FRAGMENT_SIZE(6));
5212         radeon_gart_table_vram_unpin(rdev);
5213 }
5214
5215 /**
5216  * cik_pcie_gart_fini - vm fini callback
5217  *
5218  * @rdev: radeon_device pointer
5219  *
5220  * Tears down the driver GART/VM setup (CIK).
5221  */
5222 static void cik_pcie_gart_fini(struct radeon_device *rdev)
5223 {
5224         cik_pcie_gart_disable(rdev);
5225         radeon_gart_table_vram_free(rdev);
5226         radeon_gart_fini(rdev);
5227 }
5228
5229 /* vm parser */
5230 /**
5231  * cik_ib_parse - vm ib_parse callback
5232  *
5233  * @rdev: radeon_device pointer
5234  * @ib: indirect buffer pointer
5235  *
5236  * CIK uses hw IB checking so this is a nop (CIK).
5237  */
5238 int cik_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib)
5239 {
5240         return 0;
5241 }
5242
5243 /*
5244  * vm
5245  * VMID 0 is the physical GPU addresses as used by the kernel.
5246  * VMIDs 1-15 are used for userspace clients and are handled
5247  * by the radeon vm/hsa code.
5248  */
5249 /**
5250  * cik_vm_init - cik vm init callback
5251  *
5252  * @rdev: radeon_device pointer
5253  *
5254  * Inits cik specific vm parameters (number of VMs, base of vram for
5255  * VMIDs 1-15) (CIK).
5256  * Returns 0 for success.
5257  */
5258 int cik_vm_init(struct radeon_device *rdev)
5259 {
5260         /* number of VMs */
5261         rdev->vm_manager.nvm = 16;
5262         /* base offset of vram pages */
5263         if (rdev->flags & RADEON_IS_IGP) {
5264                 u64 tmp = RREG32(MC_VM_FB_OFFSET);
5265                 tmp <<= 22;
5266                 rdev->vm_manager.vram_base_offset = tmp;
5267         } else
5268                 rdev->vm_manager.vram_base_offset = 0;
5269
5270         return 0;
5271 }
5272
5273 /**
5274  * cik_vm_fini - cik vm fini callback
5275  *
5276  * @rdev: radeon_device pointer
5277  *
5278  * Tear down any asic specific VM setup (CIK).
5279  */
5280 void cik_vm_fini(struct radeon_device *rdev)
5281 {
5282 }
5283
5284 /**
5285  * cik_vm_decode_fault - print human readable fault info
5286  *
5287  * @rdev: radeon_device pointer
5288  * @status: VM_CONTEXT1_PROTECTION_FAULT_STATUS register value
5289  * @addr: VM_CONTEXT1_PROTECTION_FAULT_ADDR register value
5290  *
5291  * Print human readable fault information (CIK).
5292  */
5293 static void cik_vm_decode_fault(struct radeon_device *rdev,
5294                                 u32 status, u32 addr, u32 mc_client)
5295 {
5296         u32 mc_id;
5297         u32 vmid = (status & FAULT_VMID_MASK) >> FAULT_VMID_SHIFT;
5298         u32 protections = (status & PROTECTIONS_MASK) >> PROTECTIONS_SHIFT;
5299         char block[5] = { mc_client >> 24, (mc_client >> 16) & 0xff,
5300                 (mc_client >> 8) & 0xff, mc_client & 0xff, 0 };
5301
5302         if (rdev->family == CHIP_HAWAII)
5303                 mc_id = (status & HAWAII_MEMORY_CLIENT_ID_MASK) >> MEMORY_CLIENT_ID_SHIFT;
5304         else
5305                 mc_id = (status & MEMORY_CLIENT_ID_MASK) >> MEMORY_CLIENT_ID_SHIFT;
5306
5307         printk("VM fault (0x%02x, vmid %d) at page %u, %s from '%s' (0x%08x) (%d)\n",
5308                protections, vmid, addr,
5309                (status & MEMORY_CLIENT_RW_MASK) ? "write" : "read",
5310                block, mc_client, mc_id);
5311 }
5312
5313 /**
5314  * cik_vm_flush - cik vm flush using the CP
5315  *
5316  * @rdev: radeon_device pointer
5317  *
5318  * Update the page table base and flush the VM TLB
5319  * using the CP (CIK).
5320  */
5321 void cik_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm)
5322 {
5323         struct radeon_ring *ring = &rdev->ring[ridx];
5324
5325         if (vm == NULL)
5326                 return;
5327
5328         radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
5329         radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
5330                                  WRITE_DATA_DST_SEL(0)));
5331         if (vm->id < 8) {
5332                 radeon_ring_write(ring,
5333                                   (VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (vm->id << 2)) >> 2);
5334         } else {
5335                 radeon_ring_write(ring,
5336                                   (VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((vm->id - 8) << 2)) >> 2);
5337         }
5338         radeon_ring_write(ring, 0);
5339         radeon_ring_write(ring, vm->pd_gpu_addr >> 12);
5340
5341         /* update SH_MEM_* regs */
5342         radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
5343         radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
5344                                  WRITE_DATA_DST_SEL(0)));
5345         radeon_ring_write(ring, SRBM_GFX_CNTL >> 2);
5346         radeon_ring_write(ring, 0);
5347         radeon_ring_write(ring, VMID(vm->id));
5348
5349         radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 6));
5350         radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
5351                                  WRITE_DATA_DST_SEL(0)));
5352         radeon_ring_write(ring, SH_MEM_BASES >> 2);
5353         radeon_ring_write(ring, 0);
5354
5355         radeon_ring_write(ring, 0); /* SH_MEM_BASES */
5356         radeon_ring_write(ring, 0); /* SH_MEM_CONFIG */
5357         radeon_ring_write(ring, 1); /* SH_MEM_APE1_BASE */
5358         radeon_ring_write(ring, 0); /* SH_MEM_APE1_LIMIT */
5359
5360         radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
5361         radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
5362                                  WRITE_DATA_DST_SEL(0)));
5363         radeon_ring_write(ring, SRBM_GFX_CNTL >> 2);
5364         radeon_ring_write(ring, 0);
5365         radeon_ring_write(ring, VMID(0));
5366
5367         /* HDP flush */
5368         /* We should be using the WAIT_REG_MEM packet here like in
5369          * cik_fence_ring_emit(), but it causes the CP to hang in this
5370          * context...
5371          */
5372         radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
5373         radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
5374                                  WRITE_DATA_DST_SEL(0)));
5375         radeon_ring_write(ring, HDP_MEM_COHERENCY_FLUSH_CNTL >> 2);
5376         radeon_ring_write(ring, 0);
5377         radeon_ring_write(ring, 0);
5378
5379         /* bits 0-15 are the VM contexts0-15 */
5380         radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
5381         radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
5382                                  WRITE_DATA_DST_SEL(0)));
5383         radeon_ring_write(ring, VM_INVALIDATE_REQUEST >> 2);
5384         radeon_ring_write(ring, 0);
5385         radeon_ring_write(ring, 1 << vm->id);
5386
5387         /* compute doesn't have PFP */
5388         if (ridx == RADEON_RING_TYPE_GFX_INDEX) {
5389                 /* sync PFP to ME, otherwise we might get invalid PFP reads */
5390                 radeon_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0));
5391                 radeon_ring_write(ring, 0x0);
5392         }
5393 }
5394
5395 /*
5396  * RLC
5397  * The RLC is a multi-purpose microengine that handles a
5398  * variety of functions, the most important of which is
5399  * the interrupt controller.
5400  */
5401 static void cik_enable_gui_idle_interrupt(struct radeon_device *rdev,
5402                                           bool enable)
5403 {
5404         u32 tmp = RREG32(CP_INT_CNTL_RING0);
5405
5406         if (enable)
5407                 tmp |= (CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
5408         else
5409                 tmp &= ~(CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
5410         WREG32(CP_INT_CNTL_RING0, tmp);
5411 }
5412
5413 static void cik_enable_lbpw(struct radeon_device *rdev, bool enable)
5414 {
5415         u32 tmp;
5416
5417         tmp = RREG32(RLC_LB_CNTL);
5418         if (enable)
5419                 tmp |= LOAD_BALANCE_ENABLE;
5420         else
5421                 tmp &= ~LOAD_BALANCE_ENABLE;
5422         WREG32(RLC_LB_CNTL, tmp);
5423 }
5424
5425 static void cik_wait_for_rlc_serdes(struct radeon_device *rdev)
5426 {
5427         u32 i, j, k;
5428         u32 mask;
5429
5430         for (i = 0; i < rdev->config.cik.max_shader_engines; i++) {
5431                 for (j = 0; j < rdev->config.cik.max_sh_per_se; j++) {
5432                         cik_select_se_sh(rdev, i, j);
5433                         for (k = 0; k < rdev->usec_timeout; k++) {
5434                                 if (RREG32(RLC_SERDES_CU_MASTER_BUSY) == 0)
5435                                         break;
5436                                 udelay(1);
5437                         }
5438                 }
5439         }
5440         cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
5441
5442         mask = SE_MASTER_BUSY_MASK | GC_MASTER_BUSY | TC0_MASTER_BUSY | TC1_MASTER_BUSY;
5443         for (k = 0; k < rdev->usec_timeout; k++) {
5444                 if ((RREG32(RLC_SERDES_NONCU_MASTER_BUSY) & mask) == 0)
5445                         break;
5446                 udelay(1);
5447         }
5448 }
5449
5450 static void cik_update_rlc(struct radeon_device *rdev, u32 rlc)
5451 {
5452         u32 tmp;
5453
5454         tmp = RREG32(RLC_CNTL);
5455         if (tmp != rlc)
5456                 WREG32(RLC_CNTL, rlc);
5457 }
5458
5459 static u32 cik_halt_rlc(struct radeon_device *rdev)
5460 {
5461         u32 data, orig;
5462
5463         orig = data = RREG32(RLC_CNTL);
5464
5465         if (data & RLC_ENABLE) {
5466                 u32 i;
5467
5468                 data &= ~RLC_ENABLE;
5469                 WREG32(RLC_CNTL, data);
5470
5471                 for (i = 0; i < rdev->usec_timeout; i++) {
5472                         if ((RREG32(RLC_GPM_STAT) & RLC_GPM_BUSY) == 0)
5473                                 break;
5474                         udelay(1);
5475                 }
5476
5477                 cik_wait_for_rlc_serdes(rdev);
5478         }
5479
5480         return orig;
5481 }
5482
5483 void cik_enter_rlc_safe_mode(struct radeon_device *rdev)
5484 {
5485         u32 tmp, i, mask;
5486
5487         tmp = REQ | MESSAGE(MSG_ENTER_RLC_SAFE_MODE);
5488         WREG32(RLC_GPR_REG2, tmp);
5489
5490         mask = GFX_POWER_STATUS | GFX_CLOCK_STATUS;
5491         for (i = 0; i < rdev->usec_timeout; i++) {
5492                 if ((RREG32(RLC_GPM_STAT) & mask) == mask)
5493                         break;
5494                 udelay(1);
5495         }
5496
5497         for (i = 0; i < rdev->usec_timeout; i++) {
5498                 if ((RREG32(RLC_GPR_REG2) & REQ) == 0)
5499                         break;
5500                 udelay(1);
5501         }
5502 }
5503
5504 void cik_exit_rlc_safe_mode(struct radeon_device *rdev)
5505 {
5506         u32 tmp;
5507
5508         tmp = REQ | MESSAGE(MSG_EXIT_RLC_SAFE_MODE);
5509         WREG32(RLC_GPR_REG2, tmp);
5510 }
5511
5512 /**
5513  * cik_rlc_stop - stop the RLC ME
5514  *
5515  * @rdev: radeon_device pointer
5516  *
5517  * Halt the RLC ME (MicroEngine) (CIK).
5518  */
5519 static void cik_rlc_stop(struct radeon_device *rdev)
5520 {
5521         WREG32(RLC_CNTL, 0);
5522
5523         cik_enable_gui_idle_interrupt(rdev, false);
5524
5525         cik_wait_for_rlc_serdes(rdev);
5526 }
5527
5528 /**
5529  * cik_rlc_start - start the RLC ME
5530  *
5531  * @rdev: radeon_device pointer
5532  *
5533  * Unhalt the RLC ME (MicroEngine) (CIK).
5534  */
5535 static void cik_rlc_start(struct radeon_device *rdev)
5536 {
5537         WREG32(RLC_CNTL, RLC_ENABLE);
5538
5539         cik_enable_gui_idle_interrupt(rdev, true);
5540
5541         udelay(50);
5542 }
5543
5544 /**
5545  * cik_rlc_resume - setup the RLC hw
5546  *
5547  * @rdev: radeon_device pointer
5548  *
5549  * Initialize the RLC registers, load the ucode,
5550  * and start the RLC (CIK).
5551  * Returns 0 for success, -EINVAL if the ucode is not available.
5552  */
5553 static int cik_rlc_resume(struct radeon_device *rdev)
5554 {
5555         u32 i, size, tmp;
5556         const __be32 *fw_data;
5557
5558         if (!rdev->rlc_fw)
5559                 return -EINVAL;
5560
5561         switch (rdev->family) {
5562         case CHIP_BONAIRE:
5563         case CHIP_HAWAII:
5564         default:
5565                 size = BONAIRE_RLC_UCODE_SIZE;
5566                 break;
5567         case CHIP_KAVERI:
5568                 size = KV_RLC_UCODE_SIZE;
5569                 break;
5570         case CHIP_KABINI:
5571                 size = KB_RLC_UCODE_SIZE;
5572                 break;
5573         }
5574
5575         cik_rlc_stop(rdev);
5576
5577         /* disable CG */
5578         tmp = RREG32(RLC_CGCG_CGLS_CTRL) & 0xfffffffc;
5579         WREG32(RLC_CGCG_CGLS_CTRL, tmp);
5580
5581         si_rlc_reset(rdev);
5582
5583         cik_init_pg(rdev);
5584
5585         cik_init_cg(rdev);
5586
5587         WREG32(RLC_LB_CNTR_INIT, 0);
5588         WREG32(RLC_LB_CNTR_MAX, 0x00008000);
5589
5590         cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
5591         WREG32(RLC_LB_INIT_CU_MASK, 0xffffffff);
5592         WREG32(RLC_LB_PARAMS, 0x00600408);
5593         WREG32(RLC_LB_CNTL, 0x80000004);
5594
5595         WREG32(RLC_MC_CNTL, 0);
5596         WREG32(RLC_UCODE_CNTL, 0);
5597
5598         fw_data = (const __be32 *)rdev->rlc_fw->data;
5599                 WREG32(RLC_GPM_UCODE_ADDR, 0);
5600         for (i = 0; i < size; i++)
5601                 WREG32(RLC_GPM_UCODE_DATA, be32_to_cpup(fw_data++));
5602         WREG32(RLC_GPM_UCODE_ADDR, 0);
5603
5604         /* XXX - find out what chips support lbpw */
5605         cik_enable_lbpw(rdev, false);
5606
5607         if (rdev->family == CHIP_BONAIRE)
5608                 WREG32(RLC_DRIVER_DMA_STATUS, 0);
5609
5610         cik_rlc_start(rdev);
5611
5612         return 0;
5613 }
5614
5615 static void cik_enable_cgcg(struct radeon_device *rdev, bool enable)
5616 {
5617         u32 data, orig, tmp, tmp2;
5618
5619         orig = data = RREG32(RLC_CGCG_CGLS_CTRL);
5620
5621         if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_GFX_CGCG)) {
5622                 cik_enable_gui_idle_interrupt(rdev, true);
5623
5624                 tmp = cik_halt_rlc(rdev);
5625
5626                 cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
5627                 WREG32(RLC_SERDES_WR_CU_MASTER_MASK, 0xffffffff);
5628                 WREG32(RLC_SERDES_WR_NONCU_MASTER_MASK, 0xffffffff);
5629                 tmp2 = BPM_ADDR_MASK | CGCG_OVERRIDE_0 | CGLS_ENABLE;
5630                 WREG32(RLC_SERDES_WR_CTRL, tmp2);
5631
5632                 cik_update_rlc(rdev, tmp);
5633
5634                 data |= CGCG_EN | CGLS_EN;
5635         } else {
5636                 cik_enable_gui_idle_interrupt(rdev, false);
5637
5638                 RREG32(CB_CGTT_SCLK_CTRL);
5639                 RREG32(CB_CGTT_SCLK_CTRL);
5640                 RREG32(CB_CGTT_SCLK_CTRL);
5641                 RREG32(CB_CGTT_SCLK_CTRL);
5642
5643                 data &= ~(CGCG_EN | CGLS_EN);
5644         }
5645
5646         if (orig != data)
5647                 WREG32(RLC_CGCG_CGLS_CTRL, data);
5648
5649 }
5650
5651 static void cik_enable_mgcg(struct radeon_device *rdev, bool enable)
5652 {
5653         u32 data, orig, tmp = 0;
5654
5655         if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_GFX_MGCG)) {
5656                 if (rdev->cg_flags & RADEON_CG_SUPPORT_GFX_MGLS) {
5657                         if (rdev->cg_flags & RADEON_CG_SUPPORT_GFX_CP_LS) {
5658                                 orig = data = RREG32(CP_MEM_SLP_CNTL);
5659                                 data |= CP_MEM_LS_EN;
5660                                 if (orig != data)
5661                                         WREG32(CP_MEM_SLP_CNTL, data);
5662                         }
5663                 }
5664
5665                 orig = data = RREG32(RLC_CGTT_MGCG_OVERRIDE);
5666                 data &= 0xfffffffd;
5667                 if (orig != data)
5668                         WREG32(RLC_CGTT_MGCG_OVERRIDE, data);
5669
5670                 tmp = cik_halt_rlc(rdev);
5671
5672                 cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
5673                 WREG32(RLC_SERDES_WR_CU_MASTER_MASK, 0xffffffff);
5674                 WREG32(RLC_SERDES_WR_NONCU_MASTER_MASK, 0xffffffff);
5675                 data = BPM_ADDR_MASK | MGCG_OVERRIDE_0;
5676                 WREG32(RLC_SERDES_WR_CTRL, data);
5677
5678                 cik_update_rlc(rdev, tmp);
5679
5680                 if (rdev->cg_flags & RADEON_CG_SUPPORT_GFX_CGTS) {
5681                         orig = data = RREG32(CGTS_SM_CTRL_REG);
5682                         data &= ~SM_MODE_MASK;
5683                         data |= SM_MODE(0x2);
5684                         data |= SM_MODE_ENABLE;
5685                         data &= ~CGTS_OVERRIDE;
5686                         if ((rdev->cg_flags & RADEON_CG_SUPPORT_GFX_MGLS) &&
5687                             (rdev->cg_flags & RADEON_CG_SUPPORT_GFX_CGTS_LS))
5688                                 data &= ~CGTS_LS_OVERRIDE;
5689                         data &= ~ON_MONITOR_ADD_MASK;
5690                         data |= ON_MONITOR_ADD_EN;
5691                         data |= ON_MONITOR_ADD(0x96);
5692                         if (orig != data)
5693                                 WREG32(CGTS_SM_CTRL_REG, data);
5694                 }
5695         } else {
5696                 orig = data = RREG32(RLC_CGTT_MGCG_OVERRIDE);
5697                 data |= 0x00000002;
5698                 if (orig != data)
5699                         WREG32(RLC_CGTT_MGCG_OVERRIDE, data);
5700
5701                 data = RREG32(RLC_MEM_SLP_CNTL);
5702                 if (data & RLC_MEM_LS_EN) {
5703                         data &= ~RLC_MEM_LS_EN;
5704                         WREG32(RLC_MEM_SLP_CNTL, data);
5705                 }
5706
5707                 data = RREG32(CP_MEM_SLP_CNTL);
5708                 if (data & CP_MEM_LS_EN) {
5709                         data &= ~CP_MEM_LS_EN;
5710                         WREG32(CP_MEM_SLP_CNTL, data);
5711                 }
5712
5713                 orig = data = RREG32(CGTS_SM_CTRL_REG);
5714                 data |= CGTS_OVERRIDE | CGTS_LS_OVERRIDE;
5715                 if (orig != data)
5716                         WREG32(CGTS_SM_CTRL_REG, data);
5717
5718                 tmp = cik_halt_rlc(rdev);
5719
5720                 cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
5721                 WREG32(RLC_SERDES_WR_CU_MASTER_MASK, 0xffffffff);
5722                 WREG32(RLC_SERDES_WR_NONCU_MASTER_MASK, 0xffffffff);
5723                 data = BPM_ADDR_MASK | MGCG_OVERRIDE_1;
5724                 WREG32(RLC_SERDES_WR_CTRL, data);
5725
5726                 cik_update_rlc(rdev, tmp);
5727         }
5728 }
5729
5730 static const u32 mc_cg_registers[] =
5731 {
5732         MC_HUB_MISC_HUB_CG,
5733         MC_HUB_MISC_SIP_CG,
5734         MC_HUB_MISC_VM_CG,
5735         MC_XPB_CLK_GAT,
5736         ATC_MISC_CG,
5737         MC_CITF_MISC_WR_CG,
5738         MC_CITF_MISC_RD_CG,
5739         MC_CITF_MISC_VM_CG,
5740         VM_L2_CG,
5741 };
5742
5743 static void cik_enable_mc_ls(struct radeon_device *rdev,
5744                              bool enable)
5745 {
5746         int i;
5747         u32 orig, data;
5748
5749         for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) {
5750                 orig = data = RREG32(mc_cg_registers[i]);
5751                 if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_MC_LS))
5752                         data |= MC_LS_ENABLE;
5753                 else
5754                         data &= ~MC_LS_ENABLE;
5755                 if (data != orig)
5756                         WREG32(mc_cg_registers[i], data);
5757         }
5758 }
5759
5760 static void cik_enable_mc_mgcg(struct radeon_device *rdev,
5761                                bool enable)
5762 {
5763         int i;
5764         u32 orig, data;
5765
5766         for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) {
5767                 orig = data = RREG32(mc_cg_registers[i]);
5768                 if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_MC_MGCG))
5769                         data |= MC_CG_ENABLE;
5770                 else
5771                         data &= ~MC_CG_ENABLE;
5772                 if (data != orig)
5773                         WREG32(mc_cg_registers[i], data);
5774         }
5775 }
5776
5777 static void cik_enable_sdma_mgcg(struct radeon_device *rdev,
5778                                  bool enable)
5779 {
5780         u32 orig, data;
5781
5782         if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_SDMA_MGCG)) {
5783                 WREG32(SDMA0_CLK_CTRL + SDMA0_REGISTER_OFFSET, 0x00000100);
5784                 WREG32(SDMA0_CLK_CTRL + SDMA1_REGISTER_OFFSET, 0x00000100);
5785         } else {
5786                 orig = data = RREG32(SDMA0_CLK_CTRL + SDMA0_REGISTER_OFFSET);
5787                 data |= 0xff000000;
5788                 if (data != orig)
5789                         WREG32(SDMA0_CLK_CTRL + SDMA0_REGISTER_OFFSET, data);
5790
5791                 orig = data = RREG32(SDMA0_CLK_CTRL + SDMA1_REGISTER_OFFSET);
5792                 data |= 0xff000000;
5793                 if (data != orig)
5794                         WREG32(SDMA0_CLK_CTRL + SDMA1_REGISTER_OFFSET, data);
5795         }
5796 }
5797
5798 static void cik_enable_sdma_mgls(struct radeon_device *rdev,
5799                                  bool enable)
5800 {
5801         u32 orig, data;
5802
5803         if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_SDMA_LS)) {
5804                 orig = data = RREG32(SDMA0_POWER_CNTL + SDMA0_REGISTER_OFFSET);
5805                 data |= 0x100;
5806                 if (orig != data)
5807                         WREG32(SDMA0_POWER_CNTL + SDMA0_REGISTER_OFFSET, data);
5808
5809                 orig = data = RREG32(SDMA0_POWER_CNTL + SDMA1_REGISTER_OFFSET);
5810                 data |= 0x100;
5811                 if (orig != data)
5812                         WREG32(SDMA0_POWER_CNTL + SDMA1_REGISTER_OFFSET, data);
5813         } else {
5814                 orig = data = RREG32(SDMA0_POWER_CNTL + SDMA0_REGISTER_OFFSET);
5815                 data &= ~0x100;
5816                 if (orig != data)
5817                         WREG32(SDMA0_POWER_CNTL + SDMA0_REGISTER_OFFSET, data);
5818
5819                 orig = data = RREG32(SDMA0_POWER_CNTL + SDMA1_REGISTER_OFFSET);
5820                 data &= ~0x100;
5821                 if (orig != data)
5822                         WREG32(SDMA0_POWER_CNTL + SDMA1_REGISTER_OFFSET, data);
5823         }
5824 }
5825
5826 static void cik_enable_uvd_mgcg(struct radeon_device *rdev,
5827                                 bool enable)
5828 {
5829         u32 orig, data;
5830
5831         if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_UVD_MGCG)) {
5832                 data = RREG32_UVD_CTX(UVD_CGC_MEM_CTRL);
5833                 data = 0xfff;
5834                 WREG32_UVD_CTX(UVD_CGC_MEM_CTRL, data);
5835
5836                 orig = data = RREG32(UVD_CGC_CTRL);
5837                 data |= DCM;
5838                 if (orig != data)
5839                         WREG32(UVD_CGC_CTRL, data);
5840         } else {
5841                 data = RREG32_UVD_CTX(UVD_CGC_MEM_CTRL);
5842                 data &= ~0xfff;
5843                 WREG32_UVD_CTX(UVD_CGC_MEM_CTRL, data);
5844
5845                 orig = data = RREG32(UVD_CGC_CTRL);
5846                 data &= ~DCM;
5847                 if (orig != data)
5848                         WREG32(UVD_CGC_CTRL, data);
5849         }
5850 }
5851
5852 static void cik_enable_bif_mgls(struct radeon_device *rdev,
5853                                bool enable)
5854 {
5855         u32 orig, data;
5856
5857         orig = data = RREG32_PCIE_PORT(PCIE_CNTL2);
5858
5859         if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_BIF_LS))
5860                 data |= SLV_MEM_LS_EN | MST_MEM_LS_EN |
5861                         REPLAY_MEM_LS_EN | SLV_MEM_AGGRESSIVE_LS_EN;
5862         else
5863                 data &= ~(SLV_MEM_LS_EN | MST_MEM_LS_EN |
5864                           REPLAY_MEM_LS_EN | SLV_MEM_AGGRESSIVE_LS_EN);
5865
5866         if (orig != data)
5867                 WREG32_PCIE_PORT(PCIE_CNTL2, data);
5868 }
5869
5870 static void cik_enable_hdp_mgcg(struct radeon_device *rdev,
5871                                 bool enable)
5872 {
5873         u32 orig, data;
5874
5875         orig = data = RREG32(HDP_HOST_PATH_CNTL);
5876
5877         if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_HDP_MGCG))
5878                 data &= ~CLOCK_GATING_DIS;
5879         else
5880                 data |= CLOCK_GATING_DIS;
5881
5882         if (orig != data)
5883                 WREG32(HDP_HOST_PATH_CNTL, data);
5884 }
5885
5886 static void cik_enable_hdp_ls(struct radeon_device *rdev,
5887                               bool enable)
5888 {
5889         u32 orig, data;
5890
5891         orig = data = RREG32(HDP_MEM_POWER_LS);
5892
5893         if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_HDP_LS))
5894                 data |= HDP_LS_ENABLE;
5895         else
5896                 data &= ~HDP_LS_ENABLE;
5897
5898         if (orig != data)
5899                 WREG32(HDP_MEM_POWER_LS, data);
5900 }
5901
5902 void cik_update_cg(struct radeon_device *rdev,
5903                    u32 block, bool enable)
5904 {
5905
5906         if (block & RADEON_CG_BLOCK_GFX) {
5907                 cik_enable_gui_idle_interrupt(rdev, false);
5908                 /* order matters! */
5909                 if (enable) {
5910                         cik_enable_mgcg(rdev, true);
5911                         cik_enable_cgcg(rdev, true);
5912                 } else {
5913                         cik_enable_cgcg(rdev, false);
5914                         cik_enable_mgcg(rdev, false);
5915                 }
5916                 cik_enable_gui_idle_interrupt(rdev, true);
5917         }
5918
5919         if (block & RADEON_CG_BLOCK_MC) {
5920                 if (!(rdev->flags & RADEON_IS_IGP)) {
5921                         cik_enable_mc_mgcg(rdev, enable);
5922                         cik_enable_mc_ls(rdev, enable);
5923                 }
5924         }
5925
5926         if (block & RADEON_CG_BLOCK_SDMA) {
5927                 cik_enable_sdma_mgcg(rdev, enable);
5928                 cik_enable_sdma_mgls(rdev, enable);
5929         }
5930
5931         if (block & RADEON_CG_BLOCK_BIF) {
5932                 cik_enable_bif_mgls(rdev, enable);
5933         }
5934
5935         if (block & RADEON_CG_BLOCK_UVD) {
5936                 if (rdev->has_uvd)
5937                         cik_enable_uvd_mgcg(rdev, enable);
5938         }
5939
5940         if (block & RADEON_CG_BLOCK_HDP) {
5941                 cik_enable_hdp_mgcg(rdev, enable);
5942                 cik_enable_hdp_ls(rdev, enable);
5943         }
5944 }
5945
5946 static void cik_init_cg(struct radeon_device *rdev)
5947 {
5948
5949         cik_update_cg(rdev, RADEON_CG_BLOCK_GFX, true);
5950
5951         if (rdev->has_uvd)
5952                 si_init_uvd_internal_cg(rdev);
5953
5954         cik_update_cg(rdev, (RADEON_CG_BLOCK_MC |
5955                              RADEON_CG_BLOCK_SDMA |
5956                              RADEON_CG_BLOCK_BIF |
5957                              RADEON_CG_BLOCK_UVD |
5958                              RADEON_CG_BLOCK_HDP), true);
5959 }
5960
5961 static void cik_fini_cg(struct radeon_device *rdev)
5962 {
5963         cik_update_cg(rdev, (RADEON_CG_BLOCK_MC |
5964                              RADEON_CG_BLOCK_SDMA |
5965                              RADEON_CG_BLOCK_BIF |
5966                              RADEON_CG_BLOCK_UVD |
5967                              RADEON_CG_BLOCK_HDP), false);
5968
5969         cik_update_cg(rdev, RADEON_CG_BLOCK_GFX, false);
5970 }
5971
5972 static void cik_enable_sck_slowdown_on_pu(struct radeon_device *rdev,
5973                                           bool enable)
5974 {
5975         u32 data, orig;
5976
5977         orig = data = RREG32(RLC_PG_CNTL);
5978         if (enable && (rdev->pg_flags & RADEON_PG_SUPPORT_RLC_SMU_HS))
5979                 data |= SMU_CLK_SLOWDOWN_ON_PU_ENABLE;
5980         else
5981                 data &= ~SMU_CLK_SLOWDOWN_ON_PU_ENABLE;
5982         if (orig != data)
5983                 WREG32(RLC_PG_CNTL, data);
5984 }
5985
5986 static void cik_enable_sck_slowdown_on_pd(struct radeon_device *rdev,
5987                                           bool enable)
5988 {
5989         u32 data, orig;
5990
5991         orig = data = RREG32(RLC_PG_CNTL);
5992         if (enable && (rdev->pg_flags & RADEON_PG_SUPPORT_RLC_SMU_HS))
5993                 data |= SMU_CLK_SLOWDOWN_ON_PD_ENABLE;
5994         else
5995                 data &= ~SMU_CLK_SLOWDOWN_ON_PD_ENABLE;
5996         if (orig != data)
5997                 WREG32(RLC_PG_CNTL, data);
5998 }
5999
6000 static void cik_enable_cp_pg(struct radeon_device *rdev, bool enable)
6001 {
6002         u32 data, orig;
6003
6004         orig = data = RREG32(RLC_PG_CNTL);
6005         if (enable && (rdev->pg_flags & RADEON_PG_SUPPORT_CP))
6006                 data &= ~DISABLE_CP_PG;
6007         else
6008                 data |= DISABLE_CP_PG;
6009         if (orig != data)
6010                 WREG32(RLC_PG_CNTL, data);
6011 }
6012
6013 static void cik_enable_gds_pg(struct radeon_device *rdev, bool enable)
6014 {
6015         u32 data, orig;
6016
6017         orig = data = RREG32(RLC_PG_CNTL);
6018         if (enable && (rdev->pg_flags & RADEON_PG_SUPPORT_GDS))
6019                 data &= ~DISABLE_GDS_PG;
6020         else
6021                 data |= DISABLE_GDS_PG;
6022         if (orig != data)
6023                 WREG32(RLC_PG_CNTL, data);
6024 }
6025
6026 #define CP_ME_TABLE_SIZE    96
6027 #define CP_ME_TABLE_OFFSET  2048
6028 #define CP_MEC_TABLE_OFFSET 4096
6029
6030 void cik_init_cp_pg_table(struct radeon_device *rdev)
6031 {
6032         const __be32 *fw_data;
6033         volatile u32 *dst_ptr;
6034         int me, i, max_me = 4;
6035         u32 bo_offset = 0;
6036         u32 table_offset;
6037
6038         if (rdev->family == CHIP_KAVERI)
6039                 max_me = 5;
6040
6041         if (rdev->rlc.cp_table_ptr == NULL)
6042                 return;
6043
6044         /* write the cp table buffer */
6045         dst_ptr = rdev->rlc.cp_table_ptr;
6046         for (me = 0; me < max_me; me++) {
6047                 if (me == 0) {
6048                         fw_data = (const __be32 *)rdev->ce_fw->data;
6049                         table_offset = CP_ME_TABLE_OFFSET;
6050                 } else if (me == 1) {
6051                         fw_data = (const __be32 *)rdev->pfp_fw->data;
6052                         table_offset = CP_ME_TABLE_OFFSET;
6053                 } else if (me == 2) {
6054                         fw_data = (const __be32 *)rdev->me_fw->data;
6055                         table_offset = CP_ME_TABLE_OFFSET;
6056                 } else {
6057                         fw_data = (const __be32 *)rdev->mec_fw->data;
6058                         table_offset = CP_MEC_TABLE_OFFSET;
6059                 }
6060
6061                 for (i = 0; i < CP_ME_TABLE_SIZE; i ++) {
6062                         dst_ptr[bo_offset + i] = cpu_to_le32(be32_to_cpu(fw_data[table_offset + i]));
6063                 }
6064                 bo_offset += CP_ME_TABLE_SIZE;
6065         }
6066 }
6067
6068 static void cik_enable_gfx_cgpg(struct radeon_device *rdev,
6069                                 bool enable)
6070 {
6071         u32 data, orig;
6072
6073         if (enable && (rdev->pg_flags & RADEON_PG_SUPPORT_GFX_PG)) {
6074                 orig = data = RREG32(RLC_PG_CNTL);
6075                 data |= GFX_PG_ENABLE;
6076                 if (orig != data)
6077                         WREG32(RLC_PG_CNTL, data);
6078
6079                 orig = data = RREG32(RLC_AUTO_PG_CTRL);
6080                 data |= AUTO_PG_EN;
6081                 if (orig != data)
6082                         WREG32(RLC_AUTO_PG_CTRL, data);
6083         } else {
6084                 orig = data = RREG32(RLC_PG_CNTL);
6085                 data &= ~GFX_PG_ENABLE;
6086                 if (orig != data)
6087                         WREG32(RLC_PG_CNTL, data);
6088
6089                 orig = data = RREG32(RLC_AUTO_PG_CTRL);
6090                 data &= ~AUTO_PG_EN;
6091                 if (orig != data)
6092                         WREG32(RLC_AUTO_PG_CTRL, data);
6093
6094                 data = RREG32(DB_RENDER_CONTROL);
6095         }
6096 }
6097
6098 static u32 cik_get_cu_active_bitmap(struct radeon_device *rdev, u32 se, u32 sh)
6099 {
6100         u32 mask = 0, tmp, tmp1;
6101         int i;
6102
6103         cik_select_se_sh(rdev, se, sh);
6104         tmp = RREG32(CC_GC_SHADER_ARRAY_CONFIG);
6105         tmp1 = RREG32(GC_USER_SHADER_ARRAY_CONFIG);
6106         cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
6107
6108         tmp &= 0xffff0000;
6109
6110         tmp |= tmp1;
6111         tmp >>= 16;
6112
6113         for (i = 0; i < rdev->config.cik.max_cu_per_sh; i ++) {
6114                 mask <<= 1;
6115                 mask |= 1;
6116         }
6117
6118         return (~tmp) & mask;
6119 }
6120
6121 static void cik_init_ao_cu_mask(struct radeon_device *rdev)
6122 {
6123         u32 i, j, k, active_cu_number = 0;
6124         u32 mask, counter, cu_bitmap;
6125         u32 tmp = 0;
6126
6127         for (i = 0; i < rdev->config.cik.max_shader_engines; i++) {
6128                 for (j = 0; j < rdev->config.cik.max_sh_per_se; j++) {
6129                         mask = 1;
6130                         cu_bitmap = 0;
6131                         counter = 0;
6132                         for (k = 0; k < rdev->config.cik.max_cu_per_sh; k ++) {
6133                                 if (cik_get_cu_active_bitmap(rdev, i, j) & mask) {
6134                                         if (counter < 2)
6135                                                 cu_bitmap |= mask;
6136                                         counter ++;
6137                                 }
6138                                 mask <<= 1;
6139                         }
6140
6141                         active_cu_number += counter;
6142                         tmp |= (cu_bitmap << (i * 16 + j * 8));
6143                 }
6144         }
6145
6146         WREG32(RLC_PG_AO_CU_MASK, tmp);
6147
6148         tmp = RREG32(RLC_MAX_PG_CU);
6149         tmp &= ~MAX_PU_CU_MASK;
6150         tmp |= MAX_PU_CU(active_cu_number);
6151         WREG32(RLC_MAX_PG_CU, tmp);
6152 }
6153
6154 static void cik_enable_gfx_static_mgpg(struct radeon_device *rdev,
6155                                        bool enable)
6156 {
6157         u32 data, orig;
6158
6159         orig = data = RREG32(RLC_PG_CNTL);
6160         if (enable && (rdev->pg_flags & RADEON_PG_SUPPORT_GFX_SMG))
6161                 data |= STATIC_PER_CU_PG_ENABLE;
6162         else
6163                 data &= ~STATIC_PER_CU_PG_ENABLE;
6164         if (orig != data)
6165                 WREG32(RLC_PG_CNTL, data);
6166 }
6167
6168 static void cik_enable_gfx_dynamic_mgpg(struct radeon_device *rdev,
6169                                         bool enable)
6170 {
6171         u32 data, orig;
6172
6173         orig = data = RREG32(RLC_PG_CNTL);
6174         if (enable && (rdev->pg_flags & RADEON_PG_SUPPORT_GFX_DMG))
6175                 data |= DYN_PER_CU_PG_ENABLE;
6176         else
6177                 data &= ~DYN_PER_CU_PG_ENABLE;
6178         if (orig != data)
6179                 WREG32(RLC_PG_CNTL, data);
6180 }
6181
6182 #define RLC_SAVE_AND_RESTORE_STARTING_OFFSET 0x90
6183 #define RLC_CLEAR_STATE_DESCRIPTOR_OFFSET    0x3D
6184
6185 static void cik_init_gfx_cgpg(struct radeon_device *rdev)
6186 {
6187         u32 data, orig;
6188         u32 i;
6189
6190         if (rdev->rlc.cs_data) {
6191                 WREG32(RLC_GPM_SCRATCH_ADDR, RLC_CLEAR_STATE_DESCRIPTOR_OFFSET);
6192                 WREG32(RLC_GPM_SCRATCH_DATA, upper_32_bits(rdev->rlc.clear_state_gpu_addr));
6193                 WREG32(RLC_GPM_SCRATCH_DATA, lower_32_bits(rdev->rlc.clear_state_gpu_addr));
6194                 WREG32(RLC_GPM_SCRATCH_DATA, rdev->rlc.clear_state_size);
6195         } else {
6196                 WREG32(RLC_GPM_SCRATCH_ADDR, RLC_CLEAR_STATE_DESCRIPTOR_OFFSET);
6197                 for (i = 0; i < 3; i++)
6198                         WREG32(RLC_GPM_SCRATCH_DATA, 0);
6199         }
6200         if (rdev->rlc.reg_list) {
6201                 WREG32(RLC_GPM_SCRATCH_ADDR, RLC_SAVE_AND_RESTORE_STARTING_OFFSET);
6202                 for (i = 0; i < rdev->rlc.reg_list_size; i++)
6203                         WREG32(RLC_GPM_SCRATCH_DATA, rdev->rlc.reg_list[i]);
6204         }
6205
6206         orig = data = RREG32(RLC_PG_CNTL);
6207         data |= GFX_PG_SRC;
6208         if (orig != data)
6209                 WREG32(RLC_PG_CNTL, data);
6210
6211         WREG32(RLC_SAVE_AND_RESTORE_BASE, rdev->rlc.save_restore_gpu_addr >> 8);
6212         WREG32(RLC_CP_TABLE_RESTORE, rdev->rlc.cp_table_gpu_addr >> 8);
6213
6214         data = RREG32(CP_RB_WPTR_POLL_CNTL);
6215         data &= ~IDLE_POLL_COUNT_MASK;
6216         data |= IDLE_POLL_COUNT(0x60);
6217         WREG32(CP_RB_WPTR_POLL_CNTL, data);
6218
6219         data = 0x10101010;
6220         WREG32(RLC_PG_DELAY, data);
6221
6222         data = RREG32(RLC_PG_DELAY_2);
6223         data &= ~0xff;
6224         data |= 0x3;
6225         WREG32(RLC_PG_DELAY_2, data);
6226
6227         data = RREG32(RLC_AUTO_PG_CTRL);
6228         data &= ~GRBM_REG_SGIT_MASK;
6229         data |= GRBM_REG_SGIT(0x700);
6230         WREG32(RLC_AUTO_PG_CTRL, data);
6231
6232 }
6233
6234 static void cik_update_gfx_pg(struct radeon_device *rdev, bool enable)
6235 {
6236         cik_enable_gfx_cgpg(rdev, enable);
6237         cik_enable_gfx_static_mgpg(rdev, enable);
6238         cik_enable_gfx_dynamic_mgpg(rdev, enable);
6239 }
6240
6241 u32 cik_get_csb_size(struct radeon_device *rdev)
6242 {
6243         u32 count = 0;
6244         const struct cs_section_def *sect = NULL;
6245         const struct cs_extent_def *ext = NULL;
6246
6247         if (rdev->rlc.cs_data == NULL)
6248                 return 0;
6249
6250         /* begin clear state */
6251         count += 2;
6252         /* context control state */
6253         count += 3;
6254
6255         for (sect = rdev->rlc.cs_data; sect->section != NULL; ++sect) {
6256                 for (ext = sect->section; ext->extent != NULL; ++ext) {
6257                         if (sect->id == SECT_CONTEXT)
6258                                 count += 2 + ext->reg_count;
6259                         else
6260                                 return 0;
6261                 }
6262         }
6263         /* pa_sc_raster_config/pa_sc_raster_config1 */
6264         count += 4;
6265         /* end clear state */
6266         count += 2;
6267         /* clear state */
6268         count += 2;
6269
6270         return count;
6271 }
6272
6273 void cik_get_csb_buffer(struct radeon_device *rdev, volatile u32 *buffer)
6274 {
6275         u32 count = 0, i;
6276         const struct cs_section_def *sect = NULL;
6277         const struct cs_extent_def *ext = NULL;
6278
6279         if (rdev->rlc.cs_data == NULL)
6280                 return;
6281         if (buffer == NULL)
6282                 return;
6283
6284         buffer[count++] = cpu_to_le32(PACKET3(PACKET3_PREAMBLE_CNTL, 0));
6285         buffer[count++] = cpu_to_le32(PACKET3_PREAMBLE_BEGIN_CLEAR_STATE);
6286
6287         buffer[count++] = cpu_to_le32(PACKET3(PACKET3_CONTEXT_CONTROL, 1));
6288         buffer[count++] = cpu_to_le32(0x80000000);
6289         buffer[count++] = cpu_to_le32(0x80000000);
6290
6291         for (sect = rdev->rlc.cs_data; sect->section != NULL; ++sect) {
6292                 for (ext = sect->section; ext->extent != NULL; ++ext) {
6293                         if (sect->id == SECT_CONTEXT) {
6294                                 buffer[count++] =
6295                                         cpu_to_le32(PACKET3(PACKET3_SET_CONTEXT_REG, ext->reg_count));
6296                                 buffer[count++] = cpu_to_le32(ext->reg_index - 0xa000);
6297                                 for (i = 0; i < ext->reg_count; i++)
6298                                         buffer[count++] = cpu_to_le32(ext->extent[i]);
6299                         } else {
6300                                 return;
6301                         }
6302                 }
6303         }
6304
6305         buffer[count++] = cpu_to_le32(PACKET3(PACKET3_SET_CONTEXT_REG, 2));
6306         buffer[count++] = cpu_to_le32(PA_SC_RASTER_CONFIG - PACKET3_SET_CONTEXT_REG_START);
6307         switch (rdev->family) {
6308         case CHIP_BONAIRE:
6309                 buffer[count++] = cpu_to_le32(0x16000012);
6310                 buffer[count++] = cpu_to_le32(0x00000000);
6311                 break;
6312         case CHIP_KAVERI:
6313                 buffer[count++] = cpu_to_le32(0x00000000); /* XXX */
6314                 buffer[count++] = cpu_to_le32(0x00000000);
6315                 break;
6316         case CHIP_KABINI:
6317                 buffer[count++] = cpu_to_le32(0x00000000); /* XXX */
6318                 buffer[count++] = cpu_to_le32(0x00000000);
6319                 break;
6320         case CHIP_HAWAII:
6321                 buffer[count++] = 0x3a00161a;
6322                 buffer[count++] = 0x0000002e;
6323                 break;
6324         default:
6325                 buffer[count++] = cpu_to_le32(0x00000000);
6326                 buffer[count++] = cpu_to_le32(0x00000000);
6327                 break;
6328         }
6329
6330         buffer[count++] = cpu_to_le32(PACKET3(PACKET3_PREAMBLE_CNTL, 0));
6331         buffer[count++] = cpu_to_le32(PACKET3_PREAMBLE_END_CLEAR_STATE);
6332
6333         buffer[count++] = cpu_to_le32(PACKET3(PACKET3_CLEAR_STATE, 0));
6334         buffer[count++] = cpu_to_le32(0);
6335 }
6336
6337 static void cik_init_pg(struct radeon_device *rdev)
6338 {
6339         if (rdev->pg_flags) {
6340                 cik_enable_sck_slowdown_on_pu(rdev, true);
6341                 cik_enable_sck_slowdown_on_pd(rdev, true);
6342                 if (rdev->pg_flags & RADEON_PG_SUPPORT_GFX_PG) {
6343                         cik_init_gfx_cgpg(rdev);
6344                         cik_enable_cp_pg(rdev, true);
6345                         cik_enable_gds_pg(rdev, true);
6346                 }
6347                 cik_init_ao_cu_mask(rdev);
6348                 cik_update_gfx_pg(rdev, true);
6349         }
6350 }
6351
6352 static void cik_fini_pg(struct radeon_device *rdev)
6353 {
6354         if (rdev->pg_flags) {
6355                 cik_update_gfx_pg(rdev, false);
6356                 if (rdev->pg_flags & RADEON_PG_SUPPORT_GFX_PG) {
6357                         cik_enable_cp_pg(rdev, false);
6358                         cik_enable_gds_pg(rdev, false);
6359                 }
6360         }
6361 }
6362
6363 /*
6364  * Interrupts
6365  * Starting with r6xx, interrupts are handled via a ring buffer.
6366  * Ring buffers are areas of GPU accessible memory that the GPU
6367  * writes interrupt vectors into and the host reads vectors out of.
6368  * There is a rptr (read pointer) that determines where the
6369  * host is currently reading, and a wptr (write pointer)
6370  * which determines where the GPU has written.  When the
6371  * pointers are equal, the ring is idle.  When the GPU
6372  * writes vectors to the ring buffer, it increments the
6373  * wptr.  When there is an interrupt, the host then starts
6374  * fetching commands and processing them until the pointers are
6375  * equal again at which point it updates the rptr.
6376  */
6377
6378 /**
6379  * cik_enable_interrupts - Enable the interrupt ring buffer
6380  *
6381  * @rdev: radeon_device pointer
6382  *
6383  * Enable the interrupt ring buffer (CIK).
6384  */
6385 static void cik_enable_interrupts(struct radeon_device *rdev)
6386 {
6387         u32 ih_cntl = RREG32(IH_CNTL);
6388         u32 ih_rb_cntl = RREG32(IH_RB_CNTL);
6389
6390         ih_cntl |= ENABLE_INTR;
6391         ih_rb_cntl |= IH_RB_ENABLE;
6392         WREG32(IH_CNTL, ih_cntl);
6393         WREG32(IH_RB_CNTL, ih_rb_cntl);
6394         rdev->ih.enabled = true;
6395 }
6396
6397 /**
6398  * cik_disable_interrupts - Disable the interrupt ring buffer
6399  *
6400  * @rdev: radeon_device pointer
6401  *
6402  * Disable the interrupt ring buffer (CIK).
6403  */
6404 static void cik_disable_interrupts(struct radeon_device *rdev)
6405 {
6406         u32 ih_rb_cntl = RREG32(IH_RB_CNTL);
6407         u32 ih_cntl = RREG32(IH_CNTL);
6408
6409         ih_rb_cntl &= ~IH_RB_ENABLE;
6410         ih_cntl &= ~ENABLE_INTR;
6411         WREG32(IH_RB_CNTL, ih_rb_cntl);
6412         WREG32(IH_CNTL, ih_cntl);
6413         /* set rptr, wptr to 0 */
6414         WREG32(IH_RB_RPTR, 0);
6415         WREG32(IH_RB_WPTR, 0);
6416         rdev->ih.enabled = false;
6417         rdev->ih.rptr = 0;
6418 }
6419
6420 /**
6421  * cik_disable_interrupt_state - Disable all interrupt sources
6422  *
6423  * @rdev: radeon_device pointer
6424  *
6425  * Clear all interrupt enable bits used by the driver (CIK).
6426  */
6427 static void cik_disable_interrupt_state(struct radeon_device *rdev)
6428 {
6429         u32 tmp;
6430
6431         /* gfx ring */
6432         tmp = RREG32(CP_INT_CNTL_RING0) &
6433                 (CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
6434         WREG32(CP_INT_CNTL_RING0, tmp);
6435         /* sdma */
6436         tmp = RREG32(SDMA0_CNTL + SDMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
6437         WREG32(SDMA0_CNTL + SDMA0_REGISTER_OFFSET, tmp);
6438         tmp = RREG32(SDMA0_CNTL + SDMA1_REGISTER_OFFSET) & ~TRAP_ENABLE;
6439         WREG32(SDMA0_CNTL + SDMA1_REGISTER_OFFSET, tmp);
6440         /* compute queues */
6441         WREG32(CP_ME1_PIPE0_INT_CNTL, 0);
6442         WREG32(CP_ME1_PIPE1_INT_CNTL, 0);
6443         WREG32(CP_ME1_PIPE2_INT_CNTL, 0);
6444         WREG32(CP_ME1_PIPE3_INT_CNTL, 0);
6445         WREG32(CP_ME2_PIPE0_INT_CNTL, 0);
6446         WREG32(CP_ME2_PIPE1_INT_CNTL, 0);
6447         WREG32(CP_ME2_PIPE2_INT_CNTL, 0);
6448         WREG32(CP_ME2_PIPE3_INT_CNTL, 0);
6449         /* grbm */
6450         WREG32(GRBM_INT_CNTL, 0);
6451         /* vline/vblank, etc. */
6452         WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
6453         WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
6454         if (rdev->num_crtc >= 4) {
6455                 WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
6456                 WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
6457         }
6458         if (rdev->num_crtc >= 6) {
6459                 WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
6460                 WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
6461         }
6462
6463         /* dac hotplug */
6464         WREG32(DAC_AUTODETECT_INT_CONTROL, 0);
6465
6466         /* digital hotplug */
6467         tmp = RREG32(DC_HPD1_INT_CONTROL) & DC_HPDx_INT_POLARITY;
6468         WREG32(DC_HPD1_INT_CONTROL, tmp);
6469         tmp = RREG32(DC_HPD2_INT_CONTROL) & DC_HPDx_INT_POLARITY;
6470         WREG32(DC_HPD2_INT_CONTROL, tmp);
6471         tmp = RREG32(DC_HPD3_INT_CONTROL) & DC_HPDx_INT_POLARITY;
6472         WREG32(DC_HPD3_INT_CONTROL, tmp);
6473         tmp = RREG32(DC_HPD4_INT_CONTROL) & DC_HPDx_INT_POLARITY;
6474         WREG32(DC_HPD4_INT_CONTROL, tmp);
6475         tmp = RREG32(DC_HPD5_INT_CONTROL) & DC_HPDx_INT_POLARITY;
6476         WREG32(DC_HPD5_INT_CONTROL, tmp);
6477         tmp = RREG32(DC_HPD6_INT_CONTROL) & DC_HPDx_INT_POLARITY;
6478         WREG32(DC_HPD6_INT_CONTROL, tmp);
6479
6480 }
6481
6482 /**
6483  * cik_irq_init - init and enable the interrupt ring
6484  *
6485  * @rdev: radeon_device pointer
6486  *
6487  * Allocate a ring buffer for the interrupt controller,
6488  * enable the RLC, disable interrupts, enable the IH
6489  * ring buffer and enable it (CIK).
6490  * Called at device load and reume.
6491  * Returns 0 for success, errors for failure.
6492  */
6493 static int cik_irq_init(struct radeon_device *rdev)
6494 {
6495         int ret = 0;
6496         int rb_bufsz;
6497         u32 interrupt_cntl, ih_cntl, ih_rb_cntl;
6498
6499         /* allocate ring */
6500         ret = r600_ih_ring_alloc(rdev);
6501         if (ret)
6502                 return ret;
6503
6504         /* disable irqs */
6505         cik_disable_interrupts(rdev);
6506
6507         /* init rlc */
6508         ret = cik_rlc_resume(rdev);
6509         if (ret) {
6510                 r600_ih_ring_fini(rdev);
6511                 return ret;
6512         }
6513
6514         /* setup interrupt control */
6515         /* XXX this should actually be a bus address, not an MC address. same on older asics */
6516         WREG32(INTERRUPT_CNTL2, rdev->ih.gpu_addr >> 8);
6517         interrupt_cntl = RREG32(INTERRUPT_CNTL);
6518         /* IH_DUMMY_RD_OVERRIDE=0 - dummy read disabled with msi, enabled without msi
6519          * IH_DUMMY_RD_OVERRIDE=1 - dummy read controlled by IH_DUMMY_RD_EN
6520          */
6521         interrupt_cntl &= ~IH_DUMMY_RD_OVERRIDE;
6522         /* IH_REQ_NONSNOOP_EN=1 if ring is in non-cacheable memory, e.g., vram */
6523         interrupt_cntl &= ~IH_REQ_NONSNOOP_EN;
6524         WREG32(INTERRUPT_CNTL, interrupt_cntl);
6525
6526         WREG32(IH_RB_BASE, rdev->ih.gpu_addr >> 8);
6527         rb_bufsz = order_base_2(rdev->ih.ring_size / 4);
6528
6529         ih_rb_cntl = (IH_WPTR_OVERFLOW_ENABLE |
6530                       IH_WPTR_OVERFLOW_CLEAR |
6531                       (rb_bufsz << 1));
6532
6533         if (rdev->wb.enabled)
6534                 ih_rb_cntl |= IH_WPTR_WRITEBACK_ENABLE;
6535
6536         /* set the writeback address whether it's enabled or not */
6537         WREG32(IH_RB_WPTR_ADDR_LO, (rdev->wb.gpu_addr + R600_WB_IH_WPTR_OFFSET) & 0xFFFFFFFC);
6538         WREG32(IH_RB_WPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + R600_WB_IH_WPTR_OFFSET) & 0xFF);
6539
6540         WREG32(IH_RB_CNTL, ih_rb_cntl);
6541
6542         /* set rptr, wptr to 0 */
6543         WREG32(IH_RB_RPTR, 0);
6544         WREG32(IH_RB_WPTR, 0);
6545
6546         /* Default settings for IH_CNTL (disabled at first) */
6547         ih_cntl = MC_WRREQ_CREDIT(0x10) | MC_WR_CLEAN_CNT(0x10) | MC_VMID(0);
6548         /* RPTR_REARM only works if msi's are enabled */
6549         if (rdev->msi_enabled)
6550                 ih_cntl |= RPTR_REARM;
6551         WREG32(IH_CNTL, ih_cntl);
6552
6553         /* force the active interrupt state to all disabled */
6554         cik_disable_interrupt_state(rdev);
6555
6556         pci_set_master(rdev->pdev);
6557
6558         /* enable irqs */
6559         cik_enable_interrupts(rdev);
6560
6561         return ret;
6562 }
6563
6564 /**
6565  * cik_irq_set - enable/disable interrupt sources
6566  *
6567  * @rdev: radeon_device pointer
6568  *
6569  * Enable interrupt sources on the GPU (vblanks, hpd,
6570  * etc.) (CIK).
6571  * Returns 0 for success, errors for failure.
6572  */
6573 int cik_irq_set(struct radeon_device *rdev)
6574 {
6575         u32 cp_int_cntl;
6576         u32 cp_m1p0, cp_m1p1, cp_m1p2, cp_m1p3;
6577         u32 cp_m2p0, cp_m2p1, cp_m2p2, cp_m2p3;
6578         u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0;
6579         u32 hpd1, hpd2, hpd3, hpd4, hpd5, hpd6;
6580         u32 grbm_int_cntl = 0;
6581         u32 dma_cntl, dma_cntl1;
6582         u32 thermal_int;
6583
6584         if (!rdev->irq.installed) {
6585                 WARN(1, "Can't enable IRQ/MSI because no handler is installed\n");
6586                 return -EINVAL;
6587         }
6588         /* don't enable anything if the ih is disabled */
6589         if (!rdev->ih.enabled) {
6590                 cik_disable_interrupts(rdev);
6591                 /* force the active interrupt state to all disabled */
6592                 cik_disable_interrupt_state(rdev);
6593                 return 0;
6594         }
6595
6596         cp_int_cntl = RREG32(CP_INT_CNTL_RING0) &
6597                 (CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
6598         cp_int_cntl |= PRIV_INSTR_INT_ENABLE | PRIV_REG_INT_ENABLE;
6599
6600         hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN;
6601         hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN;
6602         hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN;
6603         hpd4 = RREG32(DC_HPD4_INT_CONTROL) & ~DC_HPDx_INT_EN;
6604         hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN;
6605         hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN;
6606
6607         dma_cntl = RREG32(SDMA0_CNTL + SDMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
6608         dma_cntl1 = RREG32(SDMA0_CNTL + SDMA1_REGISTER_OFFSET) & ~TRAP_ENABLE;
6609
6610         cp_m1p0 = RREG32(CP_ME1_PIPE0_INT_CNTL) & ~TIME_STAMP_INT_ENABLE;
6611         cp_m1p1 = RREG32(CP_ME1_PIPE1_INT_CNTL) & ~TIME_STAMP_INT_ENABLE;
6612         cp_m1p2 = RREG32(CP_ME1_PIPE2_INT_CNTL) & ~TIME_STAMP_INT_ENABLE;
6613         cp_m1p3 = RREG32(CP_ME1_PIPE3_INT_CNTL) & ~TIME_STAMP_INT_ENABLE;
6614         cp_m2p0 = RREG32(CP_ME2_PIPE0_INT_CNTL) & ~TIME_STAMP_INT_ENABLE;
6615         cp_m2p1 = RREG32(CP_ME2_PIPE1_INT_CNTL) & ~TIME_STAMP_INT_ENABLE;
6616         cp_m2p2 = RREG32(CP_ME2_PIPE2_INT_CNTL) & ~TIME_STAMP_INT_ENABLE;
6617         cp_m2p3 = RREG32(CP_ME2_PIPE3_INT_CNTL) & ~TIME_STAMP_INT_ENABLE;
6618
6619         if (rdev->flags & RADEON_IS_IGP)
6620                 thermal_int = RREG32_SMC(CG_THERMAL_INT_CTRL) &
6621                         ~(THERM_INTH_MASK | THERM_INTL_MASK);
6622         else
6623                 thermal_int = RREG32_SMC(CG_THERMAL_INT) &
6624                         ~(THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW);
6625
6626         /* enable CP interrupts on all rings */
6627         if (atomic_read(&rdev->irq.ring_int[RADEON_RING_TYPE_GFX_INDEX])) {
6628                 DRM_DEBUG("cik_irq_set: sw int gfx\n");
6629                 cp_int_cntl |= TIME_STAMP_INT_ENABLE;
6630         }
6631         if (atomic_read(&rdev->irq.ring_int[CAYMAN_RING_TYPE_CP1_INDEX])) {
6632                 struct radeon_ring *ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
6633                 DRM_DEBUG("si_irq_set: sw int cp1\n");
6634                 if (ring->me == 1) {
6635                         switch (ring->pipe) {
6636                         case 0:
6637                                 cp_m1p0 |= TIME_STAMP_INT_ENABLE;
6638                                 break;
6639                         case 1:
6640                                 cp_m1p1 |= TIME_STAMP_INT_ENABLE;
6641                                 break;
6642                         case 2:
6643                                 cp_m1p2 |= TIME_STAMP_INT_ENABLE;
6644                                 break;
6645                         case 3:
6646                                 cp_m1p2 |= TIME_STAMP_INT_ENABLE;
6647                                 break;
6648                         default:
6649                                 DRM_DEBUG("si_irq_set: sw int cp1 invalid pipe %d\n", ring->pipe);
6650                                 break;
6651                         }
6652                 } else if (ring->me == 2) {
6653                         switch (ring->pipe) {
6654                         case 0:
6655                                 cp_m2p0 |= TIME_STAMP_INT_ENABLE;
6656                                 break;
6657                         case 1:
6658                                 cp_m2p1 |= TIME_STAMP_INT_ENABLE;
6659                                 break;
6660                         case 2:
6661                                 cp_m2p2 |= TIME_STAMP_INT_ENABLE;
6662                                 break;
6663                         case 3:
6664                                 cp_m2p2 |= TIME_STAMP_INT_ENABLE;
6665                                 break;
6666                         default:
6667                                 DRM_DEBUG("si_irq_set: sw int cp1 invalid pipe %d\n", ring->pipe);
6668                                 break;
6669                         }
6670                 } else {
6671                         DRM_DEBUG("si_irq_set: sw int cp1 invalid me %d\n", ring->me);
6672                 }
6673         }
6674         if (atomic_read(&rdev->irq.ring_int[CAYMAN_RING_TYPE_CP2_INDEX])) {
6675                 struct radeon_ring *ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
6676                 DRM_DEBUG("si_irq_set: sw int cp2\n");
6677                 if (ring->me == 1) {
6678                         switch (ring->pipe) {
6679                         case 0:
6680                                 cp_m1p0 |= TIME_STAMP_INT_ENABLE;
6681                                 break;
6682                         case 1:
6683                                 cp_m1p1 |= TIME_STAMP_INT_ENABLE;
6684                                 break;
6685                         case 2:
6686                                 cp_m1p2 |= TIME_STAMP_INT_ENABLE;
6687                                 break;
6688                         case 3:
6689                                 cp_m1p2 |= TIME_STAMP_INT_ENABLE;
6690                                 break;
6691                         default:
6692                                 DRM_DEBUG("si_irq_set: sw int cp2 invalid pipe %d\n", ring->pipe);
6693                                 break;
6694                         }
6695                 } else if (ring->me == 2) {
6696                         switch (ring->pipe) {
6697                         case 0:
6698                                 cp_m2p0 |= TIME_STAMP_INT_ENABLE;
6699                                 break;
6700                         case 1:
6701                                 cp_m2p1 |= TIME_STAMP_INT_ENABLE;
6702                                 break;
6703                         case 2:
6704                                 cp_m2p2 |= TIME_STAMP_INT_ENABLE;
6705                                 break;
6706                         case 3:
6707                                 cp_m2p2 |= TIME_STAMP_INT_ENABLE;
6708                                 break;
6709                         default:
6710                                 DRM_DEBUG("si_irq_set: sw int cp2 invalid pipe %d\n", ring->pipe);
6711                                 break;
6712                         }
6713                 } else {
6714                         DRM_DEBUG("si_irq_set: sw int cp2 invalid me %d\n", ring->me);
6715                 }
6716         }
6717
6718         if (atomic_read(&rdev->irq.ring_int[R600_RING_TYPE_DMA_INDEX])) {
6719                 DRM_DEBUG("cik_irq_set: sw int dma\n");
6720                 dma_cntl |= TRAP_ENABLE;
6721         }
6722
6723         if (atomic_read(&rdev->irq.ring_int[CAYMAN_RING_TYPE_DMA1_INDEX])) {
6724                 DRM_DEBUG("cik_irq_set: sw int dma1\n");
6725                 dma_cntl1 |= TRAP_ENABLE;
6726         }
6727
6728         if (rdev->irq.crtc_vblank_int[0] ||
6729             atomic_read(&rdev->irq.pflip[0])) {
6730                 DRM_DEBUG("cik_irq_set: vblank 0\n");
6731                 crtc1 |= VBLANK_INTERRUPT_MASK;
6732         }
6733         if (rdev->irq.crtc_vblank_int[1] ||
6734             atomic_read(&rdev->irq.pflip[1])) {
6735                 DRM_DEBUG("cik_irq_set: vblank 1\n");
6736                 crtc2 |= VBLANK_INTERRUPT_MASK;
6737         }
6738         if (rdev->irq.crtc_vblank_int[2] ||
6739             atomic_read(&rdev->irq.pflip[2])) {
6740                 DRM_DEBUG("cik_irq_set: vblank 2\n");
6741                 crtc3 |= VBLANK_INTERRUPT_MASK;
6742         }
6743         if (rdev->irq.crtc_vblank_int[3] ||
6744             atomic_read(&rdev->irq.pflip[3])) {
6745                 DRM_DEBUG("cik_irq_set: vblank 3\n");
6746                 crtc4 |= VBLANK_INTERRUPT_MASK;
6747         }
6748         if (rdev->irq.crtc_vblank_int[4] ||
6749             atomic_read(&rdev->irq.pflip[4])) {
6750                 DRM_DEBUG("cik_irq_set: vblank 4\n");
6751                 crtc5 |= VBLANK_INTERRUPT_MASK;
6752         }
6753         if (rdev->irq.crtc_vblank_int[5] ||
6754             atomic_read(&rdev->irq.pflip[5])) {
6755                 DRM_DEBUG("cik_irq_set: vblank 5\n");
6756                 crtc6 |= VBLANK_INTERRUPT_MASK;
6757         }
6758         if (rdev->irq.hpd[0]) {
6759                 DRM_DEBUG("cik_irq_set: hpd 1\n");
6760                 hpd1 |= DC_HPDx_INT_EN;
6761         }
6762         if (rdev->irq.hpd[1]) {
6763                 DRM_DEBUG("cik_irq_set: hpd 2\n");
6764                 hpd2 |= DC_HPDx_INT_EN;
6765         }
6766         if (rdev->irq.hpd[2]) {
6767                 DRM_DEBUG("cik_irq_set: hpd 3\n");
6768                 hpd3 |= DC_HPDx_INT_EN;
6769         }
6770         if (rdev->irq.hpd[3]) {
6771                 DRM_DEBUG("cik_irq_set: hpd 4\n");
6772                 hpd4 |= DC_HPDx_INT_EN;
6773         }
6774         if (rdev->irq.hpd[4]) {
6775                 DRM_DEBUG("cik_irq_set: hpd 5\n");
6776                 hpd5 |= DC_HPDx_INT_EN;
6777         }
6778         if (rdev->irq.hpd[5]) {
6779                 DRM_DEBUG("cik_irq_set: hpd 6\n");
6780                 hpd6 |= DC_HPDx_INT_EN;
6781         }
6782
6783         if (rdev->irq.dpm_thermal) {
6784                 DRM_DEBUG("dpm thermal\n");
6785                 if (rdev->flags & RADEON_IS_IGP)
6786                         thermal_int |= THERM_INTH_MASK | THERM_INTL_MASK;
6787                 else
6788                         thermal_int |= THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW;
6789         }
6790
6791         WREG32(CP_INT_CNTL_RING0, cp_int_cntl);
6792
6793         WREG32(SDMA0_CNTL + SDMA0_REGISTER_OFFSET, dma_cntl);
6794         WREG32(SDMA0_CNTL + SDMA1_REGISTER_OFFSET, dma_cntl1);
6795
6796         WREG32(CP_ME1_PIPE0_INT_CNTL, cp_m1p0);
6797         WREG32(CP_ME1_PIPE1_INT_CNTL, cp_m1p1);
6798         WREG32(CP_ME1_PIPE2_INT_CNTL, cp_m1p2);
6799         WREG32(CP_ME1_PIPE3_INT_CNTL, cp_m1p3);
6800         WREG32(CP_ME2_PIPE0_INT_CNTL, cp_m2p0);
6801         WREG32(CP_ME2_PIPE1_INT_CNTL, cp_m2p1);
6802         WREG32(CP_ME2_PIPE2_INT_CNTL, cp_m2p2);
6803         WREG32(CP_ME2_PIPE3_INT_CNTL, cp_m2p3);
6804
6805         WREG32(GRBM_INT_CNTL, grbm_int_cntl);
6806
6807         WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1);
6808         WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, crtc2);
6809         if (rdev->num_crtc >= 4) {
6810                 WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, crtc3);
6811                 WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, crtc4);
6812         }
6813         if (rdev->num_crtc >= 6) {
6814                 WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, crtc5);
6815                 WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, crtc6);
6816         }
6817
6818         WREG32(DC_HPD1_INT_CONTROL, hpd1);
6819         WREG32(DC_HPD2_INT_CONTROL, hpd2);
6820         WREG32(DC_HPD3_INT_CONTROL, hpd3);
6821         WREG32(DC_HPD4_INT_CONTROL, hpd4);
6822         WREG32(DC_HPD5_INT_CONTROL, hpd5);
6823         WREG32(DC_HPD6_INT_CONTROL, hpd6);
6824
6825         if (rdev->flags & RADEON_IS_IGP)
6826                 WREG32_SMC(CG_THERMAL_INT_CTRL, thermal_int);
6827         else
6828                 WREG32_SMC(CG_THERMAL_INT, thermal_int);
6829
6830         return 0;
6831 }
6832
6833 /**
6834  * cik_irq_ack - ack interrupt sources
6835  *
6836  * @rdev: radeon_device pointer
6837  *
6838  * Ack interrupt sources on the GPU (vblanks, hpd,
6839  * etc.) (CIK).  Certain interrupts sources are sw
6840  * generated and do not require an explicit ack.
6841  */
6842 static inline void cik_irq_ack(struct radeon_device *rdev)
6843 {
6844         u32 tmp;
6845
6846         rdev->irq.stat_regs.cik.disp_int = RREG32(DISP_INTERRUPT_STATUS);
6847         rdev->irq.stat_regs.cik.disp_int_cont = RREG32(DISP_INTERRUPT_STATUS_CONTINUE);
6848         rdev->irq.stat_regs.cik.disp_int_cont2 = RREG32(DISP_INTERRUPT_STATUS_CONTINUE2);
6849         rdev->irq.stat_regs.cik.disp_int_cont3 = RREG32(DISP_INTERRUPT_STATUS_CONTINUE3);
6850         rdev->irq.stat_regs.cik.disp_int_cont4 = RREG32(DISP_INTERRUPT_STATUS_CONTINUE4);
6851         rdev->irq.stat_regs.cik.disp_int_cont5 = RREG32(DISP_INTERRUPT_STATUS_CONTINUE5);
6852         rdev->irq.stat_regs.cik.disp_int_cont6 = RREG32(DISP_INTERRUPT_STATUS_CONTINUE6);
6853
6854         if (rdev->irq.stat_regs.cik.disp_int & LB_D1_VBLANK_INTERRUPT)
6855                 WREG32(LB_VBLANK_STATUS + EVERGREEN_CRTC0_REGISTER_OFFSET, VBLANK_ACK);
6856         if (rdev->irq.stat_regs.cik.disp_int & LB_D1_VLINE_INTERRUPT)
6857                 WREG32(LB_VLINE_STATUS + EVERGREEN_CRTC0_REGISTER_OFFSET, VLINE_ACK);
6858         if (rdev->irq.stat_regs.cik.disp_int_cont & LB_D2_VBLANK_INTERRUPT)
6859                 WREG32(LB_VBLANK_STATUS + EVERGREEN_CRTC1_REGISTER_OFFSET, VBLANK_ACK);
6860         if (rdev->irq.stat_regs.cik.disp_int_cont & LB_D2_VLINE_INTERRUPT)
6861                 WREG32(LB_VLINE_STATUS + EVERGREEN_CRTC1_REGISTER_OFFSET, VLINE_ACK);
6862
6863         if (rdev->num_crtc >= 4) {
6864                 if (rdev->irq.stat_regs.cik.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT)
6865                         WREG32(LB_VBLANK_STATUS + EVERGREEN_CRTC2_REGISTER_OFFSET, VBLANK_ACK);
6866                 if (rdev->irq.stat_regs.cik.disp_int_cont2 & LB_D3_VLINE_INTERRUPT)
6867                         WREG32(LB_VLINE_STATUS + EVERGREEN_CRTC2_REGISTER_OFFSET, VLINE_ACK);
6868                 if (rdev->irq.stat_regs.cik.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT)
6869                         WREG32(LB_VBLANK_STATUS + EVERGREEN_CRTC3_REGISTER_OFFSET, VBLANK_ACK);
6870                 if (rdev->irq.stat_regs.cik.disp_int_cont3 & LB_D4_VLINE_INTERRUPT)
6871                         WREG32(LB_VLINE_STATUS + EVERGREEN_CRTC3_REGISTER_OFFSET, VLINE_ACK);
6872         }
6873
6874         if (rdev->num_crtc >= 6) {
6875                 if (rdev->irq.stat_regs.cik.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT)
6876                         WREG32(LB_VBLANK_STATUS + EVERGREEN_CRTC4_REGISTER_OFFSET, VBLANK_ACK);
6877                 if (rdev->irq.stat_regs.cik.disp_int_cont4 & LB_D5_VLINE_INTERRUPT)
6878                         WREG32(LB_VLINE_STATUS + EVERGREEN_CRTC4_REGISTER_OFFSET, VLINE_ACK);
6879                 if (rdev->irq.stat_regs.cik.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT)
6880                         WREG32(LB_VBLANK_STATUS + EVERGREEN_CRTC5_REGISTER_OFFSET, VBLANK_ACK);
6881                 if (rdev->irq.stat_regs.cik.disp_int_cont5 & LB_D6_VLINE_INTERRUPT)
6882                         WREG32(LB_VLINE_STATUS + EVERGREEN_CRTC5_REGISTER_OFFSET, VLINE_ACK);
6883         }
6884
6885         if (rdev->irq.stat_regs.cik.disp_int & DC_HPD1_INTERRUPT) {
6886                 tmp = RREG32(DC_HPD1_INT_CONTROL);
6887                 tmp |= DC_HPDx_INT_ACK;
6888                 WREG32(DC_HPD1_INT_CONTROL, tmp);
6889         }
6890         if (rdev->irq.stat_regs.cik.disp_int_cont & DC_HPD2_INTERRUPT) {
6891                 tmp = RREG32(DC_HPD2_INT_CONTROL);
6892                 tmp |= DC_HPDx_INT_ACK;
6893                 WREG32(DC_HPD2_INT_CONTROL, tmp);
6894         }
6895         if (rdev->irq.stat_regs.cik.disp_int_cont2 & DC_HPD3_INTERRUPT) {
6896                 tmp = RREG32(DC_HPD3_INT_CONTROL);
6897                 tmp |= DC_HPDx_INT_ACK;
6898                 WREG32(DC_HPD3_INT_CONTROL, tmp);
6899         }
6900         if (rdev->irq.stat_regs.cik.disp_int_cont3 & DC_HPD4_INTERRUPT) {
6901                 tmp = RREG32(DC_HPD4_INT_CONTROL);
6902                 tmp |= DC_HPDx_INT_ACK;
6903                 WREG32(DC_HPD4_INT_CONTROL, tmp);
6904         }
6905         if (rdev->irq.stat_regs.cik.disp_int_cont4 & DC_HPD5_INTERRUPT) {
6906                 tmp = RREG32(DC_HPD5_INT_CONTROL);
6907                 tmp |= DC_HPDx_INT_ACK;
6908                 WREG32(DC_HPD5_INT_CONTROL, tmp);
6909         }
6910         if (rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_INTERRUPT) {
6911                 tmp = RREG32(DC_HPD5_INT_CONTROL);
6912                 tmp |= DC_HPDx_INT_ACK;
6913                 WREG32(DC_HPD6_INT_CONTROL, tmp);
6914         }
6915 }
6916
6917 /**
6918  * cik_irq_disable - disable interrupts
6919  *
6920  * @rdev: radeon_device pointer
6921  *
6922  * Disable interrupts on the hw (CIK).
6923  */
6924 static void cik_irq_disable(struct radeon_device *rdev)
6925 {
6926         cik_disable_interrupts(rdev);
6927         /* Wait and acknowledge irq */
6928         mdelay(1);
6929         cik_irq_ack(rdev);
6930         cik_disable_interrupt_state(rdev);
6931 }
6932
6933 /**
6934  * cik_irq_disable - disable interrupts for suspend
6935  *
6936  * @rdev: radeon_device pointer
6937  *
6938  * Disable interrupts and stop the RLC (CIK).
6939  * Used for suspend.
6940  */
6941 static void cik_irq_suspend(struct radeon_device *rdev)
6942 {
6943         cik_irq_disable(rdev);
6944         cik_rlc_stop(rdev);
6945 }
6946
6947 /**
6948  * cik_irq_fini - tear down interrupt support
6949  *
6950  * @rdev: radeon_device pointer
6951  *
6952  * Disable interrupts on the hw and free the IH ring
6953  * buffer (CIK).
6954  * Used for driver unload.
6955  */
6956 static void cik_irq_fini(struct radeon_device *rdev)
6957 {
6958         cik_irq_suspend(rdev);
6959         r600_ih_ring_fini(rdev);
6960 }
6961
6962 /**
6963  * cik_get_ih_wptr - get the IH ring buffer wptr
6964  *
6965  * @rdev: radeon_device pointer
6966  *
6967  * Get the IH ring buffer wptr from either the register
6968  * or the writeback memory buffer (CIK).  Also check for
6969  * ring buffer overflow and deal with it.
6970  * Used by cik_irq_process().
6971  * Returns the value of the wptr.
6972  */
6973 static inline u32 cik_get_ih_wptr(struct radeon_device *rdev)
6974 {
6975         u32 wptr, tmp;
6976
6977         if (rdev->wb.enabled)
6978                 wptr = le32_to_cpu(rdev->wb.wb[R600_WB_IH_WPTR_OFFSET/4]);
6979         else
6980                 wptr = RREG32(IH_RB_WPTR);
6981
6982         if (wptr & RB_OVERFLOW) {
6983                 /* When a ring buffer overflow happen start parsing interrupt
6984                  * from the last not overwritten vector (wptr + 16). Hopefully
6985                  * this should allow us to catchup.
6986                  */
6987                 dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, %d, %d)\n",
6988                         wptr, rdev->ih.rptr, (wptr + 16) + rdev->ih.ptr_mask);
6989                 rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask;
6990                 tmp = RREG32(IH_RB_CNTL);
6991                 tmp |= IH_WPTR_OVERFLOW_CLEAR;
6992                 WREG32(IH_RB_CNTL, tmp);
6993         }
6994         return (wptr & rdev->ih.ptr_mask);
6995 }
6996
6997 /*        CIK IV Ring
6998  * Each IV ring entry is 128 bits:
6999  * [7:0]    - interrupt source id
7000  * [31:8]   - reserved
7001  * [59:32]  - interrupt source data
7002  * [63:60]  - reserved
7003  * [71:64]  - RINGID
7004  *            CP:
7005  *            ME_ID [1:0], PIPE_ID[1:0], QUEUE_ID[2:0]
7006  *            QUEUE_ID - for compute, which of the 8 queues owned by the dispatcher
7007  *                     - for gfx, hw shader state (0=PS...5=LS, 6=CS)
7008  *            ME_ID - 0 = gfx, 1 = first 4 CS pipes, 2 = second 4 CS pipes
7009  *            PIPE_ID - ME0 0=3D
7010  *                    - ME1&2 compute dispatcher (4 pipes each)
7011  *            SDMA:
7012  *            INSTANCE_ID [1:0], QUEUE_ID[1:0]
7013  *            INSTANCE_ID - 0 = sdma0, 1 = sdma1
7014  *            QUEUE_ID - 0 = gfx, 1 = rlc0, 2 = rlc1
7015  * [79:72]  - VMID
7016  * [95:80]  - PASID
7017  * [127:96] - reserved
7018  */
7019 /**
7020  * cik_irq_process - interrupt handler
7021  *
7022  * @rdev: radeon_device pointer
7023  *
7024  * Interrupt hander (CIK).  Walk the IH ring,
7025  * ack interrupts and schedule work to handle
7026  * interrupt events.
7027  * Returns irq process return code.
7028  */
7029 int cik_irq_process(struct radeon_device *rdev)
7030 {
7031         struct radeon_ring *cp1_ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
7032         struct radeon_ring *cp2_ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
7033         u32 wptr;
7034         u32 rptr;
7035         u32 src_id, src_data, ring_id;
7036         u8 me_id, pipe_id, queue_id;
7037         u32 ring_index;
7038         bool queue_hotplug = false;
7039         bool queue_reset = false;
7040         u32 addr, status, mc_client;
7041         bool queue_thermal = false;
7042
7043         if (!rdev->ih.enabled || rdev->shutdown)
7044                 return IRQ_NONE;
7045
7046         wptr = cik_get_ih_wptr(rdev);
7047
7048 restart_ih:
7049         /* is somebody else already processing irqs? */
7050         if (atomic_xchg(&rdev->ih.lock, 1))
7051                 return IRQ_NONE;
7052
7053         rptr = rdev->ih.rptr;
7054         DRM_DEBUG("cik_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
7055
7056         /* Order reading of wptr vs. reading of IH ring data */
7057         rmb();
7058
7059         /* display interrupts */
7060         cik_irq_ack(rdev);
7061
7062         while (rptr != wptr) {
7063                 /* wptr/rptr are in bytes! */
7064                 ring_index = rptr / 4;
7065                 src_id =  le32_to_cpu(rdev->ih.ring[ring_index]) & 0xff;
7066                 src_data = le32_to_cpu(rdev->ih.ring[ring_index + 1]) & 0xfffffff;
7067                 ring_id = le32_to_cpu(rdev->ih.ring[ring_index + 2]) & 0xff;
7068
7069                 switch (src_id) {
7070                 case 1: /* D1 vblank/vline */
7071                         switch (src_data) {
7072                         case 0: /* D1 vblank */
7073                                 if (rdev->irq.stat_regs.cik.disp_int & LB_D1_VBLANK_INTERRUPT) {
7074                                         if (rdev->irq.crtc_vblank_int[0]) {
7075                                                 drm_handle_vblank(rdev->ddev, 0);
7076                                                 rdev->pm.vblank_sync = true;
7077                                                 wake_up(&rdev->irq.vblank_queue);
7078                                         }
7079                                         if (atomic_read(&rdev->irq.pflip[0]))
7080                                                 radeon_crtc_handle_flip(rdev, 0);
7081                                         rdev->irq.stat_regs.cik.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
7082                                         DRM_DEBUG("IH: D1 vblank\n");
7083                                 }
7084                                 break;
7085                         case 1: /* D1 vline */
7086                                 if (rdev->irq.stat_regs.cik.disp_int & LB_D1_VLINE_INTERRUPT) {
7087                                         rdev->irq.stat_regs.cik.disp_int &= ~LB_D1_VLINE_INTERRUPT;
7088                                         DRM_DEBUG("IH: D1 vline\n");
7089                                 }
7090                                 break;
7091                         default:
7092                                 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
7093                                 break;
7094                         }
7095                         break;
7096                 case 2: /* D2 vblank/vline */
7097                         switch (src_data) {
7098                         case 0: /* D2 vblank */
7099                                 if (rdev->irq.stat_regs.cik.disp_int_cont & LB_D2_VBLANK_INTERRUPT) {
7100                                         if (rdev->irq.crtc_vblank_int[1]) {
7101                                                 drm_handle_vblank(rdev->ddev, 1);
7102                                                 rdev->pm.vblank_sync = true;
7103                                                 wake_up(&rdev->irq.vblank_queue);
7104                                         }
7105                                         if (atomic_read(&rdev->irq.pflip[1]))
7106                                                 radeon_crtc_handle_flip(rdev, 1);
7107                                         rdev->irq.stat_regs.cik.disp_int_cont &= ~LB_D2_VBLANK_INTERRUPT;
7108                                         DRM_DEBUG("IH: D2 vblank\n");
7109                                 }
7110                                 break;
7111                         case 1: /* D2 vline */
7112                                 if (rdev->irq.stat_regs.cik.disp_int_cont & LB_D2_VLINE_INTERRUPT) {
7113                                         rdev->irq.stat_regs.cik.disp_int_cont &= ~LB_D2_VLINE_INTERRUPT;
7114                                         DRM_DEBUG("IH: D2 vline\n");
7115                                 }
7116                                 break;
7117                         default:
7118                                 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
7119                                 break;
7120                         }
7121                         break;
7122                 case 3: /* D3 vblank/vline */
7123                         switch (src_data) {
7124                         case 0: /* D3 vblank */
7125                                 if (rdev->irq.stat_regs.cik.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT) {
7126                                         if (rdev->irq.crtc_vblank_int[2]) {
7127                                                 drm_handle_vblank(rdev->ddev, 2);
7128                                                 rdev->pm.vblank_sync = true;
7129                                                 wake_up(&rdev->irq.vblank_queue);
7130                                         }
7131                                         if (atomic_read(&rdev->irq.pflip[2]))
7132                                                 radeon_crtc_handle_flip(rdev, 2);
7133                                         rdev->irq.stat_regs.cik.disp_int_cont2 &= ~LB_D3_VBLANK_INTERRUPT;
7134                                         DRM_DEBUG("IH: D3 vblank\n");
7135                                 }
7136                                 break;
7137                         case 1: /* D3 vline */
7138                                 if (rdev->irq.stat_regs.cik.disp_int_cont2 & LB_D3_VLINE_INTERRUPT) {
7139                                         rdev->irq.stat_regs.cik.disp_int_cont2 &= ~LB_D3_VLINE_INTERRUPT;
7140                                         DRM_DEBUG("IH: D3 vline\n");
7141                                 }
7142                                 break;
7143                         default:
7144                                 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
7145                                 break;
7146                         }
7147                         break;
7148                 case 4: /* D4 vblank/vline */
7149                         switch (src_data) {
7150                         case 0: /* D4 vblank */
7151                                 if (rdev->irq.stat_regs.cik.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT) {
7152                                         if (rdev->irq.crtc_vblank_int[3]) {
7153                                                 drm_handle_vblank(rdev->ddev, 3);
7154                                                 rdev->pm.vblank_sync = true;
7155                                                 wake_up(&rdev->irq.vblank_queue);
7156                                         }
7157                                         if (atomic_read(&rdev->irq.pflip[3]))
7158                                                 radeon_crtc_handle_flip(rdev, 3);
7159                                         rdev->irq.stat_regs.cik.disp_int_cont3 &= ~LB_D4_VBLANK_INTERRUPT;
7160                                         DRM_DEBUG("IH: D4 vblank\n");
7161                                 }
7162                                 break;
7163                         case 1: /* D4 vline */
7164                                 if (rdev->irq.stat_regs.cik.disp_int_cont3 & LB_D4_VLINE_INTERRUPT) {
7165                                         rdev->irq.stat_regs.cik.disp_int_cont3 &= ~LB_D4_VLINE_INTERRUPT;
7166                                         DRM_DEBUG("IH: D4 vline\n");
7167                                 }
7168                                 break;
7169                         default:
7170                                 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
7171                                 break;
7172                         }
7173                         break;
7174                 case 5: /* D5 vblank/vline */
7175                         switch (src_data) {
7176                         case 0: /* D5 vblank */
7177                                 if (rdev->irq.stat_regs.cik.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT) {
7178                                         if (rdev->irq.crtc_vblank_int[4]) {
7179                                                 drm_handle_vblank(rdev->ddev, 4);
7180                                                 rdev->pm.vblank_sync = true;
7181                                                 wake_up(&rdev->irq.vblank_queue);
7182                                         }
7183                                         if (atomic_read(&rdev->irq.pflip[4]))
7184                                                 radeon_crtc_handle_flip(rdev, 4);
7185                                         rdev->irq.stat_regs.cik.disp_int_cont4 &= ~LB_D5_VBLANK_INTERRUPT;
7186                                         DRM_DEBUG("IH: D5 vblank\n");
7187                                 }
7188                                 break;
7189                         case 1: /* D5 vline */
7190                                 if (rdev->irq.stat_regs.cik.disp_int_cont4 & LB_D5_VLINE_INTERRUPT) {
7191                                         rdev->irq.stat_regs.cik.disp_int_cont4 &= ~LB_D5_VLINE_INTERRUPT;
7192                                         DRM_DEBUG("IH: D5 vline\n");
7193                                 }
7194                                 break;
7195                         default:
7196                                 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
7197                                 break;
7198                         }
7199                         break;
7200                 case 6: /* D6 vblank/vline */
7201                         switch (src_data) {
7202                         case 0: /* D6 vblank */
7203                                 if (rdev->irq.stat_regs.cik.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT) {
7204                                         if (rdev->irq.crtc_vblank_int[5]) {
7205                                                 drm_handle_vblank(rdev->ddev, 5);
7206                                                 rdev->pm.vblank_sync = true;
7207                                                 wake_up(&rdev->irq.vblank_queue);
7208                                         }
7209                                         if (atomic_read(&rdev->irq.pflip[5]))
7210                                                 radeon_crtc_handle_flip(rdev, 5);
7211                                         rdev->irq.stat_regs.cik.disp_int_cont5 &= ~LB_D6_VBLANK_INTERRUPT;
7212                                         DRM_DEBUG("IH: D6 vblank\n");
7213                                 }
7214                                 break;
7215                         case 1: /* D6 vline */
7216                                 if (rdev->irq.stat_regs.cik.disp_int_cont5 & LB_D6_VLINE_INTERRUPT) {
7217                                         rdev->irq.stat_regs.cik.disp_int_cont5 &= ~LB_D6_VLINE_INTERRUPT;
7218                                         DRM_DEBUG("IH: D6 vline\n");
7219                                 }
7220                                 break;
7221                         default:
7222                                 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
7223                                 break;
7224                         }
7225                         break;
7226                 case 42: /* HPD hotplug */
7227                         switch (src_data) {
7228                         case 0:
7229                                 if (rdev->irq.stat_regs.cik.disp_int & DC_HPD1_INTERRUPT) {
7230                                         rdev->irq.stat_regs.cik.disp_int &= ~DC_HPD1_INTERRUPT;
7231                                         queue_hotplug = true;
7232                                         DRM_DEBUG("IH: HPD1\n");
7233                                 }
7234                                 break;
7235                         case 1:
7236                                 if (rdev->irq.stat_regs.cik.disp_int_cont & DC_HPD2_INTERRUPT) {
7237                                         rdev->irq.stat_regs.cik.disp_int_cont &= ~DC_HPD2_INTERRUPT;
7238                                         queue_hotplug = true;
7239                                         DRM_DEBUG("IH: HPD2\n");
7240                                 }
7241                                 break;
7242                         case 2:
7243                                 if (rdev->irq.stat_regs.cik.disp_int_cont2 & DC_HPD3_INTERRUPT) {
7244                                         rdev->irq.stat_regs.cik.disp_int_cont2 &= ~DC_HPD3_INTERRUPT;
7245                                         queue_hotplug = true;
7246                                         DRM_DEBUG("IH: HPD3\n");
7247                                 }
7248                                 break;
7249                         case 3:
7250                                 if (rdev->irq.stat_regs.cik.disp_int_cont3 & DC_HPD4_INTERRUPT) {
7251                                         rdev->irq.stat_regs.cik.disp_int_cont3 &= ~DC_HPD4_INTERRUPT;
7252                                         queue_hotplug = true;
7253                                         DRM_DEBUG("IH: HPD4\n");
7254                                 }
7255                                 break;
7256                         case 4:
7257                                 if (rdev->irq.stat_regs.cik.disp_int_cont4 & DC_HPD5_INTERRUPT) {
7258                                         rdev->irq.stat_regs.cik.disp_int_cont4 &= ~DC_HPD5_INTERRUPT;
7259                                         queue_hotplug = true;
7260                                         DRM_DEBUG("IH: HPD5\n");
7261                                 }
7262                                 break;
7263                         case 5:
7264                                 if (rdev->irq.stat_regs.cik.disp_int_cont5 & DC_HPD6_INTERRUPT) {
7265                                         rdev->irq.stat_regs.cik.disp_int_cont5 &= ~DC_HPD6_INTERRUPT;
7266                                         queue_hotplug = true;
7267                                         DRM_DEBUG("IH: HPD6\n");
7268                                 }
7269                                 break;
7270                         default:
7271                                 DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
7272                                 break;
7273                         }
7274                         break;
7275                 case 124: /* UVD */
7276                         DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data);
7277                         radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX);
7278                         break;
7279                 case 146:
7280                 case 147:
7281                         addr = RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR);
7282                         status = RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS);
7283                         mc_client = RREG32(VM_CONTEXT1_PROTECTION_FAULT_MCCLIENT);
7284                         dev_err(rdev->dev, "GPU fault detected: %d 0x%08x\n", src_id, src_data);
7285                         dev_err(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_ADDR   0x%08X\n",
7286                                 addr);
7287                         dev_err(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
7288                                 status);
7289                         cik_vm_decode_fault(rdev, status, addr, mc_client);
7290                         /* reset addr and status */
7291                         WREG32_P(VM_CONTEXT1_CNTL2, 1, ~1);
7292                         break;
7293                 case 176: /* GFX RB CP_INT */
7294                 case 177: /* GFX IB CP_INT */
7295                         radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX);
7296                         break;
7297                 case 181: /* CP EOP event */
7298                         DRM_DEBUG("IH: CP EOP\n");
7299                         /* XXX check the bitfield order! */
7300                         me_id = (ring_id & 0x60) >> 5;
7301                         pipe_id = (ring_id & 0x18) >> 3;
7302                         queue_id = (ring_id & 0x7) >> 0;
7303                         switch (me_id) {
7304                         case 0:
7305                                 radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX);
7306                                 break;
7307                         case 1:
7308                         case 2:
7309                                 if ((cp1_ring->me == me_id) & (cp1_ring->pipe == pipe_id))
7310                                         radeon_fence_process(rdev, CAYMAN_RING_TYPE_CP1_INDEX);
7311                                 if ((cp2_ring->me == me_id) & (cp2_ring->pipe == pipe_id))
7312                                         radeon_fence_process(rdev, CAYMAN_RING_TYPE_CP2_INDEX);
7313                                 break;
7314                         }
7315                         break;
7316                 case 184: /* CP Privileged reg access */
7317                         DRM_ERROR("Illegal register access in command stream\n");
7318                         /* XXX check the bitfield order! */
7319                         me_id = (ring_id & 0x60) >> 5;
7320                         pipe_id = (ring_id & 0x18) >> 3;
7321                         queue_id = (ring_id & 0x7) >> 0;
7322                         switch (me_id) {
7323                         case 0:
7324                                 /* This results in a full GPU reset, but all we need to do is soft
7325                                  * reset the CP for gfx
7326                                  */
7327                                 queue_reset = true;
7328                                 break;
7329                         case 1:
7330                                 /* XXX compute */
7331                                 queue_reset = true;
7332                                 break;
7333                         case 2:
7334                                 /* XXX compute */
7335                                 queue_reset = true;
7336                                 break;
7337                         }
7338                         break;
7339                 case 185: /* CP Privileged inst */
7340                         DRM_ERROR("Illegal instruction in command stream\n");
7341                         /* XXX check the bitfield order! */
7342                         me_id = (ring_id & 0x60) >> 5;
7343                         pipe_id = (ring_id & 0x18) >> 3;
7344                         queue_id = (ring_id & 0x7) >> 0;
7345                         switch (me_id) {
7346                         case 0:
7347                                 /* This results in a full GPU reset, but all we need to do is soft
7348                                  * reset the CP for gfx
7349                                  */
7350                                 queue_reset = true;
7351                                 break;
7352                         case 1:
7353                                 /* XXX compute */
7354                                 queue_reset = true;
7355                                 break;
7356                         case 2:
7357                                 /* XXX compute */
7358                                 queue_reset = true;
7359                                 break;
7360                         }
7361                         break;
7362                 case 224: /* SDMA trap event */
7363                         /* XXX check the bitfield order! */
7364                         me_id = (ring_id & 0x3) >> 0;
7365                         queue_id = (ring_id & 0xc) >> 2;
7366                         DRM_DEBUG("IH: SDMA trap\n");
7367                         switch (me_id) {
7368                         case 0:
7369                                 switch (queue_id) {
7370                                 case 0:
7371                                         radeon_fence_process(rdev, R600_RING_TYPE_DMA_INDEX);
7372                                         break;
7373                                 case 1:
7374                                         /* XXX compute */
7375                                         break;
7376                                 case 2:
7377                                         /* XXX compute */
7378                                         break;
7379                                 }
7380                                 break;
7381                         case 1:
7382                                 switch (queue_id) {
7383                                 case 0:
7384                                         radeon_fence_process(rdev, CAYMAN_RING_TYPE_DMA1_INDEX);
7385                                         break;
7386                                 case 1:
7387                                         /* XXX compute */
7388                                         break;
7389                                 case 2:
7390                                         /* XXX compute */
7391                                         break;
7392                                 }
7393                                 break;
7394                         }
7395                         break;
7396                 case 230: /* thermal low to high */
7397                         DRM_DEBUG("IH: thermal low to high\n");
7398                         rdev->pm.dpm.thermal.high_to_low = false;
7399                         queue_thermal = true;
7400                         break;
7401                 case 231: /* thermal high to low */
7402                         DRM_DEBUG("IH: thermal high to low\n");
7403                         rdev->pm.dpm.thermal.high_to_low = true;
7404                         queue_thermal = true;
7405                         break;
7406                 case 233: /* GUI IDLE */
7407                         DRM_DEBUG("IH: GUI idle\n");
7408                         break;
7409                 case 241: /* SDMA Privileged inst */
7410                 case 247: /* SDMA Privileged inst */
7411                         DRM_ERROR("Illegal instruction in SDMA command stream\n");
7412                         /* XXX check the bitfield order! */
7413                         me_id = (ring_id & 0x3) >> 0;
7414                         queue_id = (ring_id & 0xc) >> 2;
7415                         switch (me_id) {
7416                         case 0:
7417                                 switch (queue_id) {
7418                                 case 0:
7419                                         queue_reset = true;
7420                                         break;
7421                                 case 1:
7422                                         /* XXX compute */
7423                                         queue_reset = true;
7424                                         break;
7425                                 case 2:
7426                                         /* XXX compute */
7427                                         queue_reset = true;
7428                                         break;
7429                                 }
7430                                 break;
7431                         case 1:
7432                                 switch (queue_id) {
7433                                 case 0:
7434                                         queue_reset = true;
7435                                         break;
7436                                 case 1:
7437                                         /* XXX compute */
7438                                         queue_reset = true;
7439                                         break;
7440                                 case 2:
7441                                         /* XXX compute */
7442                                         queue_reset = true;
7443                                         break;
7444                                 }
7445                                 break;
7446                         }
7447                         break;
7448                 default:
7449                         DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
7450                         break;
7451                 }
7452
7453                 /* wptr/rptr are in bytes! */
7454                 rptr += 16;
7455                 rptr &= rdev->ih.ptr_mask;
7456         }
7457         if (queue_hotplug)
7458                 schedule_work(&rdev->hotplug_work);
7459         if (queue_reset)
7460                 schedule_work(&rdev->reset_work);
7461         if (queue_thermal)
7462                 schedule_work(&rdev->pm.dpm.thermal.work);
7463         rdev->ih.rptr = rptr;
7464         WREG32(IH_RB_RPTR, rdev->ih.rptr);
7465         atomic_set(&rdev->ih.lock, 0);
7466
7467         /* make sure wptr hasn't changed while processing */
7468         wptr = cik_get_ih_wptr(rdev);
7469         if (wptr != rptr)
7470                 goto restart_ih;
7471
7472         return IRQ_HANDLED;
7473 }
7474
7475 /*
7476  * startup/shutdown callbacks
7477  */
7478 /**
7479  * cik_startup - program the asic to a functional state
7480  *
7481  * @rdev: radeon_device pointer
7482  *
7483  * Programs the asic to a functional state (CIK).
7484  * Called by cik_init() and cik_resume().
7485  * Returns 0 for success, error for failure.
7486  */
7487 static int cik_startup(struct radeon_device *rdev)
7488 {
7489         struct radeon_ring *ring;
7490         int r;
7491
7492         /* enable pcie gen2/3 link */
7493         cik_pcie_gen3_enable(rdev);
7494         /* enable aspm */
7495         cik_program_aspm(rdev);
7496
7497         /* scratch needs to be initialized before MC */
7498         r = r600_vram_scratch_init(rdev);
7499         if (r)
7500                 return r;
7501
7502         cik_mc_program(rdev);
7503
7504         if (rdev->flags & RADEON_IS_IGP) {
7505                 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
7506                     !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw) {
7507                         r = cik_init_microcode(rdev);
7508                         if (r) {
7509                                 DRM_ERROR("Failed to load firmware!\n");
7510                                 return r;
7511                         }
7512                 }
7513         } else {
7514                 if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
7515                     !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw ||
7516                     !rdev->mc_fw) {
7517                         r = cik_init_microcode(rdev);
7518                         if (r) {
7519                                 DRM_ERROR("Failed to load firmware!\n");
7520                                 return r;
7521                         }
7522                 }
7523
7524                 r = ci_mc_load_microcode(rdev);
7525                 if (r) {
7526                         DRM_ERROR("Failed to load MC firmware!\n");
7527                         return r;
7528                 }
7529         }
7530
7531         r = cik_pcie_gart_enable(rdev);
7532         if (r)
7533                 return r;
7534         cik_gpu_init(rdev);
7535
7536         /* allocate rlc buffers */
7537         if (rdev->flags & RADEON_IS_IGP) {
7538                 if (rdev->family == CHIP_KAVERI) {
7539                         rdev->rlc.reg_list = spectre_rlc_save_restore_register_list;
7540                         rdev->rlc.reg_list_size =
7541                                 (u32)ARRAY_SIZE(spectre_rlc_save_restore_register_list);
7542                 } else {
7543                         rdev->rlc.reg_list = kalindi_rlc_save_restore_register_list;
7544                         rdev->rlc.reg_list_size =
7545                                 (u32)ARRAY_SIZE(kalindi_rlc_save_restore_register_list);
7546                 }
7547         }
7548         rdev->rlc.cs_data = ci_cs_data;
7549         rdev->rlc.cp_table_size = CP_ME_TABLE_SIZE * 5 * 4;
7550         r = sumo_rlc_init(rdev);
7551         if (r) {
7552                 DRM_ERROR("Failed to init rlc BOs!\n");
7553                 return r;
7554         }
7555
7556         /* allocate wb buffer */
7557         r = radeon_wb_init(rdev);
7558         if (r)
7559                 return r;
7560
7561         /* allocate mec buffers */
7562         r = cik_mec_init(rdev);
7563         if (r) {
7564                 DRM_ERROR("Failed to init MEC BOs!\n");
7565                 return r;
7566         }
7567
7568         r = radeon_fence_driver_start_ring(rdev, RADEON_RING_TYPE_GFX_INDEX);
7569         if (r) {
7570                 dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r);
7571                 return r;
7572         }
7573
7574         r = radeon_fence_driver_start_ring(rdev, CAYMAN_RING_TYPE_CP1_INDEX);
7575         if (r) {
7576                 dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r);
7577                 return r;
7578         }
7579
7580         r = radeon_fence_driver_start_ring(rdev, CAYMAN_RING_TYPE_CP2_INDEX);
7581         if (r) {
7582                 dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r);
7583                 return r;
7584         }
7585
7586         r = radeon_fence_driver_start_ring(rdev, R600_RING_TYPE_DMA_INDEX);
7587         if (r) {
7588                 dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r);
7589                 return r;
7590         }
7591
7592         r = radeon_fence_driver_start_ring(rdev, CAYMAN_RING_TYPE_DMA1_INDEX);
7593         if (r) {
7594                 dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r);
7595                 return r;
7596         }
7597
7598         r = radeon_uvd_resume(rdev);
7599         if (!r) {
7600                 r = uvd_v4_2_resume(rdev);
7601                 if (!r) {
7602                         r = radeon_fence_driver_start_ring(rdev,
7603                                                            R600_RING_TYPE_UVD_INDEX);
7604                         if (r)
7605                                 dev_err(rdev->dev, "UVD fences init error (%d).\n", r);
7606                 }
7607         }
7608         if (r)
7609                 rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_size = 0;
7610
7611         /* Enable IRQ */
7612         if (!rdev->irq.installed) {
7613                 r = radeon_irq_kms_init(rdev);
7614                 if (r)
7615                         return r;
7616         }
7617
7618         r = cik_irq_init(rdev);
7619         if (r) {
7620                 DRM_ERROR("radeon: IH init failed (%d).\n", r);
7621                 radeon_irq_kms_fini(rdev);
7622                 return r;
7623         }
7624         cik_irq_set(rdev);
7625
7626         ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
7627         r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP_RPTR_OFFSET,
7628                              CP_RB0_RPTR, CP_RB0_WPTR,
7629                              PACKET3(PACKET3_NOP, 0x3FFF));
7630         if (r)
7631                 return r;
7632
7633         /* set up the compute queues */
7634         /* type-2 packets are deprecated on MEC, use type-3 instead */
7635         ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
7636         r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP1_RPTR_OFFSET,
7637                              CP_HQD_PQ_RPTR, CP_HQD_PQ_WPTR,
7638                              PACKET3(PACKET3_NOP, 0x3FFF));
7639         if (r)
7640                 return r;
7641         ring->me = 1; /* first MEC */
7642         ring->pipe = 0; /* first pipe */
7643         ring->queue = 0; /* first queue */
7644         ring->wptr_offs = CIK_WB_CP1_WPTR_OFFSET;
7645
7646         /* type-2 packets are deprecated on MEC, use type-3 instead */
7647         ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
7648         r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP2_RPTR_OFFSET,
7649                              CP_HQD_PQ_RPTR, CP_HQD_PQ_WPTR,
7650                              PACKET3(PACKET3_NOP, 0x3FFF));
7651         if (r)
7652                 return r;
7653         /* dGPU only have 1 MEC */
7654         ring->me = 1; /* first MEC */
7655         ring->pipe = 0; /* first pipe */
7656         ring->queue = 1; /* second queue */
7657         ring->wptr_offs = CIK_WB_CP2_WPTR_OFFSET;
7658
7659         ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX];
7660         r = radeon_ring_init(rdev, ring, ring->ring_size, R600_WB_DMA_RPTR_OFFSET,
7661                              SDMA0_GFX_RB_RPTR + SDMA0_REGISTER_OFFSET,
7662                              SDMA0_GFX_RB_WPTR + SDMA0_REGISTER_OFFSET,
7663                              SDMA_PACKET(SDMA_OPCODE_NOP, 0, 0));
7664         if (r)
7665                 return r;
7666
7667         ring = &rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX];
7668         r = radeon_ring_init(rdev, ring, ring->ring_size, CAYMAN_WB_DMA1_RPTR_OFFSET,
7669                              SDMA0_GFX_RB_RPTR + SDMA1_REGISTER_OFFSET,
7670                              SDMA0_GFX_RB_WPTR + SDMA1_REGISTER_OFFSET,
7671                              SDMA_PACKET(SDMA_OPCODE_NOP, 0, 0));
7672         if (r)
7673                 return r;
7674
7675         r = cik_cp_resume(rdev);
7676         if (r)
7677                 return r;
7678
7679         r = cik_sdma_resume(rdev);
7680         if (r)
7681                 return r;
7682
7683         ring = &rdev->ring[R600_RING_TYPE_UVD_INDEX];
7684         if (ring->ring_size) {
7685                 r = radeon_ring_init(rdev, ring, ring->ring_size, 0,
7686                                      UVD_RBC_RB_RPTR, UVD_RBC_RB_WPTR,
7687                                      RADEON_CP_PACKET2);
7688                 if (!r)
7689                         r = uvd_v1_0_init(rdev);
7690                 if (r)
7691                         DRM_ERROR("radeon: failed initializing UVD (%d).\n", r);
7692         }
7693
7694         r = radeon_ib_pool_init(rdev);
7695         if (r) {
7696                 dev_err(rdev->dev, "IB initialization failed (%d).\n", r);
7697                 return r;
7698         }
7699
7700         r = radeon_vm_manager_init(rdev);
7701         if (r) {
7702                 dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r);
7703                 return r;
7704         }
7705
7706         r = dce6_audio_init(rdev);
7707         if (r)
7708                 return r;
7709
7710         return 0;
7711 }
7712
7713 /**
7714  * cik_resume - resume the asic to a functional state
7715  *
7716  * @rdev: radeon_device pointer
7717  *
7718  * Programs the asic to a functional state (CIK).
7719  * Called at resume.
7720  * Returns 0 for success, error for failure.
7721  */
7722 int cik_resume(struct radeon_device *rdev)
7723 {
7724         int r;
7725
7726         /* post card */
7727         atom_asic_init(rdev->mode_info.atom_context);
7728
7729         /* init golden registers */
7730         cik_init_golden_registers(rdev);
7731
7732         rdev->accel_working = true;
7733         r = cik_startup(rdev);
7734         if (r) {
7735                 DRM_ERROR("cik startup failed on resume\n");
7736                 rdev->accel_working = false;
7737                 return r;
7738         }
7739
7740         return r;
7741
7742 }
7743
7744 /**
7745  * cik_suspend - suspend the asic
7746  *
7747  * @rdev: radeon_device pointer
7748  *
7749  * Bring the chip into a state suitable for suspend (CIK).
7750  * Called at suspend.
7751  * Returns 0 for success.
7752  */
7753 int cik_suspend(struct radeon_device *rdev)
7754 {
7755         dce6_audio_fini(rdev);
7756         radeon_vm_manager_fini(rdev);
7757         cik_cp_enable(rdev, false);
7758         cik_sdma_enable(rdev, false);
7759         uvd_v1_0_fini(rdev);
7760         radeon_uvd_suspend(rdev);
7761         cik_fini_pg(rdev);
7762         cik_fini_cg(rdev);
7763         cik_irq_suspend(rdev);
7764         radeon_wb_disable(rdev);
7765         cik_pcie_gart_disable(rdev);
7766         return 0;
7767 }
7768
7769 /* Plan is to move initialization in that function and use
7770  * helper function so that radeon_device_init pretty much
7771  * do nothing more than calling asic specific function. This
7772  * should also allow to remove a bunch of callback function
7773  * like vram_info.
7774  */
7775 /**
7776  * cik_init - asic specific driver and hw init
7777  *
7778  * @rdev: radeon_device pointer
7779  *
7780  * Setup asic specific driver variables and program the hw
7781  * to a functional state (CIK).
7782  * Called at driver startup.
7783  * Returns 0 for success, errors for failure.
7784  */
7785 int cik_init(struct radeon_device *rdev)
7786 {
7787         struct radeon_ring *ring;
7788         int r;
7789
7790         /* Read BIOS */
7791         if (!radeon_get_bios(rdev)) {
7792                 if (ASIC_IS_AVIVO(rdev))
7793                         return -EINVAL;
7794         }
7795         /* Must be an ATOMBIOS */
7796         if (!rdev->is_atom_bios) {
7797                 dev_err(rdev->dev, "Expecting atombios for cayman GPU\n");
7798                 return -EINVAL;
7799         }
7800         r = radeon_atombios_init(rdev);
7801         if (r)
7802                 return r;
7803
7804         /* Post card if necessary */
7805         if (!radeon_card_posted(rdev)) {
7806                 if (!rdev->bios) {
7807                         dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n");
7808                         return -EINVAL;
7809                 }
7810                 DRM_INFO("GPU not posted. posting now...\n");
7811                 atom_asic_init(rdev->mode_info.atom_context);
7812         }
7813         /* init golden registers */
7814         cik_init_golden_registers(rdev);
7815         /* Initialize scratch registers */
7816         cik_scratch_init(rdev);
7817         /* Initialize surface registers */
7818         radeon_surface_init(rdev);
7819         /* Initialize clocks */
7820         radeon_get_clock_info(rdev->ddev);
7821
7822         /* Fence driver */
7823         r = radeon_fence_driver_init(rdev);
7824         if (r)
7825                 return r;
7826
7827         /* initialize memory controller */
7828         r = cik_mc_init(rdev);
7829         if (r)
7830                 return r;
7831         /* Memory manager */
7832         r = radeon_bo_init(rdev);
7833         if (r)
7834                 return r;
7835
7836         ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
7837         ring->ring_obj = NULL;
7838         r600_ring_init(rdev, ring, 1024 * 1024);
7839
7840         ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
7841         ring->ring_obj = NULL;
7842         r600_ring_init(rdev, ring, 1024 * 1024);
7843         r = radeon_doorbell_get(rdev, &ring->doorbell_index);
7844         if (r)
7845                 return r;
7846
7847         ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
7848         ring->ring_obj = NULL;
7849         r600_ring_init(rdev, ring, 1024 * 1024);
7850         r = radeon_doorbell_get(rdev, &ring->doorbell_index);
7851         if (r)
7852                 return r;
7853
7854         ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX];
7855         ring->ring_obj = NULL;
7856         r600_ring_init(rdev, ring, 256 * 1024);
7857
7858         ring = &rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX];
7859         ring->ring_obj = NULL;
7860         r600_ring_init(rdev, ring, 256 * 1024);
7861
7862         r = radeon_uvd_init(rdev);
7863         if (!r) {
7864                 ring = &rdev->ring[R600_RING_TYPE_UVD_INDEX];
7865                 ring->ring_obj = NULL;
7866                 r600_ring_init(rdev, ring, 4096);
7867         }
7868
7869         rdev->ih.ring_obj = NULL;
7870         r600_ih_ring_init(rdev, 64 * 1024);
7871
7872         r = r600_pcie_gart_init(rdev);
7873         if (r)
7874                 return r;
7875
7876         rdev->accel_working = true;
7877         r = cik_startup(rdev);
7878         if (r) {
7879                 dev_err(rdev->dev, "disabling GPU acceleration\n");
7880                 cik_cp_fini(rdev);
7881                 cik_sdma_fini(rdev);
7882                 cik_irq_fini(rdev);
7883                 sumo_rlc_fini(rdev);
7884                 cik_mec_fini(rdev);
7885                 radeon_wb_fini(rdev);
7886                 radeon_ib_pool_fini(rdev);
7887                 radeon_vm_manager_fini(rdev);
7888                 radeon_irq_kms_fini(rdev);
7889                 cik_pcie_gart_fini(rdev);
7890                 rdev->accel_working = false;
7891         }
7892
7893         /* Don't start up if the MC ucode is missing.
7894          * The default clocks and voltages before the MC ucode
7895          * is loaded are not suffient for advanced operations.
7896          */
7897         if (!rdev->mc_fw && !(rdev->flags & RADEON_IS_IGP)) {
7898                 DRM_ERROR("radeon: MC ucode required for NI+.\n");
7899                 return -EINVAL;
7900         }
7901
7902         return 0;
7903 }
7904
7905 /**
7906  * cik_fini - asic specific driver and hw fini
7907  *
7908  * @rdev: radeon_device pointer
7909  *
7910  * Tear down the asic specific driver variables and program the hw
7911  * to an idle state (CIK).
7912  * Called at driver unload.
7913  */
7914 void cik_fini(struct radeon_device *rdev)
7915 {
7916         cik_cp_fini(rdev);
7917         cik_sdma_fini(rdev);
7918         cik_fini_pg(rdev);
7919         cik_fini_cg(rdev);
7920         cik_irq_fini(rdev);
7921         sumo_rlc_fini(rdev);
7922         cik_mec_fini(rdev);
7923         radeon_wb_fini(rdev);
7924         radeon_vm_manager_fini(rdev);
7925         radeon_ib_pool_fini(rdev);
7926         radeon_irq_kms_fini(rdev);
7927         uvd_v1_0_fini(rdev);
7928         radeon_uvd_fini(rdev);
7929         cik_pcie_gart_fini(rdev);
7930         r600_vram_scratch_fini(rdev);
7931         radeon_gem_fini(rdev);
7932         radeon_fence_driver_fini(rdev);
7933         radeon_bo_fini(rdev);
7934         radeon_atombios_fini(rdev);
7935         kfree(rdev->bios);
7936         rdev->bios = NULL;
7937 }
7938
7939 void dce8_program_fmt(struct drm_encoder *encoder)
7940 {
7941         struct drm_device *dev = encoder->dev;
7942         struct radeon_device *rdev = dev->dev_private;
7943         struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
7944         struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc);
7945         struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
7946         int bpc = 0;
7947         u32 tmp = 0;
7948         enum radeon_connector_dither dither = RADEON_FMT_DITHER_DISABLE;
7949
7950         if (connector) {
7951                 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
7952                 bpc = radeon_get_monitor_bpc(connector);
7953                 dither = radeon_connector->dither;
7954         }
7955
7956         /* LVDS/eDP FMT is set up by atom */
7957         if (radeon_encoder->devices & ATOM_DEVICE_LCD_SUPPORT)
7958                 return;
7959
7960         /* not needed for analog */
7961         if ((radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1) ||
7962             (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2))
7963                 return;
7964
7965         if (bpc == 0)
7966                 return;
7967
7968         switch (bpc) {
7969         case 6:
7970                 if (dither == RADEON_FMT_DITHER_ENABLE)
7971                         /* XXX sort out optimal dither settings */
7972                         tmp |= (FMT_FRAME_RANDOM_ENABLE | FMT_HIGHPASS_RANDOM_ENABLE |
7973                                 FMT_SPATIAL_DITHER_EN | FMT_SPATIAL_DITHER_DEPTH(0));
7974                 else
7975                         tmp |= (FMT_TRUNCATE_EN | FMT_TRUNCATE_DEPTH(0));
7976                 break;
7977         case 8:
7978                 if (dither == RADEON_FMT_DITHER_ENABLE)
7979                         /* XXX sort out optimal dither settings */
7980                         tmp |= (FMT_FRAME_RANDOM_ENABLE | FMT_HIGHPASS_RANDOM_ENABLE |
7981                                 FMT_RGB_RANDOM_ENABLE |
7982                                 FMT_SPATIAL_DITHER_EN | FMT_SPATIAL_DITHER_DEPTH(1));
7983                 else
7984                         tmp |= (FMT_TRUNCATE_EN | FMT_TRUNCATE_DEPTH(1));
7985                 break;
7986         case 10:
7987                 if (dither == RADEON_FMT_DITHER_ENABLE)
7988                         /* XXX sort out optimal dither settings */
7989                         tmp |= (FMT_FRAME_RANDOM_ENABLE | FMT_HIGHPASS_RANDOM_ENABLE |
7990                                 FMT_RGB_RANDOM_ENABLE |
7991                                 FMT_SPATIAL_DITHER_EN | FMT_SPATIAL_DITHER_DEPTH(2));
7992                 else
7993                         tmp |= (FMT_TRUNCATE_EN | FMT_TRUNCATE_DEPTH(2));
7994                 break;
7995         default:
7996                 /* not needed */
7997                 break;
7998         }
7999
8000         WREG32(FMT_BIT_DEPTH_CONTROL + radeon_crtc->crtc_offset, tmp);
8001 }
8002
8003 /* display watermark setup */
8004 /**
8005  * dce8_line_buffer_adjust - Set up the line buffer
8006  *
8007  * @rdev: radeon_device pointer
8008  * @radeon_crtc: the selected display controller
8009  * @mode: the current display mode on the selected display
8010  * controller
8011  *
8012  * Setup up the line buffer allocation for
8013  * the selected display controller (CIK).
8014  * Returns the line buffer size in pixels.
8015  */
8016 static u32 dce8_line_buffer_adjust(struct radeon_device *rdev,
8017                                    struct radeon_crtc *radeon_crtc,
8018                                    struct drm_display_mode *mode)
8019 {
8020         u32 tmp, buffer_alloc, i;
8021         u32 pipe_offset = radeon_crtc->crtc_id * 0x20;
8022         /*
8023          * Line Buffer Setup
8024          * There are 6 line buffers, one for each display controllers.
8025          * There are 3 partitions per LB. Select the number of partitions
8026          * to enable based on the display width.  For display widths larger
8027          * than 4096, you need use to use 2 display controllers and combine
8028          * them using the stereo blender.
8029          */
8030         if (radeon_crtc->base.enabled && mode) {
8031                 if (mode->crtc_hdisplay < 1920) {
8032                         tmp = 1;
8033                         buffer_alloc = 2;
8034                 } else if (mode->crtc_hdisplay < 2560) {
8035                         tmp = 2;
8036                         buffer_alloc = 2;
8037                 } else if (mode->crtc_hdisplay < 4096) {
8038                         tmp = 0;
8039                         buffer_alloc = (rdev->flags & RADEON_IS_IGP) ? 2 : 4;
8040                 } else {
8041                         DRM_DEBUG_KMS("Mode too big for LB!\n");
8042                         tmp = 0;
8043                         buffer_alloc = (rdev->flags & RADEON_IS_IGP) ? 2 : 4;
8044                 }
8045         } else {
8046                 tmp = 1;
8047                 buffer_alloc = 0;
8048         }
8049
8050         WREG32(LB_MEMORY_CTRL + radeon_crtc->crtc_offset,
8051                LB_MEMORY_CONFIG(tmp) | LB_MEMORY_SIZE(0x6B0));
8052
8053         WREG32(PIPE0_DMIF_BUFFER_CONTROL + pipe_offset,
8054                DMIF_BUFFERS_ALLOCATED(buffer_alloc));
8055         for (i = 0; i < rdev->usec_timeout; i++) {
8056                 if (RREG32(PIPE0_DMIF_BUFFER_CONTROL + pipe_offset) &
8057                     DMIF_BUFFERS_ALLOCATED_COMPLETED)
8058                         break;
8059                 udelay(1);
8060         }
8061
8062         if (radeon_crtc->base.enabled && mode) {
8063                 switch (tmp) {
8064                 case 0:
8065                 default:
8066                         return 4096 * 2;
8067                 case 1:
8068                         return 1920 * 2;
8069                 case 2:
8070                         return 2560 * 2;
8071                 }
8072         }
8073
8074         /* controller not enabled, so no lb used */
8075         return 0;
8076 }
8077
8078 /**
8079  * cik_get_number_of_dram_channels - get the number of dram channels
8080  *
8081  * @rdev: radeon_device pointer
8082  *
8083  * Look up the number of video ram channels (CIK).
8084  * Used for display watermark bandwidth calculations
8085  * Returns the number of dram channels
8086  */
8087 static u32 cik_get_number_of_dram_channels(struct radeon_device *rdev)
8088 {
8089         u32 tmp = RREG32(MC_SHARED_CHMAP);
8090
8091         switch ((tmp & NOOFCHAN_MASK) >> NOOFCHAN_SHIFT) {
8092         case 0:
8093         default:
8094                 return 1;
8095         case 1:
8096                 return 2;
8097         case 2:
8098                 return 4;
8099         case 3:
8100                 return 8;
8101         case 4:
8102                 return 3;
8103         case 5:
8104                 return 6;
8105         case 6:
8106                 return 10;
8107         case 7:
8108                 return 12;
8109         case 8:
8110                 return 16;
8111         }
8112 }
8113
8114 struct dce8_wm_params {
8115         u32 dram_channels; /* number of dram channels */
8116         u32 yclk;          /* bandwidth per dram data pin in kHz */
8117         u32 sclk;          /* engine clock in kHz */
8118         u32 disp_clk;      /* display clock in kHz */
8119         u32 src_width;     /* viewport width */
8120         u32 active_time;   /* active display time in ns */
8121         u32 blank_time;    /* blank time in ns */
8122         bool interlaced;    /* mode is interlaced */
8123         fixed20_12 vsc;    /* vertical scale ratio */
8124         u32 num_heads;     /* number of active crtcs */
8125         u32 bytes_per_pixel; /* bytes per pixel display + overlay */
8126         u32 lb_size;       /* line buffer allocated to pipe */
8127         u32 vtaps;         /* vertical scaler taps */
8128 };
8129
8130 /**
8131  * dce8_dram_bandwidth - get the dram bandwidth
8132  *
8133  * @wm: watermark calculation data
8134  *
8135  * Calculate the raw dram bandwidth (CIK).
8136  * Used for display watermark bandwidth calculations
8137  * Returns the dram bandwidth in MBytes/s
8138  */
8139 static u32 dce8_dram_bandwidth(struct dce8_wm_params *wm)
8140 {
8141         /* Calculate raw DRAM Bandwidth */
8142         fixed20_12 dram_efficiency; /* 0.7 */
8143         fixed20_12 yclk, dram_channels, bandwidth;
8144         fixed20_12 a;
8145
8146         a.full = dfixed_const(1000);
8147         yclk.full = dfixed_const(wm->yclk);
8148         yclk.full = dfixed_div(yclk, a);
8149         dram_channels.full = dfixed_const(wm->dram_channels * 4);
8150         a.full = dfixed_const(10);
8151         dram_efficiency.full = dfixed_const(7);
8152         dram_efficiency.full = dfixed_div(dram_efficiency, a);
8153         bandwidth.full = dfixed_mul(dram_channels, yclk);
8154         bandwidth.full = dfixed_mul(bandwidth, dram_efficiency);
8155
8156         return dfixed_trunc(bandwidth);
8157 }
8158
8159 /**
8160  * dce8_dram_bandwidth_for_display - get the dram bandwidth for display
8161  *
8162  * @wm: watermark calculation data
8163  *
8164  * Calculate the dram bandwidth used for display (CIK).
8165  * Used for display watermark bandwidth calculations
8166  * Returns the dram bandwidth for display in MBytes/s
8167  */
8168 static u32 dce8_dram_bandwidth_for_display(struct dce8_wm_params *wm)
8169 {
8170         /* Calculate DRAM Bandwidth and the part allocated to display. */
8171         fixed20_12 disp_dram_allocation; /* 0.3 to 0.7 */
8172         fixed20_12 yclk, dram_channels, bandwidth;
8173         fixed20_12 a;
8174
8175         a.full = dfixed_const(1000);
8176         yclk.full = dfixed_const(wm->yclk);
8177         yclk.full = dfixed_div(yclk, a);
8178         dram_channels.full = dfixed_const(wm->dram_channels * 4);
8179         a.full = dfixed_const(10);
8180         disp_dram_allocation.full = dfixed_const(3); /* XXX worse case value 0.3 */
8181         disp_dram_allocation.full = dfixed_div(disp_dram_allocation, a);
8182         bandwidth.full = dfixed_mul(dram_channels, yclk);
8183         bandwidth.full = dfixed_mul(bandwidth, disp_dram_allocation);
8184
8185         return dfixed_trunc(bandwidth);
8186 }
8187
8188 /**
8189  * dce8_data_return_bandwidth - get the data return bandwidth
8190  *
8191  * @wm: watermark calculation data
8192  *
8193  * Calculate the data return bandwidth used for display (CIK).
8194  * Used for display watermark bandwidth calculations
8195  * Returns the data return bandwidth in MBytes/s
8196  */
8197 static u32 dce8_data_return_bandwidth(struct dce8_wm_params *wm)
8198 {
8199         /* Calculate the display Data return Bandwidth */
8200         fixed20_12 return_efficiency; /* 0.8 */
8201         fixed20_12 sclk, bandwidth;
8202         fixed20_12 a;
8203
8204         a.full = dfixed_const(1000);
8205         sclk.full = dfixed_const(wm->sclk);
8206         sclk.full = dfixed_div(sclk, a);
8207         a.full = dfixed_const(10);
8208         return_efficiency.full = dfixed_const(8);
8209         return_efficiency.full = dfixed_div(return_efficiency, a);
8210         a.full = dfixed_const(32);
8211         bandwidth.full = dfixed_mul(a, sclk);
8212         bandwidth.full = dfixed_mul(bandwidth, return_efficiency);
8213
8214         return dfixed_trunc(bandwidth);
8215 }
8216
8217 /**
8218  * dce8_dmif_request_bandwidth - get the dmif bandwidth
8219  *
8220  * @wm: watermark calculation data
8221  *
8222  * Calculate the dmif bandwidth used for display (CIK).
8223  * Used for display watermark bandwidth calculations
8224  * Returns the dmif bandwidth in MBytes/s
8225  */
8226 static u32 dce8_dmif_request_bandwidth(struct dce8_wm_params *wm)
8227 {
8228         /* Calculate the DMIF Request Bandwidth */
8229         fixed20_12 disp_clk_request_efficiency; /* 0.8 */
8230         fixed20_12 disp_clk, bandwidth;
8231         fixed20_12 a, b;
8232
8233         a.full = dfixed_const(1000);
8234         disp_clk.full = dfixed_const(wm->disp_clk);
8235         disp_clk.full = dfixed_div(disp_clk, a);
8236         a.full = dfixed_const(32);
8237         b.full = dfixed_mul(a, disp_clk);
8238
8239         a.full = dfixed_const(10);
8240         disp_clk_request_efficiency.full = dfixed_const(8);
8241         disp_clk_request_efficiency.full = dfixed_div(disp_clk_request_efficiency, a);
8242
8243         bandwidth.full = dfixed_mul(b, disp_clk_request_efficiency);
8244
8245         return dfixed_trunc(bandwidth);
8246 }
8247
8248 /**
8249  * dce8_available_bandwidth - get the min available bandwidth
8250  *
8251  * @wm: watermark calculation data
8252  *
8253  * Calculate the min available bandwidth used for display (CIK).
8254  * Used for display watermark bandwidth calculations
8255  * Returns the min available bandwidth in MBytes/s
8256  */
8257 static u32 dce8_available_bandwidth(struct dce8_wm_params *wm)
8258 {
8259         /* Calculate the Available bandwidth. Display can use this temporarily but not in average. */
8260         u32 dram_bandwidth = dce8_dram_bandwidth(wm);
8261         u32 data_return_bandwidth = dce8_data_return_bandwidth(wm);
8262         u32 dmif_req_bandwidth = dce8_dmif_request_bandwidth(wm);
8263
8264         return min(dram_bandwidth, min(data_return_bandwidth, dmif_req_bandwidth));
8265 }
8266
8267 /**
8268  * dce8_average_bandwidth - get the average available bandwidth
8269  *
8270  * @wm: watermark calculation data
8271  *
8272  * Calculate the average available bandwidth used for display (CIK).
8273  * Used for display watermark bandwidth calculations
8274  * Returns the average available bandwidth in MBytes/s
8275  */
8276 static u32 dce8_average_bandwidth(struct dce8_wm_params *wm)
8277 {
8278         /* Calculate the display mode Average Bandwidth
8279          * DisplayMode should contain the source and destination dimensions,
8280          * timing, etc.
8281          */
8282         fixed20_12 bpp;
8283         fixed20_12 line_time;
8284         fixed20_12 src_width;
8285         fixed20_12 bandwidth;
8286         fixed20_12 a;
8287
8288         a.full = dfixed_const(1000);
8289         line_time.full = dfixed_const(wm->active_time + wm->blank_time);
8290         line_time.full = dfixed_div(line_time, a);
8291         bpp.full = dfixed_const(wm->bytes_per_pixel);
8292         src_width.full = dfixed_const(wm->src_width);
8293         bandwidth.full = dfixed_mul(src_width, bpp);
8294         bandwidth.full = dfixed_mul(bandwidth, wm->vsc);
8295         bandwidth.full = dfixed_div(bandwidth, line_time);
8296
8297         return dfixed_trunc(bandwidth);
8298 }
8299
8300 /**
8301  * dce8_latency_watermark - get the latency watermark
8302  *
8303  * @wm: watermark calculation data
8304  *
8305  * Calculate the latency watermark (CIK).
8306  * Used for display watermark bandwidth calculations
8307  * Returns the latency watermark in ns
8308  */
8309 static u32 dce8_latency_watermark(struct dce8_wm_params *wm)
8310 {
8311         /* First calculate the latency in ns */
8312         u32 mc_latency = 2000; /* 2000 ns. */
8313         u32 available_bandwidth = dce8_available_bandwidth(wm);
8314         u32 worst_chunk_return_time = (512 * 8 * 1000) / available_bandwidth;
8315         u32 cursor_line_pair_return_time = (128 * 4 * 1000) / available_bandwidth;
8316         u32 dc_latency = 40000000 / wm->disp_clk; /* dc pipe latency */
8317         u32 other_heads_data_return_time = ((wm->num_heads + 1) * worst_chunk_return_time) +
8318                 (wm->num_heads * cursor_line_pair_return_time);
8319         u32 latency = mc_latency + other_heads_data_return_time + dc_latency;
8320         u32 max_src_lines_per_dst_line, lb_fill_bw, line_fill_time;
8321         u32 tmp, dmif_size = 12288;
8322         fixed20_12 a, b, c;
8323
8324         if (wm->num_heads == 0)
8325                 return 0;
8326
8327         a.full = dfixed_const(2);
8328         b.full = dfixed_const(1);
8329         if ((wm->vsc.full > a.full) ||
8330             ((wm->vsc.full > b.full) && (wm->vtaps >= 3)) ||
8331             (wm->vtaps >= 5) ||
8332             ((wm->vsc.full >= a.full) && wm->interlaced))
8333                 max_src_lines_per_dst_line = 4;
8334         else
8335                 max_src_lines_per_dst_line = 2;
8336
8337         a.full = dfixed_const(available_bandwidth);
8338         b.full = dfixed_const(wm->num_heads);
8339         a.full = dfixed_div(a, b);
8340
8341         b.full = dfixed_const(mc_latency + 512);
8342         c.full = dfixed_const(wm->disp_clk);
8343         b.full = dfixed_div(b, c);
8344
8345         c.full = dfixed_const(dmif_size);
8346         b.full = dfixed_div(c, b);
8347
8348         tmp = min(dfixed_trunc(a), dfixed_trunc(b));
8349
8350         b.full = dfixed_const(1000);
8351         c.full = dfixed_const(wm->disp_clk);
8352         b.full = dfixed_div(c, b);
8353         c.full = dfixed_const(wm->bytes_per_pixel);
8354         b.full = dfixed_mul(b, c);
8355
8356         lb_fill_bw = min(tmp, dfixed_trunc(b));
8357
8358         a.full = dfixed_const(max_src_lines_per_dst_line * wm->src_width * wm->bytes_per_pixel);
8359         b.full = dfixed_const(1000);
8360         c.full = dfixed_const(lb_fill_bw);
8361         b.full = dfixed_div(c, b);
8362         a.full = dfixed_div(a, b);
8363         line_fill_time = dfixed_trunc(a);
8364
8365         if (line_fill_time < wm->active_time)
8366                 return latency;
8367         else
8368                 return latency + (line_fill_time - wm->active_time);
8369
8370 }
8371
8372 /**
8373  * dce8_average_bandwidth_vs_dram_bandwidth_for_display - check
8374  * average and available dram bandwidth
8375  *
8376  * @wm: watermark calculation data
8377  *
8378  * Check if the display average bandwidth fits in the display
8379  * dram bandwidth (CIK).
8380  * Used for display watermark bandwidth calculations
8381  * Returns true if the display fits, false if not.
8382  */
8383 static bool dce8_average_bandwidth_vs_dram_bandwidth_for_display(struct dce8_wm_params *wm)
8384 {
8385         if (dce8_average_bandwidth(wm) <=
8386             (dce8_dram_bandwidth_for_display(wm) / wm->num_heads))
8387                 return true;
8388         else
8389                 return false;
8390 }
8391
8392 /**
8393  * dce8_average_bandwidth_vs_available_bandwidth - check
8394  * average and available bandwidth
8395  *
8396  * @wm: watermark calculation data
8397  *
8398  * Check if the display average bandwidth fits in the display
8399  * available bandwidth (CIK).
8400  * Used for display watermark bandwidth calculations
8401  * Returns true if the display fits, false if not.
8402  */
8403 static bool dce8_average_bandwidth_vs_available_bandwidth(struct dce8_wm_params *wm)
8404 {
8405         if (dce8_average_bandwidth(wm) <=
8406             (dce8_available_bandwidth(wm) / wm->num_heads))
8407                 return true;
8408         else
8409                 return false;
8410 }
8411
8412 /**
8413  * dce8_check_latency_hiding - check latency hiding
8414  *
8415  * @wm: watermark calculation data
8416  *
8417  * Check latency hiding (CIK).
8418  * Used for display watermark bandwidth calculations
8419  * Returns true if the display fits, false if not.
8420  */
8421 static bool dce8_check_latency_hiding(struct dce8_wm_params *wm)
8422 {
8423         u32 lb_partitions = wm->lb_size / wm->src_width;
8424         u32 line_time = wm->active_time + wm->blank_time;
8425         u32 latency_tolerant_lines;
8426         u32 latency_hiding;
8427         fixed20_12 a;
8428
8429         a.full = dfixed_const(1);
8430         if (wm->vsc.full > a.full)
8431                 latency_tolerant_lines = 1;
8432         else {
8433                 if (lb_partitions <= (wm->vtaps + 1))
8434                         latency_tolerant_lines = 1;
8435                 else
8436                         latency_tolerant_lines = 2;
8437         }
8438
8439         latency_hiding = (latency_tolerant_lines * line_time + wm->blank_time);
8440
8441         if (dce8_latency_watermark(wm) <= latency_hiding)
8442                 return true;
8443         else
8444                 return false;
8445 }
8446
8447 /**
8448  * dce8_program_watermarks - program display watermarks
8449  *
8450  * @rdev: radeon_device pointer
8451  * @radeon_crtc: the selected display controller
8452  * @lb_size: line buffer size
8453  * @num_heads: number of display controllers in use
8454  *
8455  * Calculate and program the display watermarks for the
8456  * selected display controller (CIK).
8457  */
8458 static void dce8_program_watermarks(struct radeon_device *rdev,
8459                                     struct radeon_crtc *radeon_crtc,
8460                                     u32 lb_size, u32 num_heads)
8461 {
8462         struct drm_display_mode *mode = &radeon_crtc->base.mode;
8463         struct dce8_wm_params wm_low, wm_high;
8464         u32 pixel_period;
8465         u32 line_time = 0;
8466         u32 latency_watermark_a = 0, latency_watermark_b = 0;
8467         u32 tmp, wm_mask;
8468
8469         if (radeon_crtc->base.enabled && num_heads && mode) {
8470                 pixel_period = 1000000 / (u32)mode->clock;
8471                 line_time = min((u32)mode->crtc_htotal * pixel_period, (u32)65535);
8472
8473                 /* watermark for high clocks */
8474                 if ((rdev->pm.pm_method == PM_METHOD_DPM) &&
8475                     rdev->pm.dpm_enabled) {
8476                         wm_high.yclk =
8477                                 radeon_dpm_get_mclk(rdev, false) * 10;
8478                         wm_high.sclk =
8479                                 radeon_dpm_get_sclk(rdev, false) * 10;
8480                 } else {
8481                         wm_high.yclk = rdev->pm.current_mclk * 10;
8482                         wm_high.sclk = rdev->pm.current_sclk * 10;
8483                 }
8484
8485                 wm_high.disp_clk = mode->clock;
8486                 wm_high.src_width = mode->crtc_hdisplay;
8487                 wm_high.active_time = mode->crtc_hdisplay * pixel_period;
8488                 wm_high.blank_time = line_time - wm_high.active_time;
8489                 wm_high.interlaced = false;
8490                 if (mode->flags & DRM_MODE_FLAG_INTERLACE)
8491                         wm_high.interlaced = true;
8492                 wm_high.vsc = radeon_crtc->vsc;
8493                 wm_high.vtaps = 1;
8494                 if (radeon_crtc->rmx_type != RMX_OFF)
8495                         wm_high.vtaps = 2;
8496                 wm_high.bytes_per_pixel = 4; /* XXX: get this from fb config */
8497                 wm_high.lb_size = lb_size;
8498                 wm_high.dram_channels = cik_get_number_of_dram_channels(rdev);
8499                 wm_high.num_heads = num_heads;
8500
8501                 /* set for high clocks */
8502                 latency_watermark_a = min(dce8_latency_watermark(&wm_high), (u32)65535);
8503
8504                 /* possibly force display priority to high */
8505                 /* should really do this at mode validation time... */
8506                 if (!dce8_average_bandwidth_vs_dram_bandwidth_for_display(&wm_high) ||
8507                     !dce8_average_bandwidth_vs_available_bandwidth(&wm_high) ||
8508                     !dce8_check_latency_hiding(&wm_high) ||
8509                     (rdev->disp_priority == 2)) {
8510                         DRM_DEBUG_KMS("force priority to high\n");
8511                 }
8512
8513                 /* watermark for low clocks */
8514                 if ((rdev->pm.pm_method == PM_METHOD_DPM) &&
8515                     rdev->pm.dpm_enabled) {
8516                         wm_low.yclk =
8517                                 radeon_dpm_get_mclk(rdev, true) * 10;
8518                         wm_low.sclk =
8519                                 radeon_dpm_get_sclk(rdev, true) * 10;
8520                 } else {
8521                         wm_low.yclk = rdev->pm.current_mclk * 10;
8522                         wm_low.sclk = rdev->pm.current_sclk * 10;
8523                 }
8524
8525                 wm_low.disp_clk = mode->clock;
8526                 wm_low.src_width = mode->crtc_hdisplay;
8527                 wm_low.active_time = mode->crtc_hdisplay * pixel_period;
8528                 wm_low.blank_time = line_time - wm_low.active_time;
8529                 wm_low.interlaced = false;
8530                 if (mode->flags & DRM_MODE_FLAG_INTERLACE)
8531                         wm_low.interlaced = true;
8532                 wm_low.vsc = radeon_crtc->vsc;
8533                 wm_low.vtaps = 1;
8534                 if (radeon_crtc->rmx_type != RMX_OFF)
8535                         wm_low.vtaps = 2;
8536                 wm_low.bytes_per_pixel = 4; /* XXX: get this from fb config */
8537                 wm_low.lb_size = lb_size;
8538                 wm_low.dram_channels = cik_get_number_of_dram_channels(rdev);
8539                 wm_low.num_heads = num_heads;
8540
8541                 /* set for low clocks */
8542                 latency_watermark_b = min(dce8_latency_watermark(&wm_low), (u32)65535);
8543
8544                 /* possibly force display priority to high */
8545                 /* should really do this at mode validation time... */
8546                 if (!dce8_average_bandwidth_vs_dram_bandwidth_for_display(&wm_low) ||
8547                     !dce8_average_bandwidth_vs_available_bandwidth(&wm_low) ||
8548                     !dce8_check_latency_hiding(&wm_low) ||
8549                     (rdev->disp_priority == 2)) {
8550                         DRM_DEBUG_KMS("force priority to high\n");
8551                 }
8552         }
8553
8554         /* select wm A */
8555         wm_mask = RREG32(DPG_WATERMARK_MASK_CONTROL + radeon_crtc->crtc_offset);
8556         tmp = wm_mask;
8557         tmp &= ~LATENCY_WATERMARK_MASK(3);
8558         tmp |= LATENCY_WATERMARK_MASK(1);
8559         WREG32(DPG_WATERMARK_MASK_CONTROL + radeon_crtc->crtc_offset, tmp);
8560         WREG32(DPG_PIPE_LATENCY_CONTROL + radeon_crtc->crtc_offset,
8561                (LATENCY_LOW_WATERMARK(latency_watermark_a) |
8562                 LATENCY_HIGH_WATERMARK(line_time)));
8563         /* select wm B */
8564         tmp = RREG32(DPG_WATERMARK_MASK_CONTROL + radeon_crtc->crtc_offset);
8565         tmp &= ~LATENCY_WATERMARK_MASK(3);
8566         tmp |= LATENCY_WATERMARK_MASK(2);
8567         WREG32(DPG_WATERMARK_MASK_CONTROL + radeon_crtc->crtc_offset, tmp);
8568         WREG32(DPG_PIPE_LATENCY_CONTROL + radeon_crtc->crtc_offset,
8569                (LATENCY_LOW_WATERMARK(latency_watermark_b) |
8570                 LATENCY_HIGH_WATERMARK(line_time)));
8571         /* restore original selection */
8572         WREG32(DPG_WATERMARK_MASK_CONTROL + radeon_crtc->crtc_offset, wm_mask);
8573
8574         /* save values for DPM */
8575         radeon_crtc->line_time = line_time;
8576         radeon_crtc->wm_high = latency_watermark_a;
8577         radeon_crtc->wm_low = latency_watermark_b;
8578 }
8579
8580 /**
8581  * dce8_bandwidth_update - program display watermarks
8582  *
8583  * @rdev: radeon_device pointer
8584  *
8585  * Calculate and program the display watermarks and line
8586  * buffer allocation (CIK).
8587  */
8588 void dce8_bandwidth_update(struct radeon_device *rdev)
8589 {
8590         struct drm_display_mode *mode = NULL;
8591         u32 num_heads = 0, lb_size;
8592         int i;
8593
8594         radeon_update_display_priority(rdev);
8595
8596         for (i = 0; i < rdev->num_crtc; i++) {
8597                 if (rdev->mode_info.crtcs[i]->base.enabled)
8598                         num_heads++;
8599         }
8600         for (i = 0; i < rdev->num_crtc; i++) {
8601                 mode = &rdev->mode_info.crtcs[i]->base.mode;
8602                 lb_size = dce8_line_buffer_adjust(rdev, rdev->mode_info.crtcs[i], mode);
8603                 dce8_program_watermarks(rdev, rdev->mode_info.crtcs[i], lb_size, num_heads);
8604         }
8605 }
8606
8607 /**
8608  * cik_get_gpu_clock_counter - return GPU clock counter snapshot
8609  *
8610  * @rdev: radeon_device pointer
8611  *
8612  * Fetches a GPU clock counter snapshot (SI).
8613  * Returns the 64 bit clock counter snapshot.
8614  */
8615 uint64_t cik_get_gpu_clock_counter(struct radeon_device *rdev)
8616 {
8617         uint64_t clock;
8618
8619         mutex_lock(&rdev->gpu_clock_mutex);
8620         WREG32(RLC_CAPTURE_GPU_CLOCK_COUNT, 1);
8621         clock = (uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_LSB) |
8622                 ((uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_MSB) << 32ULL);
8623         mutex_unlock(&rdev->gpu_clock_mutex);
8624         return clock;
8625 }
8626
8627 static int cik_set_uvd_clock(struct radeon_device *rdev, u32 clock,
8628                               u32 cntl_reg, u32 status_reg)
8629 {
8630         int r, i;
8631         struct atom_clock_dividers dividers;
8632         uint32_t tmp;
8633
8634         r = radeon_atom_get_clock_dividers(rdev, COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK,
8635                                            clock, false, &dividers);
8636         if (r)
8637                 return r;
8638
8639         tmp = RREG32_SMC(cntl_reg);
8640         tmp &= ~(DCLK_DIR_CNTL_EN|DCLK_DIVIDER_MASK);
8641         tmp |= dividers.post_divider;
8642         WREG32_SMC(cntl_reg, tmp);
8643
8644         for (i = 0; i < 100; i++) {
8645                 if (RREG32_SMC(status_reg) & DCLK_STATUS)
8646                         break;
8647                 mdelay(10);
8648         }
8649         if (i == 100)
8650                 return -ETIMEDOUT;
8651
8652         return 0;
8653 }
8654
8655 int cik_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)
8656 {
8657         int r = 0;
8658
8659         r = cik_set_uvd_clock(rdev, vclk, CG_VCLK_CNTL, CG_VCLK_STATUS);
8660         if (r)
8661                 return r;
8662
8663         r = cik_set_uvd_clock(rdev, dclk, CG_DCLK_CNTL, CG_DCLK_STATUS);
8664         return r;
8665 }
8666
8667 static void cik_pcie_gen3_enable(struct radeon_device *rdev)
8668 {
8669         struct pci_dev *root = rdev->pdev->bus->self;
8670         int bridge_pos, gpu_pos;
8671         u32 speed_cntl, mask, current_data_rate;
8672         int ret, i;
8673         u16 tmp16;
8674
8675         if (radeon_pcie_gen2 == 0)
8676                 return;
8677
8678         if (rdev->flags & RADEON_IS_IGP)
8679                 return;
8680
8681         if (!(rdev->flags & RADEON_IS_PCIE))
8682                 return;
8683
8684         ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask);
8685         if (ret != 0)
8686                 return;
8687
8688         if (!(mask & (DRM_PCIE_SPEED_50 | DRM_PCIE_SPEED_80)))
8689                 return;
8690
8691         speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
8692         current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >>
8693                 LC_CURRENT_DATA_RATE_SHIFT;
8694         if (mask & DRM_PCIE_SPEED_80) {
8695                 if (current_data_rate == 2) {
8696                         DRM_INFO("PCIE gen 3 link speeds already enabled\n");
8697                         return;
8698                 }
8699                 DRM_INFO("enabling PCIE gen 3 link speeds, disable with radeon.pcie_gen2=0\n");
8700         } else if (mask & DRM_PCIE_SPEED_50) {
8701                 if (current_data_rate == 1) {
8702                         DRM_INFO("PCIE gen 2 link speeds already enabled\n");
8703                         return;
8704                 }
8705                 DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n");
8706         }
8707
8708         bridge_pos = pci_pcie_cap(root);
8709         if (!bridge_pos)
8710                 return;
8711
8712         gpu_pos = pci_pcie_cap(rdev->pdev);
8713         if (!gpu_pos)
8714                 return;
8715
8716         if (mask & DRM_PCIE_SPEED_80) {
8717                 /* re-try equalization if gen3 is not already enabled */
8718                 if (current_data_rate != 2) {
8719                         u16 bridge_cfg, gpu_cfg;
8720                         u16 bridge_cfg2, gpu_cfg2;
8721                         u32 max_lw, current_lw, tmp;
8722
8723                         pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg);
8724                         pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg);
8725
8726                         tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD;
8727                         pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16);
8728
8729                         tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD;
8730                         pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16);
8731
8732                         tmp = RREG32_PCIE_PORT(PCIE_LC_STATUS1);
8733                         max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT;
8734                         current_lw = (tmp & LC_OPERATING_LINK_WIDTH_MASK) >> LC_OPERATING_LINK_WIDTH_SHIFT;
8735
8736                         if (current_lw < max_lw) {
8737                                 tmp = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL);
8738                                 if (tmp & LC_RENEGOTIATION_SUPPORT) {
8739                                         tmp &= ~(LC_LINK_WIDTH_MASK | LC_UPCONFIGURE_DIS);
8740                                         tmp |= (max_lw << LC_LINK_WIDTH_SHIFT);
8741                                         tmp |= LC_UPCONFIGURE_SUPPORT | LC_RENEGOTIATE_EN | LC_RECONFIG_NOW;
8742                                         WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, tmp);
8743                                 }
8744                         }
8745
8746                         for (i = 0; i < 10; i++) {
8747                                 /* check status */
8748                                 pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16);
8749                                 if (tmp16 & PCI_EXP_DEVSTA_TRPND)
8750                                         break;
8751
8752                                 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg);
8753                                 pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg);
8754
8755                                 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2);
8756                                 pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2);
8757
8758                                 tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
8759                                 tmp |= LC_SET_QUIESCE;
8760                                 WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
8761
8762                                 tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
8763                                 tmp |= LC_REDO_EQ;
8764                                 WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
8765
8766                                 mdelay(100);
8767
8768                                 /* linkctl */
8769                                 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16);
8770                                 tmp16 &= ~PCI_EXP_LNKCTL_HAWD;
8771                                 tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD);
8772                                 pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16);
8773
8774                                 pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16);
8775                                 tmp16 &= ~PCI_EXP_LNKCTL_HAWD;
8776                                 tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD);
8777                                 pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16);
8778
8779                                 /* linkctl2 */
8780                                 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16);
8781                                 tmp16 &= ~((1 << 4) | (7 << 9));
8782                                 tmp16 |= (bridge_cfg2 & ((1 << 4) | (7 << 9)));
8783                                 pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16);
8784
8785                                 pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
8786                                 tmp16 &= ~((1 << 4) | (7 << 9));
8787                                 tmp16 |= (gpu_cfg2 & ((1 << 4) | (7 << 9)));
8788                                 pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16);
8789
8790                                 tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
8791                                 tmp &= ~LC_SET_QUIESCE;
8792                                 WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
8793                         }
8794                 }
8795         }
8796
8797         /* set the link speed */
8798         speed_cntl |= LC_FORCE_EN_SW_SPEED_CHANGE | LC_FORCE_DIS_HW_SPEED_CHANGE;
8799         speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE;
8800         WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
8801
8802         pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
8803         tmp16 &= ~0xf;
8804         if (mask & DRM_PCIE_SPEED_80)
8805                 tmp16 |= 3; /* gen3 */
8806         else if (mask & DRM_PCIE_SPEED_50)
8807                 tmp16 |= 2; /* gen2 */
8808         else
8809                 tmp16 |= 1; /* gen1 */
8810         pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16);
8811
8812         speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
8813         speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE;
8814         WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
8815
8816         for (i = 0; i < rdev->usec_timeout; i++) {
8817                 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
8818                 if ((speed_cntl & LC_INITIATE_LINK_SPEED_CHANGE) == 0)
8819                         break;
8820                 udelay(1);
8821         }
8822 }
8823
8824 static void cik_program_aspm(struct radeon_device *rdev)
8825 {
8826         u32 data, orig;
8827         bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false;
8828         bool disable_clkreq = false;
8829
8830         if (radeon_aspm == 0)
8831                 return;
8832
8833         /* XXX double check IGPs */
8834         if (rdev->flags & RADEON_IS_IGP)
8835                 return;
8836
8837         if (!(rdev->flags & RADEON_IS_PCIE))
8838                 return;
8839
8840         orig = data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL);
8841         data &= ~LC_XMIT_N_FTS_MASK;
8842         data |= LC_XMIT_N_FTS(0x24) | LC_XMIT_N_FTS_OVERRIDE_EN;
8843         if (orig != data)
8844                 WREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL, data);
8845
8846         orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL3);
8847         data |= LC_GO_TO_RECOVERY;
8848         if (orig != data)
8849                 WREG32_PCIE_PORT(PCIE_LC_CNTL3, data);
8850
8851         orig = data = RREG32_PCIE_PORT(PCIE_P_CNTL);
8852         data |= P_IGNORE_EDB_ERR;
8853         if (orig != data)
8854                 WREG32_PCIE_PORT(PCIE_P_CNTL, data);
8855
8856         orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL);
8857         data &= ~(LC_L0S_INACTIVITY_MASK | LC_L1_INACTIVITY_MASK);
8858         data |= LC_PMI_TO_L1_DIS;
8859         if (!disable_l0s)
8860                 data |= LC_L0S_INACTIVITY(7);
8861
8862         if (!disable_l1) {
8863                 data |= LC_L1_INACTIVITY(7);
8864                 data &= ~LC_PMI_TO_L1_DIS;
8865                 if (orig != data)
8866                         WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
8867
8868                 if (!disable_plloff_in_l1) {
8869                         bool clk_req_support;
8870
8871                         orig = data = RREG32_PCIE_PORT(PB0_PIF_PWRDOWN_0);
8872                         data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK);
8873                         data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7);
8874                         if (orig != data)
8875                                 WREG32_PCIE_PORT(PB0_PIF_PWRDOWN_0, data);
8876
8877                         orig = data = RREG32_PCIE_PORT(PB0_PIF_PWRDOWN_1);
8878                         data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK);
8879                         data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7);
8880                         if (orig != data)
8881                                 WREG32_PCIE_PORT(PB0_PIF_PWRDOWN_1, data);
8882
8883                         orig = data = RREG32_PCIE_PORT(PB1_PIF_PWRDOWN_0);
8884                         data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK);
8885                         data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7);
8886                         if (orig != data)
8887                                 WREG32_PCIE_PORT(PB1_PIF_PWRDOWN_0, data);
8888
8889                         orig = data = RREG32_PCIE_PORT(PB1_PIF_PWRDOWN_1);
8890                         data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK);
8891                         data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7);
8892                         if (orig != data)
8893                                 WREG32_PCIE_PORT(PB1_PIF_PWRDOWN_1, data);
8894
8895                         orig = data = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL);
8896                         data &= ~LC_DYN_LANES_PWR_STATE_MASK;
8897                         data |= LC_DYN_LANES_PWR_STATE(3);
8898                         if (orig != data)
8899                                 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, data);
8900
8901                         if (!disable_clkreq) {
8902                                 struct pci_dev *root = rdev->pdev->bus->self;
8903                                 u32 lnkcap;
8904
8905                                 clk_req_support = false;
8906                                 pcie_capability_read_dword(root, PCI_EXP_LNKCAP, &lnkcap);
8907                                 if (lnkcap & PCI_EXP_LNKCAP_CLKPM)
8908                                         clk_req_support = true;
8909                         } else {
8910                                 clk_req_support = false;
8911                         }
8912
8913                         if (clk_req_support) {
8914                                 orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL2);
8915                                 data |= LC_ALLOW_PDWN_IN_L1 | LC_ALLOW_PDWN_IN_L23;
8916                                 if (orig != data)
8917                                         WREG32_PCIE_PORT(PCIE_LC_CNTL2, data);
8918
8919                                 orig = data = RREG32_SMC(THM_CLK_CNTL);
8920                                 data &= ~(CMON_CLK_SEL_MASK | TMON_CLK_SEL_MASK);
8921                                 data |= CMON_CLK_SEL(1) | TMON_CLK_SEL(1);
8922                                 if (orig != data)
8923                                         WREG32_SMC(THM_CLK_CNTL, data);
8924
8925                                 orig = data = RREG32_SMC(MISC_CLK_CTRL);
8926                                 data &= ~(DEEP_SLEEP_CLK_SEL_MASK | ZCLK_SEL_MASK);
8927                                 data |= DEEP_SLEEP_CLK_SEL(1) | ZCLK_SEL(1);
8928                                 if (orig != data)
8929                                         WREG32_SMC(MISC_CLK_CTRL, data);
8930
8931                                 orig = data = RREG32_SMC(CG_CLKPIN_CNTL);
8932                                 data &= ~BCLK_AS_XCLK;
8933                                 if (orig != data)
8934                                         WREG32_SMC(CG_CLKPIN_CNTL, data);
8935
8936                                 orig = data = RREG32_SMC(CG_CLKPIN_CNTL_2);
8937                                 data &= ~FORCE_BIF_REFCLK_EN;
8938                                 if (orig != data)
8939                                         WREG32_SMC(CG_CLKPIN_CNTL_2, data);
8940
8941                                 orig = data = RREG32_SMC(MPLL_BYPASSCLK_SEL);
8942                                 data &= ~MPLL_CLKOUT_SEL_MASK;
8943                                 data |= MPLL_CLKOUT_SEL(4);
8944                                 if (orig != data)
8945                                         WREG32_SMC(MPLL_BYPASSCLK_SEL, data);
8946                         }
8947                 }
8948         } else {
8949                 if (orig != data)
8950                         WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
8951         }
8952
8953         orig = data = RREG32_PCIE_PORT(PCIE_CNTL2);
8954         data |= SLV_MEM_LS_EN | MST_MEM_LS_EN | REPLAY_MEM_LS_EN;
8955         if (orig != data)
8956                 WREG32_PCIE_PORT(PCIE_CNTL2, data);
8957
8958         if (!disable_l0s) {
8959                 data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL);
8960                 if((data & LC_N_FTS_MASK) == LC_N_FTS_MASK) {
8961                         data = RREG32_PCIE_PORT(PCIE_LC_STATUS1);
8962                         if ((data & LC_REVERSE_XMIT) && (data & LC_REVERSE_RCVR)) {
8963                                 orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL);
8964                                 data &= ~LC_L0S_INACTIVITY_MASK;
8965                                 if (orig != data)
8966                                         WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
8967                         }
8968                 }
8969         }
8970 }