Subversion Repositories Kolibri OS

Rev

Rev 3764 | Rev 5179 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3764 Rev 5078
Line 20... Line 20...
20
 * OTHER DEALINGS IN THE SOFTWARE.
20
 * OTHER DEALINGS IN THE SOFTWARE.
21
 *
21
 *
22
 * Authors: Alex Deucher
22
 * Authors: Alex Deucher
23
 */
23
 */
24
#include 
24
#include 
25
//#include 
-
 
26
#include 
25
#include 
27
#include 
26
#include 
28
#include 
27
#include 
29
#include "radeon.h"
28
#include "radeon.h"
30
#include "radeon_asic.h"
29
#include "radeon_asic.h"
31
#include 
30
#include 
32
#include "sid.h"
31
#include "sid.h"
33
#include "atom.h"
32
#include "atom.h"
34
#include "si_blit_shaders.h"
33
#include "si_blit_shaders.h"
-
 
34
#include "clearstate_si.h"
-
 
35
#include "radeon_ucode.h"
Line 35... Line -...
35
 
-
 
36
#define SI_PFP_UCODE_SIZE 2144
-
 
37
#define SI_PM4_UCODE_SIZE 2144
-
 
38
#define SI_CE_UCODE_SIZE 2144
-
 
39
#define SI_RLC_UCODE_SIZE 2048
-
 
40
#define SI_MC_UCODE_SIZE 7769
-
 
Line 41... Line 36...
41
#define OLAND_MC_UCODE_SIZE 7863
36
 
42
 
37
 
43
MODULE_FIRMWARE("radeon/TAHITI_pfp.bin");
38
MODULE_FIRMWARE("radeon/TAHITI_pfp.bin");
44
MODULE_FIRMWARE("radeon/TAHITI_me.bin");
39
MODULE_FIRMWARE("radeon/TAHITI_me.bin");
-
 
40
MODULE_FIRMWARE("radeon/TAHITI_ce.bin");
45
MODULE_FIRMWARE("radeon/TAHITI_ce.bin");
41
MODULE_FIRMWARE("radeon/TAHITI_mc.bin");
-
 
42
MODULE_FIRMWARE("radeon/TAHITI_mc2.bin");
-
 
43
MODULE_FIRMWARE("radeon/TAHITI_rlc.bin");
-
 
44
MODULE_FIRMWARE("radeon/TAHITI_smc.bin");
-
 
45
 
-
 
46
MODULE_FIRMWARE("radeon/tahiti_pfp.bin");
-
 
47
MODULE_FIRMWARE("radeon/tahiti_me.bin");
-
 
48
MODULE_FIRMWARE("radeon/tahiti_ce.bin");
-
 
49
MODULE_FIRMWARE("radeon/tahiti_mc.bin");
-
 
50
MODULE_FIRMWARE("radeon/tahiti_rlc.bin");
46
MODULE_FIRMWARE("radeon/TAHITI_mc.bin");
51
MODULE_FIRMWARE("radeon/tahiti_smc.bin");
47
MODULE_FIRMWARE("radeon/TAHITI_rlc.bin");
52
 
48
MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin");
53
MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin");
49
MODULE_FIRMWARE("radeon/PITCAIRN_me.bin");
54
MODULE_FIRMWARE("radeon/PITCAIRN_me.bin");
-
 
55
MODULE_FIRMWARE("radeon/PITCAIRN_ce.bin");
50
MODULE_FIRMWARE("radeon/PITCAIRN_ce.bin");
56
MODULE_FIRMWARE("radeon/PITCAIRN_mc.bin");
-
 
57
MODULE_FIRMWARE("radeon/PITCAIRN_mc2.bin");
-
 
58
MODULE_FIRMWARE("radeon/PITCAIRN_rlc.bin");
-
 
59
MODULE_FIRMWARE("radeon/PITCAIRN_smc.bin");
-
 
60
 
-
 
61
MODULE_FIRMWARE("radeon/pitcairn_pfp.bin");
-
 
62
MODULE_FIRMWARE("radeon/pitcairn_me.bin");
-
 
63
MODULE_FIRMWARE("radeon/pitcairn_ce.bin");
-
 
64
MODULE_FIRMWARE("radeon/pitcairn_mc.bin");
-
 
65
MODULE_FIRMWARE("radeon/pitcairn_rlc.bin");
51
MODULE_FIRMWARE("radeon/PITCAIRN_mc.bin");
66
MODULE_FIRMWARE("radeon/pitcairn_smc.bin");
52
MODULE_FIRMWARE("radeon/PITCAIRN_rlc.bin");
67
 
53
MODULE_FIRMWARE("radeon/VERDE_pfp.bin");
68
MODULE_FIRMWARE("radeon/VERDE_pfp.bin");
54
MODULE_FIRMWARE("radeon/VERDE_me.bin");
69
MODULE_FIRMWARE("radeon/VERDE_me.bin");
-
 
70
MODULE_FIRMWARE("radeon/VERDE_ce.bin");
55
MODULE_FIRMWARE("radeon/VERDE_ce.bin");
71
MODULE_FIRMWARE("radeon/VERDE_mc.bin");
-
 
72
MODULE_FIRMWARE("radeon/VERDE_mc2.bin");
-
 
73
MODULE_FIRMWARE("radeon/VERDE_rlc.bin");
-
 
74
MODULE_FIRMWARE("radeon/VERDE_smc.bin");
-
 
75
 
-
 
76
MODULE_FIRMWARE("radeon/verde_pfp.bin");
-
 
77
MODULE_FIRMWARE("radeon/verde_me.bin");
-
 
78
MODULE_FIRMWARE("radeon/verde_ce.bin");
-
 
79
MODULE_FIRMWARE("radeon/verde_mc.bin");
-
 
80
MODULE_FIRMWARE("radeon/verde_rlc.bin");
56
MODULE_FIRMWARE("radeon/VERDE_mc.bin");
81
MODULE_FIRMWARE("radeon/verde_smc.bin");
57
MODULE_FIRMWARE("radeon/VERDE_rlc.bin");
82
 
58
MODULE_FIRMWARE("radeon/OLAND_pfp.bin");
83
MODULE_FIRMWARE("radeon/OLAND_pfp.bin");
59
MODULE_FIRMWARE("radeon/OLAND_me.bin");
84
MODULE_FIRMWARE("radeon/OLAND_me.bin");
-
 
85
MODULE_FIRMWARE("radeon/OLAND_ce.bin");
60
MODULE_FIRMWARE("radeon/OLAND_ce.bin");
86
MODULE_FIRMWARE("radeon/OLAND_mc.bin");
-
 
87
MODULE_FIRMWARE("radeon/OLAND_mc2.bin");
-
 
88
MODULE_FIRMWARE("radeon/OLAND_rlc.bin");
-
 
89
MODULE_FIRMWARE("radeon/OLAND_smc.bin");
-
 
90
 
-
 
91
MODULE_FIRMWARE("radeon/oland_pfp.bin");
-
 
92
MODULE_FIRMWARE("radeon/oland_me.bin");
-
 
93
MODULE_FIRMWARE("radeon/oland_ce.bin");
-
 
94
MODULE_FIRMWARE("radeon/oland_mc.bin");
-
 
95
MODULE_FIRMWARE("radeon/oland_rlc.bin");
61
MODULE_FIRMWARE("radeon/OLAND_mc.bin");
96
MODULE_FIRMWARE("radeon/oland_smc.bin");
62
MODULE_FIRMWARE("radeon/OLAND_rlc.bin");
97
 
63
MODULE_FIRMWARE("radeon/HAINAN_pfp.bin");
98
MODULE_FIRMWARE("radeon/HAINAN_pfp.bin");
64
MODULE_FIRMWARE("radeon/HAINAN_me.bin");
99
MODULE_FIRMWARE("radeon/HAINAN_me.bin");
-
 
100
MODULE_FIRMWARE("radeon/HAINAN_ce.bin");
65
MODULE_FIRMWARE("radeon/HAINAN_ce.bin");
101
MODULE_FIRMWARE("radeon/HAINAN_mc.bin");
-
 
102
MODULE_FIRMWARE("radeon/HAINAN_mc2.bin");
Line -... Line 103...
-
 
103
MODULE_FIRMWARE("radeon/HAINAN_rlc.bin");
-
 
104
MODULE_FIRMWARE("radeon/HAINAN_smc.bin");
-
 
105
 
-
 
106
MODULE_FIRMWARE("radeon/hainan_pfp.bin");
-
 
107
MODULE_FIRMWARE("radeon/hainan_me.bin");
-
 
108
MODULE_FIRMWARE("radeon/hainan_ce.bin");
-
 
109
MODULE_FIRMWARE("radeon/hainan_mc.bin");
-
 
110
MODULE_FIRMWARE("radeon/hainan_rlc.bin");
-
 
111
MODULE_FIRMWARE("radeon/hainan_smc.bin");
-
 
112
 
-
 
113
static u32 si_get_cu_active_bitmap(struct radeon_device *rdev, u32 se, u32 sh);
-
 
114
static void si_pcie_gen3_enable(struct radeon_device *rdev);
66
MODULE_FIRMWARE("radeon/HAINAN_mc.bin");
115
static void si_program_aspm(struct radeon_device *rdev);
67
MODULE_FIRMWARE("radeon/HAINAN_rlc.bin");
116
extern void sumo_rlc_fini(struct radeon_device *rdev);
68
 
117
extern int sumo_rlc_init(struct radeon_device *rdev);
69
extern int r600_ih_ring_alloc(struct radeon_device *rdev);
118
extern int r600_ih_ring_alloc(struct radeon_device *rdev);
70
extern void r600_ih_ring_fini(struct radeon_device *rdev);
119
extern void r600_ih_ring_fini(struct radeon_device *rdev);
71
extern void evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev);
120
extern void evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev);
72
extern void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save);
121
extern void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save);
73
extern void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save);
122
extern void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save);
-
 
123
extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev);
-
 
124
extern void evergreen_print_gpu_status_regs(struct radeon_device *rdev);
-
 
125
extern bool evergreen_is_display_hung(struct radeon_device *rdev);
-
 
126
static void si_enable_gui_idle_interrupt(struct radeon_device *rdev,
-
 
127
					 bool enable);
-
 
128
static void si_init_pg(struct radeon_device *rdev);
-
 
129
static void si_init_cg(struct radeon_device *rdev);
-
 
130
static void si_fini_pg(struct radeon_device *rdev);
-
 
131
static void si_fini_cg(struct radeon_device *rdev);
-
 
132
static void si_rlc_stop(struct radeon_device *rdev);
-
 
133
 
-
 
134
static const u32 verde_rlc_save_restore_register_list[] =
-
 
135
{
-
 
136
	(0x8000 << 16) | (0x98f4 >> 2),
-
 
137
	0x00000000,
-
 
138
	(0x8040 << 16) | (0x98f4 >> 2),
-
 
139
	0x00000000,
-
 
140
	(0x8000 << 16) | (0xe80 >> 2),
-
 
141
	0x00000000,
-
 
142
	(0x8040 << 16) | (0xe80 >> 2),
-
 
143
	0x00000000,
-
 
144
	(0x8000 << 16) | (0x89bc >> 2),
-
 
145
	0x00000000,
-
 
146
	(0x8040 << 16) | (0x89bc >> 2),
-
 
147
	0x00000000,
-
 
148
	(0x8000 << 16) | (0x8c1c >> 2),
-
 
149
	0x00000000,
-
 
150
	(0x8040 << 16) | (0x8c1c >> 2),
-
 
151
	0x00000000,
-
 
152
	(0x9c00 << 16) | (0x98f0 >> 2),
-
 
153
	0x00000000,
-
 
154
	(0x9c00 << 16) | (0xe7c >> 2),
-
 
155
	0x00000000,
-
 
156
	(0x8000 << 16) | (0x9148 >> 2),
-
 
157
	0x00000000,
-
 
158
	(0x8040 << 16) | (0x9148 >> 2),
-
 
159
	0x00000000,
-
 
160
	(0x9c00 << 16) | (0x9150 >> 2),
-
 
161
	0x00000000,
-
 
162
	(0x9c00 << 16) | (0x897c >> 2),
-
 
163
	0x00000000,
-
 
164
	(0x9c00 << 16) | (0x8d8c >> 2),
-
 
165
	0x00000000,
-
 
166
	(0x9c00 << 16) | (0xac54 >> 2),
-
 
167
	0X00000000,
-
 
168
	0x3,
-
 
169
	(0x9c00 << 16) | (0x98f8 >> 2),
-
 
170
	0x00000000,
-
 
171
	(0x9c00 << 16) | (0x9910 >> 2),
-
 
172
	0x00000000,
-
 
173
	(0x9c00 << 16) | (0x9914 >> 2),
-
 
174
	0x00000000,
-
 
175
	(0x9c00 << 16) | (0x9918 >> 2),
-
 
176
	0x00000000,
-
 
177
	(0x9c00 << 16) | (0x991c >> 2),
-
 
178
	0x00000000,
-
 
179
	(0x9c00 << 16) | (0x9920 >> 2),
-
 
180
	0x00000000,
-
 
181
	(0x9c00 << 16) | (0x9924 >> 2),
-
 
182
	0x00000000,
-
 
183
	(0x9c00 << 16) | (0x9928 >> 2),
-
 
184
	0x00000000,
-
 
185
	(0x9c00 << 16) | (0x992c >> 2),
-
 
186
	0x00000000,
-
 
187
	(0x9c00 << 16) | (0x9930 >> 2),
-
 
188
	0x00000000,
-
 
189
	(0x9c00 << 16) | (0x9934 >> 2),
-
 
190
	0x00000000,
-
 
191
	(0x9c00 << 16) | (0x9938 >> 2),
-
 
192
	0x00000000,
-
 
193
	(0x9c00 << 16) | (0x993c >> 2),
-
 
194
	0x00000000,
-
 
195
	(0x9c00 << 16) | (0x9940 >> 2),
-
 
196
	0x00000000,
-
 
197
	(0x9c00 << 16) | (0x9944 >> 2),
-
 
198
	0x00000000,
-
 
199
	(0x9c00 << 16) | (0x9948 >> 2),
-
 
200
	0x00000000,
-
 
201
	(0x9c00 << 16) | (0x994c >> 2),
-
 
202
	0x00000000,
-
 
203
	(0x9c00 << 16) | (0x9950 >> 2),
-
 
204
	0x00000000,
-
 
205
	(0x9c00 << 16) | (0x9954 >> 2),
-
 
206
	0x00000000,
-
 
207
	(0x9c00 << 16) | (0x9958 >> 2),
-
 
208
	0x00000000,
-
 
209
	(0x9c00 << 16) | (0x995c >> 2),
-
 
210
	0x00000000,
-
 
211
	(0x9c00 << 16) | (0x9960 >> 2),
-
 
212
	0x00000000,
-
 
213
	(0x9c00 << 16) | (0x9964 >> 2),
-
 
214
	0x00000000,
-
 
215
	(0x9c00 << 16) | (0x9968 >> 2),
-
 
216
	0x00000000,
-
 
217
	(0x9c00 << 16) | (0x996c >> 2),
-
 
218
	0x00000000,
-
 
219
	(0x9c00 << 16) | (0x9970 >> 2),
-
 
220
	0x00000000,
-
 
221
	(0x9c00 << 16) | (0x9974 >> 2),
-
 
222
	0x00000000,
-
 
223
	(0x9c00 << 16) | (0x9978 >> 2),
-
 
224
	0x00000000,
-
 
225
	(0x9c00 << 16) | (0x997c >> 2),
-
 
226
	0x00000000,
-
 
227
	(0x9c00 << 16) | (0x9980 >> 2),
-
 
228
	0x00000000,
-
 
229
	(0x9c00 << 16) | (0x9984 >> 2),
-
 
230
	0x00000000,
-
 
231
	(0x9c00 << 16) | (0x9988 >> 2),
-
 
232
	0x00000000,
-
 
233
	(0x9c00 << 16) | (0x998c >> 2),
-
 
234
	0x00000000,
-
 
235
	(0x9c00 << 16) | (0x8c00 >> 2),
-
 
236
	0x00000000,
-
 
237
	(0x9c00 << 16) | (0x8c14 >> 2),
-
 
238
	0x00000000,
-
 
239
	(0x9c00 << 16) | (0x8c04 >> 2),
-
 
240
	0x00000000,
-
 
241
	(0x9c00 << 16) | (0x8c08 >> 2),
-
 
242
	0x00000000,
-
 
243
	(0x8000 << 16) | (0x9b7c >> 2),
-
 
244
	0x00000000,
-
 
245
	(0x8040 << 16) | (0x9b7c >> 2),
-
 
246
	0x00000000,
-
 
247
	(0x8000 << 16) | (0xe84 >> 2),
-
 
248
	0x00000000,
-
 
249
	(0x8040 << 16) | (0xe84 >> 2),
-
 
250
	0x00000000,
-
 
251
	(0x8000 << 16) | (0x89c0 >> 2),
-
 
252
	0x00000000,
-
 
253
	(0x8040 << 16) | (0x89c0 >> 2),
-
 
254
	0x00000000,
-
 
255
	(0x8000 << 16) | (0x914c >> 2),
-
 
256
	0x00000000,
-
 
257
	(0x8040 << 16) | (0x914c >> 2),
-
 
258
	0x00000000,
-
 
259
	(0x8000 << 16) | (0x8c20 >> 2),
-
 
260
	0x00000000,
-
 
261
	(0x8040 << 16) | (0x8c20 >> 2),
-
 
262
	0x00000000,
-
 
263
	(0x8000 << 16) | (0x9354 >> 2),
-
 
264
	0x00000000,
-
 
265
	(0x8040 << 16) | (0x9354 >> 2),
-
 
266
	0x00000000,
-
 
267
	(0x9c00 << 16) | (0x9060 >> 2),
-
 
268
	0x00000000,
-
 
269
	(0x9c00 << 16) | (0x9364 >> 2),
-
 
270
	0x00000000,
-
 
271
	(0x9c00 << 16) | (0x9100 >> 2),
-
 
272
	0x00000000,
-
 
273
	(0x9c00 << 16) | (0x913c >> 2),
-
 
274
	0x00000000,
-
 
275
	(0x8000 << 16) | (0x90e0 >> 2),
-
 
276
	0x00000000,
-
 
277
	(0x8000 << 16) | (0x90e4 >> 2),
-
 
278
	0x00000000,
-
 
279
	(0x8000 << 16) | (0x90e8 >> 2),
-
 
280
	0x00000000,
-
 
281
	(0x8040 << 16) | (0x90e0 >> 2),
-
 
282
	0x00000000,
-
 
283
	(0x8040 << 16) | (0x90e4 >> 2),
-
 
284
	0x00000000,
-
 
285
	(0x8040 << 16) | (0x90e8 >> 2),
-
 
286
	0x00000000,
-
 
287
	(0x9c00 << 16) | (0x8bcc >> 2),
-
 
288
	0x00000000,
-
 
289
	(0x9c00 << 16) | (0x8b24 >> 2),
-
 
290
	0x00000000,
-
 
291
	(0x9c00 << 16) | (0x88c4 >> 2),
-
 
292
	0x00000000,
-
 
293
	(0x9c00 << 16) | (0x8e50 >> 2),
-
 
294
	0x00000000,
-
 
295
	(0x9c00 << 16) | (0x8c0c >> 2),
-
 
296
	0x00000000,
-
 
297
	(0x9c00 << 16) | (0x8e58 >> 2),
-
 
298
	0x00000000,
-
 
299
	(0x9c00 << 16) | (0x8e5c >> 2),
-
 
300
	0x00000000,
-
 
301
	(0x9c00 << 16) | (0x9508 >> 2),
-
 
302
	0x00000000,
-
 
303
	(0x9c00 << 16) | (0x950c >> 2),
-
 
304
	0x00000000,
-
 
305
	(0x9c00 << 16) | (0x9494 >> 2),
-
 
306
	0x00000000,
-
 
307
	(0x9c00 << 16) | (0xac0c >> 2),
-
 
308
	0x00000000,
-
 
309
	(0x9c00 << 16) | (0xac10 >> 2),
-
 
310
	0x00000000,
-
 
311
	(0x9c00 << 16) | (0xac14 >> 2),
-
 
312
	0x00000000,
-
 
313
	(0x9c00 << 16) | (0xae00 >> 2),
-
 
314
	0x00000000,
-
 
315
	(0x9c00 << 16) | (0xac08 >> 2),
-
 
316
	0x00000000,
-
 
317
	(0x9c00 << 16) | (0x88d4 >> 2),
-
 
318
	0x00000000,
-
 
319
	(0x9c00 << 16) | (0x88c8 >> 2),
-
 
320
	0x00000000,
-
 
321
	(0x9c00 << 16) | (0x88cc >> 2),
-
 
322
	0x00000000,
-
 
323
	(0x9c00 << 16) | (0x89b0 >> 2),
-
 
324
	0x00000000,
-
 
325
	(0x9c00 << 16) | (0x8b10 >> 2),
-
 
326
	0x00000000,
-
 
327
	(0x9c00 << 16) | (0x8a14 >> 2),
-
 
328
	0x00000000,
-
 
329
	(0x9c00 << 16) | (0x9830 >> 2),
-
 
330
	0x00000000,
-
 
331
	(0x9c00 << 16) | (0x9834 >> 2),
-
 
332
	0x00000000,
-
 
333
	(0x9c00 << 16) | (0x9838 >> 2),
-
 
334
	0x00000000,
-
 
335
	(0x9c00 << 16) | (0x9a10 >> 2),
-
 
336
	0x00000000,
-
 
337
	(0x8000 << 16) | (0x9870 >> 2),
-
 
338
	0x00000000,
-
 
339
	(0x8000 << 16) | (0x9874 >> 2),
-
 
340
	0x00000000,
-
 
341
	(0x8001 << 16) | (0x9870 >> 2),
-
 
342
	0x00000000,
-
 
343
	(0x8001 << 16) | (0x9874 >> 2),
-
 
344
	0x00000000,
-
 
345
	(0x8040 << 16) | (0x9870 >> 2),
-
 
346
	0x00000000,
-
 
347
	(0x8040 << 16) | (0x9874 >> 2),
-
 
348
	0x00000000,
-
 
349
	(0x8041 << 16) | (0x9870 >> 2),
-
 
350
	0x00000000,
-
 
351
	(0x8041 << 16) | (0x9874 >> 2),
Line 74... Line 352...
74
extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev);
352
	0x00000000,
75
extern void evergreen_print_gpu_status_regs(struct radeon_device *rdev);
353
	0x00000000
76
extern bool evergreen_is_display_hung(struct radeon_device *rdev);
354
};
77
 
355
 
Line 1227... Line 1505...
1227
	{0x0000009a, 0x00001000},
1505
	{0x0000009a, 0x00001000},
1228
	{0x0000009f, 0x00a07730}
1506
	{0x0000009f, 0x00a07730}
1229
};
1507
};
Line 1230... Line 1508...
1230
 
1508
 
1231
/* ucode loading */
1509
/* ucode loading */
1232
static int si_mc_load_microcode(struct radeon_device *rdev)
1510
int si_mc_load_microcode(struct radeon_device *rdev)
1233
{
1511
{
-
 
1512
	const __be32 *fw_data = NULL;
1234
	const __be32 *fw_data;
1513
	const __le32 *new_fw_data = NULL;
1235
	u32 running, blackout = 0;
1514
	u32 running, blackout = 0;
-
 
1515
	u32 *io_mc_regs = NULL;
1236
	u32 *io_mc_regs;
1516
	const __le32 *new_io_mc_regs = NULL;
Line 1237... Line 1517...
1237
	int i, ucode_size, regs_size;
1517
	int i, regs_size, ucode_size;
1238
 
1518
 
Line -... Line 1519...
-
 
1519
	if (!rdev->mc_fw)
-
 
1520
		return -EINVAL;
-
 
1521
 
-
 
1522
	if (rdev->new_fw) {
-
 
1523
		const struct mc_firmware_header_v1_0 *hdr =
-
 
1524
			(const struct mc_firmware_header_v1_0 *)rdev->mc_fw->data;
-
 
1525
 
-
 
1526
		radeon_ucode_print_mc_hdr(&hdr->header);
-
 
1527
		regs_size = le32_to_cpu(hdr->io_debug_size_bytes) / (4 * 2);
-
 
1528
		new_io_mc_regs = (const __le32 *)
-
 
1529
			(rdev->mc_fw->data + le32_to_cpu(hdr->io_debug_array_offset_bytes));
-
 
1530
		ucode_size = le32_to_cpu(hdr->header.ucode_size_bytes) / 4;
-
 
1531
		new_fw_data = (const __le32 *)
-
 
1532
			(rdev->mc_fw->data + le32_to_cpu(hdr->header.ucode_array_offset_bytes));
1239
	if (!rdev->mc_fw)
1533
	} else {
1240
		return -EINVAL;
1534
	ucode_size = rdev->mc_fw->size / 4;
1241
 
1535
 
1242
	switch (rdev->family) {
-
 
1243
	case CHIP_TAHITI:
1536
	switch (rdev->family) {
1244
		io_mc_regs = (u32 *)&tahiti_io_mc_regs;
1537
	case CHIP_TAHITI:
1245
		ucode_size = SI_MC_UCODE_SIZE;
1538
		io_mc_regs = (u32 *)&tahiti_io_mc_regs;
1246
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1539
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1247
		break;
-
 
1248
	case CHIP_PITCAIRN:
1540
		break;
1249
		io_mc_regs = (u32 *)&pitcairn_io_mc_regs;
1541
	case CHIP_PITCAIRN:
1250
		ucode_size = SI_MC_UCODE_SIZE;
1542
		io_mc_regs = (u32 *)&pitcairn_io_mc_regs;
1251
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1543
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1252
		break;
1544
		break;
1253
	case CHIP_VERDE:
-
 
1254
	default:
1545
	case CHIP_VERDE:
1255
		io_mc_regs = (u32 *)&verde_io_mc_regs;
1546
	default:
1256
		ucode_size = SI_MC_UCODE_SIZE;
1547
		io_mc_regs = (u32 *)&verde_io_mc_regs;
1257
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1548
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1258
		break;
-
 
1259
	case CHIP_OLAND:
1549
		break;
1260
		io_mc_regs = (u32 *)&oland_io_mc_regs;
1550
	case CHIP_OLAND:
1261
		ucode_size = OLAND_MC_UCODE_SIZE;
1551
		io_mc_regs = (u32 *)&oland_io_mc_regs;
1262
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1552
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1263
		break;
-
 
1264
	case CHIP_HAINAN:
1553
		break;
1265
		io_mc_regs = (u32 *)&hainan_io_mc_regs;
1554
	case CHIP_HAINAN:
1266
		ucode_size = OLAND_MC_UCODE_SIZE;
1555
		io_mc_regs = (u32 *)&hainan_io_mc_regs;
-
 
1556
		regs_size = TAHITI_IO_MC_REGS_SIZE;
-
 
1557
		break;
Line 1267... Line 1558...
1267
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1558
	}
Line 1268... Line 1559...
1268
		break;
1559
		fw_data = (const __be32 *)rdev->mc_fw->data;
1269
	}
1560
	}
Line 1280... Line 1571...
1280
		WREG32(MC_SEQ_SUP_CNTL, 0x00000008);
1571
		WREG32(MC_SEQ_SUP_CNTL, 0x00000008);
1281
		WREG32(MC_SEQ_SUP_CNTL, 0x00000010);
1572
		WREG32(MC_SEQ_SUP_CNTL, 0x00000010);
Line 1282... Line 1573...
1282
 
1573
 
1283
		/* load mc io regs */
1574
		/* load mc io regs */
-
 
1575
		for (i = 0; i < regs_size; i++) {
-
 
1576
			if (rdev->new_fw) {
-
 
1577
				WREG32(MC_SEQ_IO_DEBUG_INDEX, le32_to_cpup(new_io_mc_regs++));
-
 
1578
				WREG32(MC_SEQ_IO_DEBUG_DATA, le32_to_cpup(new_io_mc_regs++));
1284
		for (i = 0; i < regs_size; i++) {
1579
			} else {
1285
			WREG32(MC_SEQ_IO_DEBUG_INDEX, io_mc_regs[(i << 1)]);
1580
			WREG32(MC_SEQ_IO_DEBUG_INDEX, io_mc_regs[(i << 1)]);
1286
			WREG32(MC_SEQ_IO_DEBUG_DATA, io_mc_regs[(i << 1) + 1]);
1581
			WREG32(MC_SEQ_IO_DEBUG_DATA, io_mc_regs[(i << 1) + 1]);
-
 
1582
		}
1287
		}
1583
		}
1288
		/* load the MC ucode */
-
 
1289
		fw_data = (const __be32 *)rdev->mc_fw->data;
1584
		/* load the MC ucode */
-
 
1585
		for (i = 0; i < ucode_size; i++) {
-
 
1586
			if (rdev->new_fw)
-
 
1587
				WREG32(MC_SEQ_SUP_PGM, le32_to_cpup(new_fw_data++));
1290
		for (i = 0; i < ucode_size; i++)
1588
			else
-
 
1589
			WREG32(MC_SEQ_SUP_PGM, be32_to_cpup(fw_data++));
Line 1291... Line 1590...
1291
			WREG32(MC_SEQ_SUP_PGM, be32_to_cpup(fw_data++));
1590
		}
1292
 
1591
 
1293
		/* put the engine back into the active state */
1592
		/* put the engine back into the active state */
1294
		WREG32(MC_SEQ_SUP_CNTL, 0x00000008);
1593
		WREG32(MC_SEQ_SUP_CNTL, 0x00000008);
Line 1314... Line 1613...
1314
	return 0;
1613
	return 0;
1315
}
1614
}
Line 1316... Line 1615...
1316
 
1615
 
1317
static int si_init_microcode(struct radeon_device *rdev)
1616
static int si_init_microcode(struct radeon_device *rdev)
1318
{
-
 
1319
	struct platform_device *pdev;
1617
{
1320
	const char *chip_name;
1618
	const char *chip_name;
1321
	const char *rlc_chip_name;
1619
	const char *new_chip_name;
-
 
1620
	size_t pfp_req_size, me_req_size, ce_req_size, rlc_req_size, mc_req_size;
1322
	size_t pfp_req_size, me_req_size, ce_req_size, rlc_req_size, mc_req_size;
1621
	size_t smc_req_size, mc2_req_size;
1323
	char fw_name[30];
1622
	char fw_name[30];
-
 
1623
	int err;
Line 1324... Line 1624...
1324
	int err;
1624
	int new_fw = 0;
Line 1325... Line -...
1325
 
-
 
1326
	DRM_DEBUG("\n");
-
 
1327
 
-
 
1328
	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
-
 
1329
	err = IS_ERR(pdev);
-
 
1330
	if (err) {
-
 
1331
		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
-
 
1332
		return -EINVAL;
1625
 
1333
	}
1626
	DRM_DEBUG("\n");
1334
 
1627
 
1335
	switch (rdev->family) {
1628
	switch (rdev->family) {
1336
	case CHIP_TAHITI:
1629
	case CHIP_TAHITI:
1337
		chip_name = "TAHITI";
1630
		chip_name = "TAHITI";
1338
		rlc_chip_name = "TAHITI";
1631
		new_chip_name = "tahiti";
1339
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1632
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1340
		me_req_size = SI_PM4_UCODE_SIZE * 4;
1633
		me_req_size = SI_PM4_UCODE_SIZE * 4;
-
 
1634
		ce_req_size = SI_CE_UCODE_SIZE * 4;
-
 
1635
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1341
		ce_req_size = SI_CE_UCODE_SIZE * 4;
1636
		mc_req_size = SI_MC_UCODE_SIZE * 4;
1342
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1637
		mc2_req_size = TAHITI_MC_UCODE_SIZE * 4;
1343
		mc_req_size = SI_MC_UCODE_SIZE * 4;
1638
		smc_req_size = ALIGN(TAHITI_SMC_UCODE_SIZE, 4);
1344
		break;
1639
		break;
1345
	case CHIP_PITCAIRN:
1640
	case CHIP_PITCAIRN:
1346
		chip_name = "PITCAIRN";
1641
		chip_name = "PITCAIRN";
1347
		rlc_chip_name = "PITCAIRN";
1642
		new_chip_name = "pitcairn";
1348
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1643
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1349
		me_req_size = SI_PM4_UCODE_SIZE * 4;
1644
		me_req_size = SI_PM4_UCODE_SIZE * 4;
-
 
1645
		ce_req_size = SI_CE_UCODE_SIZE * 4;
-
 
1646
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1350
		ce_req_size = SI_CE_UCODE_SIZE * 4;
1647
		mc_req_size = SI_MC_UCODE_SIZE * 4;
1351
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1648
		mc2_req_size = PITCAIRN_MC_UCODE_SIZE * 4;
1352
		mc_req_size = SI_MC_UCODE_SIZE * 4;
1649
		smc_req_size = ALIGN(PITCAIRN_SMC_UCODE_SIZE, 4);
1353
		break;
1650
		break;
1354
	case CHIP_VERDE:
1651
	case CHIP_VERDE:
1355
		chip_name = "VERDE";
1652
		chip_name = "VERDE";
1356
		rlc_chip_name = "VERDE";
1653
		new_chip_name = "verde";
1357
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1654
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1358
		me_req_size = SI_PM4_UCODE_SIZE * 4;
1655
		me_req_size = SI_PM4_UCODE_SIZE * 4;
-
 
1656
		ce_req_size = SI_CE_UCODE_SIZE * 4;
-
 
1657
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1359
		ce_req_size = SI_CE_UCODE_SIZE * 4;
1658
		mc_req_size = SI_MC_UCODE_SIZE * 4;
1360
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1659
		mc2_req_size = VERDE_MC_UCODE_SIZE * 4;
1361
		mc_req_size = SI_MC_UCODE_SIZE * 4;
1660
		smc_req_size = ALIGN(VERDE_SMC_UCODE_SIZE, 4);
1362
		break;
1661
		break;
1363
	case CHIP_OLAND:
1662
	case CHIP_OLAND:
1364
		chip_name = "OLAND";
1663
		chip_name = "OLAND";
1365
		rlc_chip_name = "OLAND";
1664
		new_chip_name = "oland";
1366
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1665
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
-
 
1666
		me_req_size = SI_PM4_UCODE_SIZE * 4;
1367
		me_req_size = SI_PM4_UCODE_SIZE * 4;
1667
		ce_req_size = SI_CE_UCODE_SIZE * 4;
1368
		ce_req_size = SI_CE_UCODE_SIZE * 4;
1668
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1369
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1669
		mc_req_size = mc2_req_size = OLAND_MC_UCODE_SIZE * 4;
1370
		mc_req_size = OLAND_MC_UCODE_SIZE * 4;
1670
		smc_req_size = ALIGN(OLAND_SMC_UCODE_SIZE, 4);
1371
		break;
1671
		break;
1372
	case CHIP_HAINAN:
1672
	case CHIP_HAINAN:
1373
		chip_name = "HAINAN";
1673
		chip_name = "HAINAN";
1374
		rlc_chip_name = "HAINAN";
1674
		new_chip_name = "hainan";
1375
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1675
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
-
 
1676
		me_req_size = SI_PM4_UCODE_SIZE * 4;
1376
		me_req_size = SI_PM4_UCODE_SIZE * 4;
1677
		ce_req_size = SI_CE_UCODE_SIZE * 4;
1377
		ce_req_size = SI_CE_UCODE_SIZE * 4;
1678
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1378
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1679
		mc_req_size = mc2_req_size = OLAND_MC_UCODE_SIZE * 4;
1379
		mc_req_size = OLAND_MC_UCODE_SIZE * 4;
1680
		smc_req_size = ALIGN(HAINAN_SMC_UCODE_SIZE, 4);
Line 1380... Line 1681...
1380
		break;
1681
		break;
Line -... Line 1682...
-
 
1682
	default: BUG();
-
 
1683
	}
-
 
1684
 
1381
	default: BUG();
1685
	DRM_INFO("Loading %s Microcode\n", new_chip_name);
1382
	}
1686
 
1383
 
1687
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", new_chip_name);
1384
	DRM_INFO("Loading %s Microcode\n", chip_name);
1688
	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
1385
 
1689
	if (err) {
1386
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
1690
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
1387
	err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
1691
	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
1388
	if (err)
1692
	if (err)
1389
		goto out;
1693
		goto out;
1390
	if (rdev->pfp_fw->size != pfp_req_size) {
1694
	if (rdev->pfp_fw->size != pfp_req_size) {
1391
		printk(KERN_ERR
1695
		printk(KERN_ERR
-
 
1696
		       "si_cp: Bogus length %zu in firmware \"%s\"\n",
-
 
1697
		       rdev->pfp_fw->size, fw_name);
-
 
1698
		err = -EINVAL;
-
 
1699
		goto out;
-
 
1700
	}
-
 
1701
	} else {
-
 
1702
		err = radeon_ucode_validate(rdev->pfp_fw);
-
 
1703
		if (err) {
-
 
1704
			printk(KERN_ERR
-
 
1705
			       "si_cp: validation failed for firmware \"%s\"\n",
-
 
1706
			       fw_name);
Line -... Line 1707...
-
 
1707
			goto out;
-
 
1708
		} else {
-
 
1709
			new_fw++;
1392
		       "si_cp: Bogus length %zu in firmware \"%s\"\n",
1710
		}
1393
		       rdev->pfp_fw->size, fw_name);
1711
	}
1394
		err = -EINVAL;
1712
 
1395
		goto out;
1713
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", new_chip_name);
1396
	}
1714
	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
1397
 
1715
	if (err) {
1398
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
1716
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
1399
	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
1717
	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
1400
	if (err)
1718
	if (err)
1401
		goto out;
1719
		goto out;
-
 
1720
	if (rdev->me_fw->size != me_req_size) {
-
 
1721
		printk(KERN_ERR
-
 
1722
		       "si_cp: Bogus length %zu in firmware \"%s\"\n",
-
 
1723
		       rdev->me_fw->size, fw_name);
-
 
1724
		err = -EINVAL;
-
 
1725
	}
-
 
1726
	} else {
-
 
1727
		err = radeon_ucode_validate(rdev->me_fw);
-
 
1728
		if (err) {
-
 
1729
			printk(KERN_ERR
-
 
1730
			       "si_cp: validation failed for firmware \"%s\"\n",
Line -... Line 1731...
-
 
1731
			       fw_name);
-
 
1732
			goto out;
-
 
1733
		} else {
1402
	if (rdev->me_fw->size != me_req_size) {
1734
			new_fw++;
1403
		printk(KERN_ERR
1735
		}
1404
		       "si_cp: Bogus length %zu in firmware \"%s\"\n",
1736
	}
1405
		       rdev->me_fw->size, fw_name);
1737
 
1406
		err = -EINVAL;
1738
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", new_chip_name);
1407
	}
1739
	err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
1408
 
1740
	if (err) {
1409
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
1741
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
1410
	err = request_firmware(&rdev->ce_fw, fw_name, &pdev->dev);
1742
	err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
1411
	if (err)
1743
	if (err)
-
 
1744
		goto out;
-
 
1745
	if (rdev->ce_fw->size != ce_req_size) {
-
 
1746
		printk(KERN_ERR
-
 
1747
		       "si_cp: Bogus length %zu in firmware \"%s\"\n",
-
 
1748
		       rdev->ce_fw->size, fw_name);
-
 
1749
		err = -EINVAL;
-
 
1750
	}
-
 
1751
	} else {
-
 
1752
		err = radeon_ucode_validate(rdev->ce_fw);
-
 
1753
		if (err) {
-
 
1754
			printk(KERN_ERR
Line 1412... Line 1755...
1412
		goto out;
1755
			       "si_cp: validation failed for firmware \"%s\"\n",
-
 
1756
			       fw_name);
-
 
1757
			goto out;
-
 
1758
		} else {
1413
	if (rdev->ce_fw->size != ce_req_size) {
1759
			new_fw++;
1414
		printk(KERN_ERR
1760
		}
1415
		       "si_cp: Bogus length %zu in firmware \"%s\"\n",
1761
	}
1416
		       rdev->ce_fw->size, fw_name);
1762
 
1417
		err = -EINVAL;
1763
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", new_chip_name);
1418
	}
1764
	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
1419
 
1765
	if (err) {
1420
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
1766
		snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name);
1421
	err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
1767
	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
-
 
1768
	if (err)
-
 
1769
		goto out;
-
 
1770
	if (rdev->rlc_fw->size != rlc_req_size) {
-
 
1771
		printk(KERN_ERR
-
 
1772
		       "si_rlc: Bogus length %zu in firmware \"%s\"\n",
-
 
1773
		       rdev->rlc_fw->size, fw_name);
-
 
1774
		err = -EINVAL;
-
 
1775
	}
-
 
1776
	} else {
-
 
1777
		err = radeon_ucode_validate(rdev->rlc_fw);
-
 
1778
		if (err) {
Line -... Line 1779...
-
 
1779
			printk(KERN_ERR
-
 
1780
			       "si_cp: validation failed for firmware \"%s\"\n",
-
 
1781
			       fw_name);
-
 
1782
			goto out;
-
 
1783
		} else {
-
 
1784
			new_fw++;
1422
	if (err)
1785
		}
1423
		goto out;
1786
	}
1424
	if (rdev->rlc_fw->size != rlc_req_size) {
1787
 
1425
		printk(KERN_ERR
1788
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", new_chip_name);
-
 
1789
	err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
1426
		       "si_rlc: Bogus length %zu in firmware \"%s\"\n",
1790
	if (err) {
-
 
1791
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc2.bin", chip_name);
1427
		       rdev->rlc_fw->size, fw_name);
1792
	err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
1428
		err = -EINVAL;
1793
	if (err) {
1429
	}
1794
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
1430
 
1795
	err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
1431
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
1796
	if (err)
-
 
1797
		goto out;
-
 
1798
	}
-
 
1799
	if ((rdev->mc_fw->size != mc_req_size) &&
-
 
1800
	    (rdev->mc_fw->size != mc2_req_size)) {
-
 
1801
		printk(KERN_ERR
-
 
1802
		       "si_mc: Bogus length %zu in firmware \"%s\"\n",
-
 
1803
		       rdev->mc_fw->size, fw_name);
-
 
1804
		err = -EINVAL;
-
 
1805
	}
-
 
1806
	DRM_INFO("%s: %zu bytes\n", fw_name, rdev->mc_fw->size);
-
 
1807
	} else {
-
 
1808
		err = radeon_ucode_validate(rdev->mc_fw);
Line -... Line 1809...
-
 
1809
		if (err) {
-
 
1810
			printk(KERN_ERR
-
 
1811
			       "si_cp: validation failed for firmware \"%s\"\n",
-
 
1812
			       fw_name);
-
 
1813
			goto out;
-
 
1814
		} else {
-
 
1815
			new_fw++;
-
 
1816
		}
-
 
1817
	}
-
 
1818
 
-
 
1819
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", new_chip_name);
-
 
1820
	err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
-
 
1821
	if (err) {
-
 
1822
	snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
-
 
1823
	err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
-
 
1824
	if (err) {
-
 
1825
		printk(KERN_ERR
1432
	err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
1826
		       "smc: error loading firmware \"%s\"\n",
-
 
1827
		       fw_name);
1433
	if (err)
1828
		release_firmware(rdev->smc_fw);
-
 
1829
		rdev->smc_fw = NULL;
-
 
1830
		err = 0;
-
 
1831
	} else if (rdev->smc_fw->size != smc_req_size) {
-
 
1832
		printk(KERN_ERR
-
 
1833
		       "si_smc: Bogus length %zu in firmware \"%s\"\n",
-
 
1834
		       rdev->smc_fw->size, fw_name);
-
 
1835
		err = -EINVAL;
-
 
1836
	}
-
 
1837
	} else {
Line -... Line 1838...
-
 
1838
		err = radeon_ucode_validate(rdev->smc_fw);
-
 
1839
		if (err) {
-
 
1840
			printk(KERN_ERR
-
 
1841
			       "si_cp: validation failed for firmware \"%s\"\n",
-
 
1842
			       fw_name);
-
 
1843
			goto out;
-
 
1844
		} else {
-
 
1845
			new_fw++;
-
 
1846
		}
1434
		goto out;
1847
	}
1435
	if (rdev->mc_fw->size != mc_req_size) {
1848
 
1436
		printk(KERN_ERR
1849
	if (new_fw == 0) {
1437
		       "si_mc: Bogus length %zu in firmware \"%s\"\n",
1850
		rdev->new_fw = false;
1438
		       rdev->mc_fw->size, fw_name);
1851
	} else if (new_fw < 6) {
Line 1455... Line 1868...
1455
		rdev->ce_fw = NULL;
1868
		rdev->ce_fw = NULL;
1456
		release_firmware(rdev->rlc_fw);
1869
		release_firmware(rdev->rlc_fw);
1457
		rdev->rlc_fw = NULL;
1870
		rdev->rlc_fw = NULL;
1458
		release_firmware(rdev->mc_fw);
1871
		release_firmware(rdev->mc_fw);
1459
		rdev->mc_fw = NULL;
1872
		rdev->mc_fw = NULL;
-
 
1873
		release_firmware(rdev->smc_fw);
-
 
1874
		rdev->smc_fw = NULL;
1460
	}
1875
	}
1461
	return err;
1876
	return err;
1462
}
1877
}
Line 1463... Line 1878...
1463
 
1878
 
1464
/* watermark setup */
1879
/* watermark setup */
1465
static u32 dce6_line_buffer_adjust(struct radeon_device *rdev,
1880
static u32 dce6_line_buffer_adjust(struct radeon_device *rdev,
1466
				   struct radeon_crtc *radeon_crtc,
1881
				   struct radeon_crtc *radeon_crtc,
1467
				   struct drm_display_mode *mode,
1882
				   struct drm_display_mode *mode,
1468
				   struct drm_display_mode *other_mode)
1883
				   struct drm_display_mode *other_mode)
1469
{
1884
{
-
 
1885
	u32 tmp, buffer_alloc, i;
1470
	u32 tmp;
1886
	u32 pipe_offset = radeon_crtc->crtc_id * 0x20;
1471
	/*
1887
	/*
1472
	 * Line Buffer Setup
1888
	 * Line Buffer Setup
1473
	 * There are 3 line buffers, each one shared by 2 display controllers.
1889
	 * There are 3 line buffers, each one shared by 2 display controllers.
1474
	 * DC_LB_MEMORY_SPLIT controls how that line buffer is shared between
1890
	 * DC_LB_MEMORY_SPLIT controls how that line buffer is shared between
Line 1480... Line 1896...
1480
	/* this can get tricky if we have two large displays on a paired group
1896
	/* this can get tricky if we have two large displays on a paired group
1481
	 * of crtcs.  Ideally for multiple large displays we'd assign them to
1897
	 * of crtcs.  Ideally for multiple large displays we'd assign them to
1482
	 * non-linked crtcs for maximum line buffer allocation.
1898
	 * non-linked crtcs for maximum line buffer allocation.
1483
	 */
1899
	 */
1484
	if (radeon_crtc->base.enabled && mode) {
1900
	if (radeon_crtc->base.enabled && mode) {
1485
		if (other_mode)
1901
		if (other_mode) {
1486
			tmp = 0; /* 1/2 */
1902
			tmp = 0; /* 1/2 */
-
 
1903
			buffer_alloc = 1;
1487
		else
1904
		} else {
1488
			tmp = 2; /* whole */
1905
			tmp = 2; /* whole */
-
 
1906
			buffer_alloc = 2;
-
 
1907
		}
1489
	} else
1908
	} else {
1490
		tmp = 0;
1909
		tmp = 0;
-
 
1910
		buffer_alloc = 0;
-
 
1911
	}
Line 1491... Line 1912...
1491
 
1912
 
1492
	WREG32(DC_LB_MEMORY_SPLIT + radeon_crtc->crtc_offset,
1913
	WREG32(DC_LB_MEMORY_SPLIT + radeon_crtc->crtc_offset,
Line -... Line 1914...
-
 
1914
	       DC_LB_MEMORY_CONFIG(tmp));
-
 
1915
 
-
 
1916
	WREG32(PIPE0_DMIF_BUFFER_CONTROL + pipe_offset,
-
 
1917
	       DMIF_BUFFERS_ALLOCATED(buffer_alloc));
-
 
1918
	for (i = 0; i < rdev->usec_timeout; i++) {
-
 
1919
		if (RREG32(PIPE0_DMIF_BUFFER_CONTROL + pipe_offset) &
-
 
1920
		    DMIF_BUFFERS_ALLOCATED_COMPLETED)
-
 
1921
			break;
-
 
1922
		udelay(1);
1493
	       DC_LB_MEMORY_CONFIG(tmp));
1923
	}
1494
 
1924
 
1495
	if (radeon_crtc->base.enabled && mode) {
1925
	if (radeon_crtc->base.enabled && mode) {
1496
		switch (tmp) {
1926
		switch (tmp) {
1497
		case 0:
1927
		case 0:
Line 1790... Line 2220...
1790
static void dce6_program_watermarks(struct radeon_device *rdev,
2220
static void dce6_program_watermarks(struct radeon_device *rdev,
1791
					 struct radeon_crtc *radeon_crtc,
2221
					 struct radeon_crtc *radeon_crtc,
1792
					 u32 lb_size, u32 num_heads)
2222
					 u32 lb_size, u32 num_heads)
1793
{
2223
{
1794
	struct drm_display_mode *mode = &radeon_crtc->base.mode;
2224
	struct drm_display_mode *mode = &radeon_crtc->base.mode;
1795
	struct dce6_wm_params wm;
2225
	struct dce6_wm_params wm_low, wm_high;
-
 
2226
	u32 dram_channels;
1796
	u32 pixel_period;
2227
	u32 pixel_period;
1797
	u32 line_time = 0;
2228
	u32 line_time = 0;
1798
	u32 latency_watermark_a = 0, latency_watermark_b = 0;
2229
	u32 latency_watermark_a = 0, latency_watermark_b = 0;
1799
	u32 priority_a_mark = 0, priority_b_mark = 0;
2230
	u32 priority_a_mark = 0, priority_b_mark = 0;
1800
	u32 priority_a_cnt = PRIORITY_OFF;
2231
	u32 priority_a_cnt = PRIORITY_OFF;
Line 1806... Line 2237...
1806
		pixel_period = 1000000 / (u32)mode->clock;
2237
		pixel_period = 1000000 / (u32)mode->clock;
1807
		line_time = min((u32)mode->crtc_htotal * pixel_period, (u32)65535);
2238
		line_time = min((u32)mode->crtc_htotal * pixel_period, (u32)65535);
1808
		priority_a_cnt = 0;
2239
		priority_a_cnt = 0;
1809
		priority_b_cnt = 0;
2240
		priority_b_cnt = 0;
Line 1810... Line -...
1810
 
-
 
1811
		wm.yclk = rdev->pm.current_mclk * 10;
-
 
1812
		wm.sclk = rdev->pm.current_sclk * 10;
-
 
1813
		wm.disp_clk = mode->clock;
-
 
1814
		wm.src_width = mode->crtc_hdisplay;
-
 
1815
		wm.active_time = mode->crtc_hdisplay * pixel_period;
-
 
1816
		wm.blank_time = line_time - wm.active_time;
-
 
1817
		wm.interlaced = false;
-
 
1818
		if (mode->flags & DRM_MODE_FLAG_INTERLACE)
-
 
1819
			wm.interlaced = true;
-
 
1820
		wm.vsc = radeon_crtc->vsc;
-
 
1821
		wm.vtaps = 1;
-
 
1822
		if (radeon_crtc->rmx_type != RMX_OFF)
-
 
1823
			wm.vtaps = 2;
-
 
1824
		wm.bytes_per_pixel = 4; /* XXX: get this from fb config */
-
 
1825
		wm.lb_size = lb_size;
2241
 
1826
		if (rdev->family == CHIP_ARUBA)
2242
		if (rdev->family == CHIP_ARUBA)
1827
			wm.dram_channels = evergreen_get_number_of_dram_channels(rdev);
2243
			dram_channels = evergreen_get_number_of_dram_channels(rdev);
1828
		else
2244
		else
-
 
2245
			dram_channels = si_get_number_of_dram_channels(rdev);
-
 
2246
 
-
 
2247
		/* watermark for high clocks */
-
 
2248
		if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) {
-
 
2249
			wm_high.yclk =
-
 
2250
				radeon_dpm_get_mclk(rdev, false) * 10;
-
 
2251
			wm_high.sclk =
-
 
2252
				radeon_dpm_get_sclk(rdev, false) * 10;
-
 
2253
		} else {
-
 
2254
			wm_high.yclk = rdev->pm.current_mclk * 10;
-
 
2255
			wm_high.sclk = rdev->pm.current_sclk * 10;
-
 
2256
		}
-
 
2257
 
-
 
2258
		wm_high.disp_clk = mode->clock;
-
 
2259
		wm_high.src_width = mode->crtc_hdisplay;
-
 
2260
		wm_high.active_time = mode->crtc_hdisplay * pixel_period;
-
 
2261
		wm_high.blank_time = line_time - wm_high.active_time;
-
 
2262
		wm_high.interlaced = false;
-
 
2263
		if (mode->flags & DRM_MODE_FLAG_INTERLACE)
-
 
2264
			wm_high.interlaced = true;
-
 
2265
		wm_high.vsc = radeon_crtc->vsc;
-
 
2266
		wm_high.vtaps = 1;
-
 
2267
		if (radeon_crtc->rmx_type != RMX_OFF)
-
 
2268
			wm_high.vtaps = 2;
-
 
2269
		wm_high.bytes_per_pixel = 4; /* XXX: get this from fb config */
-
 
2270
		wm_high.lb_size = lb_size;
-
 
2271
		wm_high.dram_channels = dram_channels;
-
 
2272
		wm_high.num_heads = num_heads;
-
 
2273
 
-
 
2274
		/* watermark for low clocks */
-
 
2275
		if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) {
-
 
2276
			wm_low.yclk =
-
 
2277
				radeon_dpm_get_mclk(rdev, true) * 10;
-
 
2278
			wm_low.sclk =
-
 
2279
				radeon_dpm_get_sclk(rdev, true) * 10;
-
 
2280
		} else {
-
 
2281
			wm_low.yclk = rdev->pm.current_mclk * 10;
-
 
2282
			wm_low.sclk = rdev->pm.current_sclk * 10;
-
 
2283
		}
-
 
2284
 
-
 
2285
		wm_low.disp_clk = mode->clock;
-
 
2286
		wm_low.src_width = mode->crtc_hdisplay;
-
 
2287
		wm_low.active_time = mode->crtc_hdisplay * pixel_period;
-
 
2288
		wm_low.blank_time = line_time - wm_low.active_time;
-
 
2289
		wm_low.interlaced = false;
-
 
2290
		if (mode->flags & DRM_MODE_FLAG_INTERLACE)
-
 
2291
			wm_low.interlaced = true;
-
 
2292
		wm_low.vsc = radeon_crtc->vsc;
-
 
2293
		wm_low.vtaps = 1;
-
 
2294
		if (radeon_crtc->rmx_type != RMX_OFF)
-
 
2295
			wm_low.vtaps = 2;
-
 
2296
		wm_low.bytes_per_pixel = 4; /* XXX: get this from fb config */
-
 
2297
		wm_low.lb_size = lb_size;
1829
			wm.dram_channels = si_get_number_of_dram_channels(rdev);
2298
		wm_low.dram_channels = dram_channels;
Line 1830... Line 2299...
1830
		wm.num_heads = num_heads;
2299
		wm_low.num_heads = num_heads;
1831
 
2300
 
1832
		/* set for high clocks */
2301
		/* set for high clocks */
1833
		latency_watermark_a = min(dce6_latency_watermark(&wm), (u32)65535);
-
 
1834
		/* set for low clocks */
2302
		latency_watermark_a = min(dce6_latency_watermark(&wm_high), (u32)65535);
Line 1835... Line 2303...
1835
		/* wm.yclk = low clk; wm.sclk = low clk */
2303
		/* set for low clocks */
1836
		latency_watermark_b = min(dce6_latency_watermark(&wm), (u32)65535);
2304
		latency_watermark_b = min(dce6_latency_watermark(&wm_low), (u32)65535);
-
 
2305
 
-
 
2306
		/* possibly force display priority to high */
-
 
2307
		/* should really do this at mode validation time... */
-
 
2308
		if (!dce6_average_bandwidth_vs_dram_bandwidth_for_display(&wm_high) ||
-
 
2309
		    !dce6_average_bandwidth_vs_available_bandwidth(&wm_high) ||
-
 
2310
		    !dce6_check_latency_hiding(&wm_high) ||
-
 
2311
		    (rdev->disp_priority == 2)) {
-
 
2312
			DRM_DEBUG_KMS("force priority to high\n");
1837
 
2313
			priority_a_cnt |= PRIORITY_ALWAYS_ON;
1838
		/* possibly force display priority to high */
2314
			priority_b_cnt |= PRIORITY_ALWAYS_ON;
1839
		/* should really do this at mode validation time... */
2315
		}
1840
		if (!dce6_average_bandwidth_vs_dram_bandwidth_for_display(&wm) ||
2316
		if (!dce6_average_bandwidth_vs_dram_bandwidth_for_display(&wm_low) ||
1841
		    !dce6_average_bandwidth_vs_available_bandwidth(&wm) ||
2317
		    !dce6_average_bandwidth_vs_available_bandwidth(&wm_low) ||
1842
		    !dce6_check_latency_hiding(&wm) ||
2318
		    !dce6_check_latency_hiding(&wm_low) ||
1843
		    (rdev->disp_priority == 2)) {
2319
		    (rdev->disp_priority == 2)) {
1844
			DRM_DEBUG_KMS("force priority to high\n");
2320
			DRM_DEBUG_KMS("force priority to high\n");
Line 1893... Line 2369...
1893
 
2369
 
1894
	/* write the priority marks */
2370
	/* write the priority marks */
1895
	WREG32(PRIORITY_A_CNT + radeon_crtc->crtc_offset, priority_a_cnt);
2371
	WREG32(PRIORITY_A_CNT + radeon_crtc->crtc_offset, priority_a_cnt);
Line -... Line 2372...
-
 
2372
	WREG32(PRIORITY_B_CNT + radeon_crtc->crtc_offset, priority_b_cnt);
-
 
2373
 
-
 
2374
	/* save values for DPM */
-
 
2375
	radeon_crtc->line_time = line_time;
1896
	WREG32(PRIORITY_B_CNT + radeon_crtc->crtc_offset, priority_b_cnt);
2376
	radeon_crtc->wm_high = latency_watermark_a;
Line 1897... Line 2377...
1897
 
2377
	radeon_crtc->wm_low = latency_watermark_b;
1898
}
2378
}
1899
 
2379
 
Line 2499... Line 2979...
2499
	}
2979
	}
2500
	si_select_se_sh(rdev, 0xffffffff, 0xffffffff);
2980
	si_select_se_sh(rdev, 0xffffffff, 0xffffffff);
2501
}
2981
}
Line 2502... Line 2982...
2502
 
2982
 
2503
static u32 si_get_rb_disabled(struct radeon_device *rdev,
2983
static u32 si_get_rb_disabled(struct radeon_device *rdev,
2504
			      u32 max_rb_num, u32 se_num,
2984
			      u32 max_rb_num_per_se,
2505
			      u32 sh_per_se)
2985
			      u32 sh_per_se)
2506
{
2986
{
Line 2507... Line 2987...
2507
	u32 data, mask;
2987
	u32 data, mask;
Line 2513... Line 2993...
2513
		data = 0;
2993
		data = 0;
2514
	data |= RREG32(GC_USER_RB_BACKEND_DISABLE);
2994
	data |= RREG32(GC_USER_RB_BACKEND_DISABLE);
Line 2515... Line 2995...
2515
 
2995
 
Line 2516... Line 2996...
2516
	data >>= BACKEND_DISABLE_SHIFT;
2996
	data >>= BACKEND_DISABLE_SHIFT;
Line 2517... Line 2997...
2517
 
2997
 
2518
	mask = si_create_bitmask(max_rb_num / se_num / sh_per_se);
2998
	mask = si_create_bitmask(max_rb_num_per_se / sh_per_se);
Line 2519... Line 2999...
2519
 
2999
 
2520
	return data & mask;
3000
	return data & mask;
2521
}
3001
}
2522
 
3002
 
2523
static void si_setup_rb(struct radeon_device *rdev,
3003
static void si_setup_rb(struct radeon_device *rdev,
2524
			u32 se_num, u32 sh_per_se,
3004
			u32 se_num, u32 sh_per_se,
2525
			u32 max_rb_num)
3005
			u32 max_rb_num_per_se)
2526
{
3006
{
Line 2527... Line 3007...
2527
	int i, j;
3007
	int i, j;
2528
	u32 data, mask;
3008
	u32 data, mask;
2529
	u32 disabled_rbs = 0;
3009
	u32 disabled_rbs = 0;
2530
	u32 enabled_rbs = 0;
3010
	u32 enabled_rbs = 0;
2531
 
3011
 
2532
	for (i = 0; i < se_num; i++) {
3012
	for (i = 0; i < se_num; i++) {
2533
		for (j = 0; j < sh_per_se; j++) {
3013
		for (j = 0; j < sh_per_se; j++) {
2534
			si_select_se_sh(rdev, i, j);
3014
			si_select_se_sh(rdev, i, j);
Line 2535... Line 3015...
2535
			data = si_get_rb_disabled(rdev, max_rb_num, se_num, sh_per_se);
3015
			data = si_get_rb_disabled(rdev, max_rb_num_per_se, sh_per_se);
2536
			disabled_rbs |= data << ((i * sh_per_se + j) * TAHITI_RB_BITMAP_WIDTH_PER_SH);
3016
			disabled_rbs |= data << ((i * sh_per_se + j) * TAHITI_RB_BITMAP_WIDTH_PER_SH);
2537
		}
3017
		}
2538
	}
3018
	}
2539
	si_select_se_sh(rdev, 0xffffffff, 0xffffffff);
3019
	si_select_se_sh(rdev, 0xffffffff, 0xffffffff);
2540
 
3020
 
Line -... Line 3021...
-
 
3021
	mask = 1;
-
 
3022
	for (i = 0; i < max_rb_num_per_se * se_num; i++) {
2541
	mask = 1;
3023
		if (!(disabled_rbs & mask))
2542
	for (i = 0; i < max_rb_num; i++) {
3024
			enabled_rbs |= mask;
2543
		if (!(disabled_rbs & mask))
3025
		mask <<= 1;
2544
			enabled_rbs |= mask;
3026
	}
2545
		mask <<= 1;
3027
 
Line 2771... Line 3253...
2771
 
3253
 
2772
	si_setup_spi(rdev, rdev->config.si.max_shader_engines,
3254
	si_setup_spi(rdev, rdev->config.si.max_shader_engines,
2773
		     rdev->config.si.max_sh_per_se,
3255
		     rdev->config.si.max_sh_per_se,
Line -... Line 3256...
-
 
3256
		     rdev->config.si.max_cu_per_sh);
-
 
3257
 
-
 
3258
	rdev->config.si.active_cus = 0;
-
 
3259
	for (i = 0; i < rdev->config.si.max_shader_engines; i++) {
-
 
3260
		for (j = 0; j < rdev->config.si.max_sh_per_se; j++) {
-
 
3261
				rdev->config.si.active_cus +=
-
 
3262
					hweight32(si_get_cu_active_bitmap(rdev, i, j));
Line 2774... Line 3263...
2774
		     rdev->config.si.max_cu_per_sh);
3263
			}
2775
 
3264
		}
2776
 
3265
 
2777
	/* set HW defaults for 3D engine */
3266
	/* set HW defaults for 3D engine */
Line 2859... Line 3348...
2859
	radeon_ring_write(ring, 0);
3348
	radeon_ring_write(ring, 0);
2860
	radeon_ring_write(ring, 10); /* poll interval */
3349
	radeon_ring_write(ring, 10); /* poll interval */
2861
	/* EVENT_WRITE_EOP - flush caches, send int */
3350
	/* EVENT_WRITE_EOP - flush caches, send int */
2862
	radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4));
3351
	radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4));
2863
	radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5));
3352
	radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5));
2864
	radeon_ring_write(ring, addr & 0xffffffff);
3353
	radeon_ring_write(ring, lower_32_bits(addr));
2865
	radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2));
3354
	radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2));
2866
	radeon_ring_write(ring, fence->seq);
3355
	radeon_ring_write(ring, fence->seq);
2867
	radeon_ring_write(ring, 0);
3356
	radeon_ring_write(ring, 0);
2868
}
3357
}
Line 2892... Line 3381...
2892
		} else if (rdev->wb.enabled) {
3381
		} else if (rdev->wb.enabled) {
2893
			next_rptr = ring->wptr + 5 + 4 + 8;
3382
			next_rptr = ring->wptr + 5 + 4 + 8;
2894
			radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
3383
			radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
2895
			radeon_ring_write(ring, (1 << 8));
3384
			radeon_ring_write(ring, (1 << 8));
2896
			radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc);
3385
			radeon_ring_write(ring, ring->next_rptr_gpu_addr & 0xfffffffc);
2897
			radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr) & 0xffffffff);
3386
			radeon_ring_write(ring, upper_32_bits(ring->next_rptr_gpu_addr));
2898
			radeon_ring_write(ring, next_rptr);
3387
			radeon_ring_write(ring, next_rptr);
2899
		}
3388
		}
Line 2900... Line 3389...
2900
 
3389
 
2901
		header = PACKET3(PACKET3_INDIRECT_BUFFER, 2);
3390
		header = PACKET3(PACKET3_INDIRECT_BUFFER, 2);
Line 2933... Line 3422...
2933
static void si_cp_enable(struct radeon_device *rdev, bool enable)
3422
static void si_cp_enable(struct radeon_device *rdev, bool enable)
2934
{
3423
{
2935
	if (enable)
3424
	if (enable)
2936
		WREG32(CP_ME_CNTL, 0);
3425
		WREG32(CP_ME_CNTL, 0);
2937
	else {
3426
	else {
-
 
3427
		if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
2938
		radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
3428
		radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
2939
		WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT));
3429
		WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT));
2940
		WREG32(SCRATCH_UMSK, 0);
3430
		WREG32(SCRATCH_UMSK, 0);
2941
		rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
3431
		rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
2942
		rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = false;
3432
		rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = false;
Line 2945... Line 3435...
2945
	udelay(50);
3435
	udelay(50);
2946
}
3436
}
Line 2947... Line 3437...
2947
 
3437
 
2948
static int si_cp_load_microcode(struct radeon_device *rdev)
3438
static int si_cp_load_microcode(struct radeon_device *rdev)
2949
{
-
 
2950
	const __be32 *fw_data;
3439
{
Line 2951... Line 3440...
2951
	int i;
3440
	int i;
2952
 
3441
 
Line 2953... Line 3442...
2953
	if (!rdev->me_fw || !rdev->pfp_fw)
3442
	if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw)
Line -... Line 3443...
-
 
3443
		return -EINVAL;
-
 
3444
 
-
 
3445
	si_cp_enable(rdev, false);
-
 
3446
 
-
 
3447
	if (rdev->new_fw) {
-
 
3448
		const struct gfx_firmware_header_v1_0 *pfp_hdr =
-
 
3449
			(const struct gfx_firmware_header_v1_0 *)rdev->pfp_fw->data;
-
 
3450
		const struct gfx_firmware_header_v1_0 *ce_hdr =
-
 
3451
			(const struct gfx_firmware_header_v1_0 *)rdev->ce_fw->data;
-
 
3452
		const struct gfx_firmware_header_v1_0 *me_hdr =
-
 
3453
			(const struct gfx_firmware_header_v1_0 *)rdev->me_fw->data;
-
 
3454
		const __le32 *fw_data;
-
 
3455
		u32 fw_size;
-
 
3456
 
-
 
3457
		radeon_ucode_print_gfx_hdr(&pfp_hdr->header);
-
 
3458
		radeon_ucode_print_gfx_hdr(&ce_hdr->header);
-
 
3459
		radeon_ucode_print_gfx_hdr(&me_hdr->header);
-
 
3460
 
-
 
3461
		/* PFP */
-
 
3462
		fw_data = (const __le32 *)
-
 
3463
			(rdev->pfp_fw->data + le32_to_cpu(pfp_hdr->header.ucode_array_offset_bytes));
-
 
3464
		fw_size = le32_to_cpu(pfp_hdr->header.ucode_size_bytes) / 4;
-
 
3465
		WREG32(CP_PFP_UCODE_ADDR, 0);
-
 
3466
		for (i = 0; i < fw_size; i++)
-
 
3467
			WREG32(CP_PFP_UCODE_DATA, le32_to_cpup(fw_data++));
-
 
3468
		WREG32(CP_PFP_UCODE_ADDR, 0);
-
 
3469
 
-
 
3470
		/* CE */
-
 
3471
		fw_data = (const __le32 *)
-
 
3472
			(rdev->ce_fw->data + le32_to_cpu(ce_hdr->header.ucode_array_offset_bytes));
-
 
3473
		fw_size = le32_to_cpu(ce_hdr->header.ucode_size_bytes) / 4;
-
 
3474
		WREG32(CP_CE_UCODE_ADDR, 0);
-
 
3475
		for (i = 0; i < fw_size; i++)
-
 
3476
			WREG32(CP_CE_UCODE_DATA, le32_to_cpup(fw_data++));
-
 
3477
		WREG32(CP_CE_UCODE_ADDR, 0);
-
 
3478
 
-
 
3479
		/* ME */
-
 
3480
		fw_data = (const __be32 *)
-
 
3481
			(rdev->me_fw->data + le32_to_cpu(me_hdr->header.ucode_array_offset_bytes));
-
 
3482
		fw_size = le32_to_cpu(me_hdr->header.ucode_size_bytes) / 4;
-
 
3483
		WREG32(CP_ME_RAM_WADDR, 0);
-
 
3484
		for (i = 0; i < fw_size; i++)
-
 
3485
			WREG32(CP_ME_RAM_DATA, le32_to_cpup(fw_data++));
2954
		return -EINVAL;
3486
		WREG32(CP_ME_RAM_WADDR, 0);
2955
 
3487
	} else {
2956
	si_cp_enable(rdev, false);
3488
		const __be32 *fw_data;
2957
 
3489
 
2958
	/* PFP */
3490
	/* PFP */
Line 2973... Line 3505...
2973
	fw_data = (const __be32 *)rdev->me_fw->data;
3505
	fw_data = (const __be32 *)rdev->me_fw->data;
2974
	WREG32(CP_ME_RAM_WADDR, 0);
3506
	WREG32(CP_ME_RAM_WADDR, 0);
2975
	for (i = 0; i < SI_PM4_UCODE_SIZE; i++)
3507
	for (i = 0; i < SI_PM4_UCODE_SIZE; i++)
2976
		WREG32(CP_ME_RAM_DATA, be32_to_cpup(fw_data++));
3508
		WREG32(CP_ME_RAM_DATA, be32_to_cpup(fw_data++));
2977
	WREG32(CP_ME_RAM_WADDR, 0);
3509
	WREG32(CP_ME_RAM_WADDR, 0);
-
 
3510
	}
Line 2978... Line 3511...
2978
 
3511
 
2979
	WREG32(CP_PFP_UCODE_ADDR, 0);
3512
	WREG32(CP_PFP_UCODE_ADDR, 0);
2980
	WREG32(CP_CE_UCODE_ADDR, 0);
3513
	WREG32(CP_CE_UCODE_ADDR, 0);
2981
	WREG32(CP_ME_RAM_WADDR, 0);
3514
	WREG32(CP_ME_RAM_WADDR, 0);
Line 3005... Line 3538...
3005
	/* init the CE partitions */
3538
	/* init the CE partitions */
3006
	radeon_ring_write(ring, PACKET3(PACKET3_SET_BASE, 2));
3539
	radeon_ring_write(ring, PACKET3(PACKET3_SET_BASE, 2));
3007
	radeon_ring_write(ring, PACKET3_BASE_INDEX(CE_PARTITION_BASE));
3540
	radeon_ring_write(ring, PACKET3_BASE_INDEX(CE_PARTITION_BASE));
3008
	radeon_ring_write(ring, 0xc000);
3541
	radeon_ring_write(ring, 0xc000);
3009
	radeon_ring_write(ring, 0xe000);
3542
	radeon_ring_write(ring, 0xe000);
3010
	radeon_ring_unlock_commit(rdev, ring);
3543
	radeon_ring_unlock_commit(rdev, ring, false);
Line 3011... Line 3544...
3011
 
3544
 
Line 3012... Line 3545...
3012
	si_cp_enable(rdev, true);
3545
	si_cp_enable(rdev, true);
3013
 
3546
 
Line 3034... Line 3567...
3034
	radeon_ring_write(ring, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
3567
	radeon_ring_write(ring, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
3035
	radeon_ring_write(ring, 0x00000316);
3568
	radeon_ring_write(ring, 0x00000316);
3036
	radeon_ring_write(ring, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */
3569
	radeon_ring_write(ring, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */
3037
	radeon_ring_write(ring, 0x00000010); /* VGT_OUT_DEALLOC_CNTL */
3570
	radeon_ring_write(ring, 0x00000010); /* VGT_OUT_DEALLOC_CNTL */
Line 3038... Line 3571...
3038
 
3571
 
Line 3039... Line 3572...
3039
	radeon_ring_unlock_commit(rdev, ring);
3572
	radeon_ring_unlock_commit(rdev, ring, false);
3040
 
3573
 
3041
	for (i = RADEON_RING_TYPE_GFX_INDEX; i <= CAYMAN_RING_TYPE_CP2_INDEX; ++i) {
3574
	for (i = RADEON_RING_TYPE_GFX_INDEX; i <= CAYMAN_RING_TYPE_CP2_INDEX; ++i) {
Line 3042... Line 3575...
3042
		ring = &rdev->ring[i];
3575
		ring = &rdev->ring[i];
3043
		r = radeon_ring_lock(rdev, ring, 2);
3576
		r = radeon_ring_lock(rdev, ring, 2);
3044
 
3577
 
Line 3045... Line 3578...
3045
		/* clear the compute context state */
3578
		/* clear the compute context state */
3046
		radeon_ring_write(ring, PACKET3_COMPUTE(PACKET3_CLEAR_STATE, 0));
3579
		radeon_ring_write(ring, PACKET3_COMPUTE(PACKET3_CLEAR_STATE, 0));
Line 3047... Line 3580...
3047
		radeon_ring_write(ring, 0);
3580
		radeon_ring_write(ring, 0);
3048
 
3581
 
Line 3049... Line 3582...
3049
		radeon_ring_unlock_commit(rdev, ring);
3582
		radeon_ring_unlock_commit(rdev, ring, false);
3050
	}
3583
	}
3051
 
3584
 
3052
	return 0;
3585
	return 0;
Line 3053... Line 3586...
3053
}
3586
}
3054
 
3587
 
3055
static void si_cp_fini(struct radeon_device *rdev)
3588
static void si_cp_fini(struct radeon_device *rdev)
3056
{
3589
{
3057
	struct radeon_ring *ring;
3590
	struct radeon_ring *ring;
3058
	si_cp_enable(rdev, false);
3591
	si_cp_enable(rdev, false);
3059
 
3592
 
3060
//   ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
3593
	ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
3061
//   radeon_ring_fini(rdev, ring);
3594
	radeon_ring_fini(rdev, ring);
3062
//   radeon_scratch_free(rdev, ring->rptr_save_reg);
3595
	radeon_scratch_free(rdev, ring->rptr_save_reg);
3063
 
3596
 
3064
//   ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
3597
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
Line 3065... Line 3598...
3065
//   radeon_ring_fini(rdev, ring);
3598
	radeon_ring_fini(rdev, ring);
3066
//   radeon_scratch_free(rdev, ring->rptr_save_reg);
3599
	radeon_scratch_free(rdev, ring->rptr_save_reg);
3067
 
3600
 
3068
//   ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
3601
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
3069
//   radeon_ring_fini(rdev, ring);
3602
	radeon_ring_fini(rdev, ring);
3070
//   radeon_scratch_free(rdev, ring->rptr_save_reg);
3603
	radeon_scratch_free(rdev, ring->rptr_save_reg);
Line 3071... Line -...
3071
}
-
 
3072
 
3604
}
3073
static int si_cp_resume(struct radeon_device *rdev)
-
 
3074
{
-
 
3075
	struct radeon_ring *ring;
-
 
3076
	u32 tmp;
-
 
3077
	u32 rb_bufsz;
-
 
3078
	int r;
-
 
3079
 
-
 
3080
	/* Reset cp; if cp is reset, then PA, SH, VGT also need to be reset */
-
 
Line 3081... Line 3605...
3081
	WREG32(GRBM_SOFT_RESET, (SOFT_RESET_CP |
3605
 
3082
				 SOFT_RESET_PA |
3606
static int si_cp_resume(struct radeon_device *rdev)
Line 3083... Line 3607...
3083
				 SOFT_RESET_VGT |
3607
{
Line 3098... Line 3622...
3098
	WREG32(SCRATCH_ADDR, ((rdev->wb.gpu_addr + RADEON_WB_SCRATCH_OFFSET) >> 8) & 0xFFFFFFFF);
3622
	WREG32(SCRATCH_ADDR, ((rdev->wb.gpu_addr + RADEON_WB_SCRATCH_OFFSET) >> 8) & 0xFFFFFFFF);
Line 3099... Line 3623...
3099
 
3623
 
3100
	/* ring 0 - compute and gfx */
3624
	/* ring 0 - compute and gfx */
3101
	/* Set ring buffer size */
3625
	/* Set ring buffer size */
3102
	ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
3626
	ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
3103
	rb_bufsz = drm_order(ring->ring_size / 8);
3627
	rb_bufsz = order_base_2(ring->ring_size / 8);
3104
	tmp = (drm_order(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3628
	tmp = (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3105
#ifdef __BIG_ENDIAN
3629
#ifdef __BIG_ENDIAN
3106
	tmp |= BUF_SWAP_32BIT;
3630
	tmp |= BUF_SWAP_32BIT;
3107
#endif
3631
#endif
Line 3126... Line 3650...
3126
	mdelay(1);
3650
	mdelay(1);
3127
	WREG32(CP_RB0_CNTL, tmp);
3651
	WREG32(CP_RB0_CNTL, tmp);
Line 3128... Line 3652...
3128
 
3652
 
Line 3129... Line -...
3129
	WREG32(CP_RB0_BASE, ring->gpu_addr >> 8);
-
 
3130
 
-
 
3131
	ring->rptr = RREG32(CP_RB0_RPTR);
3653
	WREG32(CP_RB0_BASE, ring->gpu_addr >> 8);
3132
 
3654
 
3133
	/* ring1  - compute only */
3655
	/* ring1  - compute only */
3134
	/* Set ring buffer size */
3656
	/* Set ring buffer size */
3135
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
3657
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
3136
	rb_bufsz = drm_order(ring->ring_size / 8);
3658
	rb_bufsz = order_base_2(ring->ring_size / 8);
3137
	tmp = (drm_order(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3659
	tmp = (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3138
#ifdef __BIG_ENDIAN
3660
#ifdef __BIG_ENDIAN
3139
	tmp |= BUF_SWAP_32BIT;
3661
	tmp |= BUF_SWAP_32BIT;
Line 3152... Line 3674...
3152
	mdelay(1);
3674
	mdelay(1);
3153
	WREG32(CP_RB1_CNTL, tmp);
3675
	WREG32(CP_RB1_CNTL, tmp);
Line 3154... Line 3676...
3154
 
3676
 
Line 3155... Line -...
3155
	WREG32(CP_RB1_BASE, ring->gpu_addr >> 8);
-
 
3156
 
-
 
3157
	ring->rptr = RREG32(CP_RB1_RPTR);
3677
	WREG32(CP_RB1_BASE, ring->gpu_addr >> 8);
3158
 
3678
 
3159
	/* ring2 - compute only */
3679
	/* ring2 - compute only */
3160
	/* Set ring buffer size */
3680
	/* Set ring buffer size */
3161
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
3681
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
3162
	rb_bufsz = drm_order(ring->ring_size / 8);
3682
	rb_bufsz = order_base_2(ring->ring_size / 8);
3163
	tmp = (drm_order(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3683
	tmp = (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3164
#ifdef __BIG_ENDIAN
3684
#ifdef __BIG_ENDIAN
3165
	tmp |= BUF_SWAP_32BIT;
3685
	tmp |= BUF_SWAP_32BIT;
Line 3178... Line 3698...
3178
	mdelay(1);
3698
	mdelay(1);
3179
	WREG32(CP_RB2_CNTL, tmp);
3699
	WREG32(CP_RB2_CNTL, tmp);
Line 3180... Line 3700...
3180
 
3700
 
Line 3181... Line -...
3181
	WREG32(CP_RB2_BASE, ring->gpu_addr >> 8);
-
 
3182
 
-
 
3183
	ring->rptr = RREG32(CP_RB2_RPTR);
3701
	WREG32(CP_RB2_BASE, ring->gpu_addr >> 8);
3184
 
3702
 
3185
	/* start the rings */
3703
	/* start the rings */
3186
	si_cp_start(rdev);
3704
	si_cp_start(rdev);
3187
	rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true;
3705
	rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true;
Line 3201... Line 3719...
3201
	r = radeon_ring_test(rdev, CAYMAN_RING_TYPE_CP2_INDEX, &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX]);
3719
	r = radeon_ring_test(rdev, CAYMAN_RING_TYPE_CP2_INDEX, &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX]);
3202
	if (r) {
3720
	if (r) {
3203
		rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX].ready = false;
3721
		rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX].ready = false;
3204
	}
3722
	}
Line -... Line 3723...
-
 
3723
 
-
 
3724
	si_enable_gui_idle_interrupt(rdev, true);
-
 
3725
 
-
 
3726
	if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
-
 
3727
		radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
3205
 
3728
 
3206
	return 0;
3729
	return 0;
Line 3207... Line 3730...
3207
}
3730
}
3208
 
3731
 
3209
static u32 si_gpu_check_soft_reset(struct radeon_device *rdev)
3732
u32 si_gpu_check_soft_reset(struct radeon_device *rdev)
3210
{
3733
{
Line 3211... Line 3734...
3211
	u32 reset_mask = 0;
3734
	u32 reset_mask = 0;
Line 3302... Line 3825...
3302
	dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_ADDR   0x%08X\n",
3825
	dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_ADDR   0x%08X\n",
3303
		 RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
3826
		 RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
3304
	dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
3827
	dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
3305
		 RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
3828
		 RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
Line -... Line 3829...
-
 
3829
 
-
 
3830
	/* disable PG/CG */
-
 
3831
	si_fini_pg(rdev);
-
 
3832
	si_fini_cg(rdev);
-
 
3833
 
-
 
3834
	/* stop the rlc */
-
 
3835
	si_rlc_stop(rdev);
3306
 
3836
 
3307
	/* Disable CP parsing/prefetching */
3837
	/* Disable CP parsing/prefetching */
Line 3308... Line 3838...
3308
	WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT);
3838
	WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT);
3309
 
3839
 
Line 3410... Line 3940...
3410
	udelay(50);
3940
	udelay(50);
Line 3411... Line 3941...
3411
 
3941
 
3412
	evergreen_print_gpu_status_regs(rdev);
3942
	evergreen_print_gpu_status_regs(rdev);
Line -... Line 3943...
-
 
3943
}
-
 
3944
 
-
 
3945
static void si_set_clk_bypass_mode(struct radeon_device *rdev)
-
 
3946
{
-
 
3947
	u32 tmp, i;
-
 
3948
 
-
 
3949
	tmp = RREG32(CG_SPLL_FUNC_CNTL);
-
 
3950
	tmp |= SPLL_BYPASS_EN;
-
 
3951
	WREG32(CG_SPLL_FUNC_CNTL, tmp);
-
 
3952
 
-
 
3953
	tmp = RREG32(CG_SPLL_FUNC_CNTL_2);
-
 
3954
	tmp |= SPLL_CTLREQ_CHG;
-
 
3955
	WREG32(CG_SPLL_FUNC_CNTL_2, tmp);
-
 
3956
 
-
 
3957
	for (i = 0; i < rdev->usec_timeout; i++) {
-
 
3958
		if (RREG32(SPLL_STATUS) & SPLL_CHG_STATUS)
-
 
3959
			break;
-
 
3960
		udelay(1);
-
 
3961
	}
-
 
3962
 
-
 
3963
	tmp = RREG32(CG_SPLL_FUNC_CNTL_2);
-
 
3964
	tmp &= ~(SPLL_CTLREQ_CHG | SCLK_MUX_UPDATE);
-
 
3965
	WREG32(CG_SPLL_FUNC_CNTL_2, tmp);
-
 
3966
 
-
 
3967
	tmp = RREG32(MPLL_CNTL_MODE);
-
 
3968
	tmp &= ~MPLL_MCLK_SEL;
-
 
3969
	WREG32(MPLL_CNTL_MODE, tmp);
-
 
3970
}
-
 
3971
 
-
 
3972
static void si_spll_powerdown(struct radeon_device *rdev)
-
 
3973
{
-
 
3974
	u32 tmp;
-
 
3975
 
-
 
3976
	tmp = RREG32(SPLL_CNTL_MODE);
-
 
3977
	tmp |= SPLL_SW_DIR_CONTROL;
-
 
3978
	WREG32(SPLL_CNTL_MODE, tmp);
-
 
3979
 
-
 
3980
	tmp = RREG32(CG_SPLL_FUNC_CNTL);
-
 
3981
	tmp |= SPLL_RESET;
-
 
3982
	WREG32(CG_SPLL_FUNC_CNTL, tmp);
-
 
3983
 
-
 
3984
	tmp = RREG32(CG_SPLL_FUNC_CNTL);
-
 
3985
	tmp |= SPLL_SLEEP;
-
 
3986
	WREG32(CG_SPLL_FUNC_CNTL, tmp);
-
 
3987
 
-
 
3988
	tmp = RREG32(SPLL_CNTL_MODE);
-
 
3989
	tmp &= ~SPLL_SW_DIR_CONTROL;
-
 
3990
	WREG32(SPLL_CNTL_MODE, tmp);
-
 
3991
}
-
 
3992
 
-
 
3993
static void si_gpu_pci_config_reset(struct radeon_device *rdev)
-
 
3994
{
-
 
3995
	struct evergreen_mc_save save;
-
 
3996
	u32 tmp, i;
-
 
3997
 
-
 
3998
	dev_info(rdev->dev, "GPU pci config reset\n");
-
 
3999
 
-
 
4000
	/* disable dpm? */
-
 
4001
 
-
 
4002
	/* disable cg/pg */
-
 
4003
	si_fini_pg(rdev);
-
 
4004
	si_fini_cg(rdev);
-
 
4005
 
-
 
4006
	/* Disable CP parsing/prefetching */
-
 
4007
	WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT);
-
 
4008
	/* dma0 */
-
 
4009
	tmp = RREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET);
-
 
4010
	tmp &= ~DMA_RB_ENABLE;
-
 
4011
	WREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET, tmp);
-
 
4012
	/* dma1 */
-
 
4013
	tmp = RREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET);
-
 
4014
	tmp &= ~DMA_RB_ENABLE;
-
 
4015
	WREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET, tmp);
-
 
4016
	/* XXX other engines? */
-
 
4017
 
-
 
4018
	/* halt the rlc, disable cp internal ints */
-
 
4019
	si_rlc_stop(rdev);
-
 
4020
 
-
 
4021
	udelay(50);
-
 
4022
 
-
 
4023
	/* disable mem access */
-
 
4024
	evergreen_mc_stop(rdev, &save);
-
 
4025
	if (evergreen_mc_wait_for_idle(rdev)) {
-
 
4026
		dev_warn(rdev->dev, "Wait for MC idle timed out !\n");
-
 
4027
	}
-
 
4028
 
-
 
4029
	/* set mclk/sclk to bypass */
-
 
4030
	si_set_clk_bypass_mode(rdev);
-
 
4031
	/* powerdown spll */
-
 
4032
	si_spll_powerdown(rdev);
-
 
4033
	/* disable BM */
-
 
4034
	pci_clear_master(rdev->pdev);
-
 
4035
	/* reset */
-
 
4036
	radeon_pci_config_reset(rdev);
-
 
4037
	/* wait for asic to come out of reset */
-
 
4038
	for (i = 0; i < rdev->usec_timeout; i++) {
-
 
4039
		if (RREG32(CONFIG_MEMSIZE) != 0xffffffff)
-
 
4040
			break;
-
 
4041
		udelay(1);
-
 
4042
	}
3413
}
4043
}
3414
 
4044
 
3415
int si_asic_reset(struct radeon_device *rdev)
4045
int si_asic_reset(struct radeon_device *rdev)
Line 3416... Line 4046...
3416
{
4046
{
Line 3417... Line 4047...
3417
	u32 reset_mask;
4047
	u32 reset_mask;
3418
 
4048
 
Line -... Line 4049...
-
 
4049
	reset_mask = si_gpu_check_soft_reset(rdev);
3419
	reset_mask = si_gpu_check_soft_reset(rdev);
4050
 
Line 3420... Line 4051...
3420
 
4051
	if (reset_mask)
Line -... Line 4052...
-
 
4052
		r600_set_bios_scratch_engine_hung(rdev, true);
-
 
4053
 
-
 
4054
	/* try soft reset */
-
 
4055
	si_gpu_soft_reset(rdev, reset_mask);
-
 
4056
 
-
 
4057
	reset_mask = si_gpu_check_soft_reset(rdev);
3421
	if (reset_mask)
4058
 
3422
		r600_set_bios_scratch_engine_hung(rdev, true);
4059
	/* try pci config reset */
Line 3423... Line 4060...
3423
 
4060
	if (reset_mask && radeon_hard_reset)
3424
	si_gpu_soft_reset(rdev, reset_mask);
4061
		si_gpu_pci_config_reset(rdev);
Line 3445... Line 4082...
3445
	u32 reset_mask = si_gpu_check_soft_reset(rdev);
4082
	u32 reset_mask = si_gpu_check_soft_reset(rdev);
Line 3446... Line 4083...
3446
 
4083
 
3447
	if (!(reset_mask & (RADEON_RESET_GFX |
4084
	if (!(reset_mask & (RADEON_RESET_GFX |
3448
					RADEON_RESET_COMPUTE |
4085
					RADEON_RESET_COMPUTE |
3449
			    RADEON_RESET_CP))) {
4086
			    RADEON_RESET_CP))) {
3450
		radeon_ring_lockup_update(ring);
4087
		radeon_ring_lockup_update(rdev, ring);
3451
		return false;
4088
		return false;
3452
	}
-
 
3453
	/* force CP activities */
-
 
3454
	radeon_ring_force_activity(rdev, ring);
-
 
3455
	return radeon_ring_test_lockup(rdev, ring);
-
 
3456
}
-
 
3457
 
-
 
3458
/**
-
 
3459
 * si_dma_is_lockup - Check if the DMA engine is locked up
-
 
3460
 *
-
 
3461
 * @rdev: radeon_device pointer
-
 
3462
 * @ring: radeon_ring structure holding ring information
-
 
3463
 *
-
 
3464
 * Check if the async DMA engine is locked up.
-
 
3465
 * Returns true if the engine appears to be locked up, false if not.
-
 
3466
 */
-
 
3467
bool si_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
-
 
3468
{
-
 
3469
	u32 reset_mask = si_gpu_check_soft_reset(rdev);
-
 
3470
	u32 mask;
-
 
3471
 
-
 
3472
	if (ring->idx == R600_RING_TYPE_DMA_INDEX)
-
 
3473
		mask = RADEON_RESET_DMA;
-
 
3474
	else
-
 
3475
		mask = RADEON_RESET_DMA1;
-
 
3476
 
-
 
3477
	if (!(reset_mask & mask)) {
-
 
3478
		radeon_ring_lockup_update(ring);
-
 
3479
		return false;
-
 
3480
	}
-
 
3481
	/* force ring activities */
-
 
3482
	radeon_ring_force_activity(rdev, ring);
4089
	}
3483
	return radeon_ring_test_lockup(rdev, ring);
4090
	return radeon_ring_test_lockup(rdev, ring);
Line 3484... Line 4091...
3484
}
4091
}
3485
 
4092
 
Line 3533... Line 4140...
3533
	 * to stop it overwriting our objects */
4140
	 * to stop it overwriting our objects */
3534
	rv515_vga_render_disable(rdev);
4141
	rv515_vga_render_disable(rdev);
3535
		}
4142
		}
3536
}
4143
}
Line 3537... Line 4144...
3537
 
4144
 
3538
static void si_vram_gtt_location(struct radeon_device *rdev,
4145
void si_vram_gtt_location(struct radeon_device *rdev,
3539
				 struct radeon_mc *mc)
4146
				 struct radeon_mc *mc)
3540
{
4147
{
3541
	if (mc->mc_vram_size > 0xFFC0000000ULL) {
4148
	if (mc->mc_vram_size > 0xFFC0000000ULL) {
3542
		/* leave room for at least 1024M GTT */
4149
		/* leave room for at least 1024M GTT */
Line 3598... Line 4205...
3598
	rdev->mc.vram_width = numchan * chansize;
4205
	rdev->mc.vram_width = numchan * chansize;
3599
	/* Could aper size report 0 ? */
4206
	/* Could aper size report 0 ? */
3600
	rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
4207
	rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
3601
	rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
4208
	rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
3602
	/* size in MB on si */
4209
	/* size in MB on si */
-
 
4210
	tmp = RREG32(CONFIG_MEMSIZE);
-
 
4211
	/* some boards may have garbage in the upper 16 bits */
-
 
4212
	if (tmp & 0xffff0000) {
-
 
4213
		DRM_INFO("Probable bad vram size: 0x%08x\n", tmp);
-
 
4214
		if (tmp & 0xffff)
-
 
4215
			tmp &= 0xffff;
-
 
4216
	}
3603
	rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
4217
	rdev->mc.mc_vram_size = tmp * 1024ULL * 1024ULL;
3604
	rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
4218
	rdev->mc.real_vram_size = rdev->mc.mc_vram_size;
3605
	rdev->mc.visible_vram_size = rdev->mc.aper_size;
4219
	rdev->mc.visible_vram_size = rdev->mc.aper_size;
3606
	si_vram_gtt_location(rdev, &rdev->mc);
4220
	si_vram_gtt_location(rdev, &rdev->mc);
3607
	radeon_update_bandwidth_info(rdev);
4221
	radeon_update_bandwidth_info(rdev);
Line 3608... Line 4222...
3608
 
4222
 
Line 3630... Line 4244...
3630
		return -EINVAL;
4244
		return -EINVAL;
3631
	}
4245
	}
3632
	r = radeon_gart_table_vram_pin(rdev);
4246
	r = radeon_gart_table_vram_pin(rdev);
3633
	if (r)
4247
	if (r)
3634
		return r;
4248
		return r;
3635
	radeon_gart_restore(rdev);
-
 
3636
	/* Setup TLB control */
4249
	/* Setup TLB control */
3637
	WREG32(MC_VM_MX_L1_TLB_CNTL,
4250
	WREG32(MC_VM_MX_L1_TLB_CNTL,
3638
	       (0xA << 7) |
4251
	       (0xA << 7) |
3639
	       ENABLE_L1_TLB |
4252
	       ENABLE_L1_TLB |
-
 
4253
	       ENABLE_L1_FRAGMENT_PROCESSING |
3640
	       SYSTEM_ACCESS_MODE_NOT_IN_SYS |
4254
	       SYSTEM_ACCESS_MODE_NOT_IN_SYS |
3641
	       ENABLE_ADVANCED_DRIVER_MODEL |
4255
	       ENABLE_ADVANCED_DRIVER_MODEL |
3642
	       SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU);
4256
	       SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU);
3643
	/* Setup L2 cache */
4257
	/* Setup L2 cache */
3644
	WREG32(VM_L2_CNTL, ENABLE_L2_CACHE |
4258
	WREG32(VM_L2_CNTL, ENABLE_L2_CACHE |
-
 
4259
	       ENABLE_L2_FRAGMENT_PROCESSING |
3645
	       ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE |
4260
	       ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE |
3646
	       ENABLE_L2_PDE0_CACHE_LRU_UPDATE_BY_WRITE |
4261
	       ENABLE_L2_PDE0_CACHE_LRU_UPDATE_BY_WRITE |
3647
	       EFFECTIVE_L2_QUEUE_SIZE(7) |
4262
	       EFFECTIVE_L2_QUEUE_SIZE(7) |
3648
	       CONTEXT1_IDENTITY_ACCESS_MODE(1));
4263
	       CONTEXT1_IDENTITY_ACCESS_MODE(1));
3649
	WREG32(VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS | INVALIDATE_L2_CACHE);
4264
	WREG32(VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS | INVALIDATE_L2_CACHE);
3650
	WREG32(VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY |
4265
	WREG32(VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY |
-
 
4266
	       BANK_SELECT(4) |
3651
	       L2_CACHE_BIGK_FRAGMENT_SIZE(0));
4267
	       L2_CACHE_BIGK_FRAGMENT_SIZE(4));
3652
	/* setup context0 */
4268
	/* setup context0 */
3653
	WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR, rdev->mc.gtt_start >> 12);
4269
	WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR, rdev->mc.gtt_start >> 12);
3654
	WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR, rdev->mc.gtt_end >> 12);
4270
	WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR, rdev->mc.gtt_end >> 12);
3655
	WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR, rdev->gart.table_addr >> 12);
4271
	WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR, rdev->gart.table_addr >> 12);
3656
	WREG32(VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR,
4272
	WREG32(VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR,
Line 3672... Line 4288...
3672
	 * on the fly in the vm part of radeon_gart.c
4288
	 * on the fly in the vm part of radeon_gart.c
3673
	 */
4289
	 */
3674
	for (i = 1; i < 16; i++) {
4290
	for (i = 1; i < 16; i++) {
3675
		if (i < 8)
4291
		if (i < 8)
3676
			WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
4292
			WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
3677
			       rdev->gart.table_addr >> 12);
4293
			       rdev->vm_manager.saved_table_addr[i]);
3678
		else
4294
		else
3679
			WREG32(VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2),
4295
			WREG32(VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2),
3680
			       rdev->gart.table_addr >> 12);
4296
			       rdev->vm_manager.saved_table_addr[i]);
3681
	}
4297
	}
Line 3682... Line 4298...
3682
 
4298
 
3683
	/* enable context1-15 */
4299
	/* enable context1-15 */
3684
	WREG32(VM_CONTEXT1_PROTECTION_FAULT_DEFAULT_ADDR,
4300
	WREG32(VM_CONTEXT1_PROTECTION_FAULT_DEFAULT_ADDR,
3685
	       (u32)(rdev->dummy_page.addr >> 12));
4301
	       (u32)(rdev->dummy_page.addr >> 12));
3686
	WREG32(VM_CONTEXT1_CNTL2, 4);
4302
	WREG32(VM_CONTEXT1_CNTL2, 4);
-
 
4303
	WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) |
3687
	WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) |
4304
				PAGE_TABLE_BLOCK_SIZE(radeon_vm_block_size - 9) |
3688
				RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT |
4305
				RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT |
3689
				RANGE_PROTECTION_FAULT_ENABLE_DEFAULT |
4306
				RANGE_PROTECTION_FAULT_ENABLE_DEFAULT |
3690
				DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT |
4307
				DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT |
3691
				DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT |
4308
				DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT |
Line 3706... Line 4323...
3706
	return 0;
4323
	return 0;
3707
}
4324
}
Line 3708... Line 4325...
3708
 
4325
 
3709
static void si_pcie_gart_disable(struct radeon_device *rdev)
4326
static void si_pcie_gart_disable(struct radeon_device *rdev)
-
 
4327
{
-
 
4328
	unsigned i;
-
 
4329
 
-
 
4330
	for (i = 1; i < 16; ++i) {
-
 
4331
		uint32_t reg;
-
 
4332
		if (i < 8)
-
 
4333
			reg = VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2);
-
 
4334
		else
-
 
4335
			reg = VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2);
-
 
4336
		rdev->vm_manager.saved_table_addr[i] = RREG32(reg);
-
 
4337
	}
3710
{
4338
 
3711
	/* Disable all tables */
4339
	/* Disable all tables */
3712
	WREG32(VM_CONTEXT0_CNTL, 0);
4340
	WREG32(VM_CONTEXT0_CNTL, 0);
3713
	WREG32(VM_CONTEXT1_CNTL, 0);
4341
	WREG32(VM_CONTEXT1_CNTL, 0);
3714
	/* Setup TLB control */
4342
	/* Setup TLB control */
Line 3794... Line 4422...
3794
		return -EINVAL;
4422
		return -EINVAL;
3795
	}
4423
	}
3796
	return 0;
4424
	return 0;
3797
}
4425
}
Line -... Line 4426...
-
 
4426
 
-
 
4427
static int si_vm_packet3_cp_dma_check(u32 *ib, u32 idx)
-
 
4428
{
-
 
4429
	u32 start_reg, reg, i;
-
 
4430
	u32 command = ib[idx + 4];
-
 
4431
	u32 info = ib[idx + 1];
-
 
4432
	u32 idx_value = ib[idx];
-
 
4433
	if (command & PACKET3_CP_DMA_CMD_SAS) {
-
 
4434
		/* src address space is register */
-
 
4435
		if (((info & 0x60000000) >> 29) == 0) {
-
 
4436
			start_reg = idx_value << 2;
-
 
4437
			if (command & PACKET3_CP_DMA_CMD_SAIC) {
-
 
4438
				reg = start_reg;
-
 
4439
				if (!si_vm_reg_valid(reg)) {
-
 
4440
					DRM_ERROR("CP DMA Bad SRC register\n");
-
 
4441
					return -EINVAL;
-
 
4442
				}
-
 
4443
			} else {
-
 
4444
				for (i = 0; i < (command & 0x1fffff); i++) {
-
 
4445
					reg = start_reg + (4 * i);
-
 
4446
					if (!si_vm_reg_valid(reg)) {
-
 
4447
						DRM_ERROR("CP DMA Bad SRC register\n");
-
 
4448
						return -EINVAL;
-
 
4449
					}
-
 
4450
				}
-
 
4451
			}
-
 
4452
		}
-
 
4453
	}
-
 
4454
	if (command & PACKET3_CP_DMA_CMD_DAS) {
-
 
4455
		/* dst address space is register */
-
 
4456
		if (((info & 0x00300000) >> 20) == 0) {
-
 
4457
			start_reg = ib[idx + 2];
-
 
4458
			if (command & PACKET3_CP_DMA_CMD_DAIC) {
-
 
4459
				reg = start_reg;
-
 
4460
				if (!si_vm_reg_valid(reg)) {
-
 
4461
					DRM_ERROR("CP DMA Bad DST register\n");
-
 
4462
					return -EINVAL;
-
 
4463
				}
-
 
4464
			} else {
-
 
4465
				for (i = 0; i < (command & 0x1fffff); i++) {
-
 
4466
					reg = start_reg + (4 * i);
-
 
4467
				if (!si_vm_reg_valid(reg)) {
-
 
4468
						DRM_ERROR("CP DMA Bad DST register\n");
-
 
4469
						return -EINVAL;
-
 
4470
					}
-
 
4471
				}
-
 
4472
			}
-
 
4473
		}
-
 
4474
	}
-
 
4475
	return 0;
-
 
4476
}
3798
 
4477
 
3799
static int si_vm_packet3_gfx_check(struct radeon_device *rdev,
4478
static int si_vm_packet3_gfx_check(struct radeon_device *rdev,
3800
				   u32 *ib, struct radeon_cs_packet *pkt)
4479
				   u32 *ib, struct radeon_cs_packet *pkt)
-
 
4480
{
3801
{
4481
	int r;
3802
	u32 idx = pkt->idx + 1;
4482
	u32 idx = pkt->idx + 1;
3803
	u32 idx_value = ib[idx];
4483
	u32 idx_value = ib[idx];
3804
	u32 start_reg, end_reg, reg, i;
-
 
Line 3805... Line 4484...
3805
	u32 command, info;
4484
	u32 start_reg, end_reg, reg, i;
3806
 
4485
 
3807
	switch (pkt->opcode) {
4486
	switch (pkt->opcode) {
3808
	case PACKET3_NOP:
4487
	case PACKET3_NOP:
Line 3901... Line 4580...
3901
			if (!si_vm_reg_valid(reg))
4580
			if (!si_vm_reg_valid(reg))
3902
				return -EINVAL;
4581
				return -EINVAL;
3903
		}
4582
		}
3904
		break;
4583
		break;
3905
	case PACKET3_CP_DMA:
4584
	case PACKET3_CP_DMA:
3906
		command = ib[idx + 4];
-
 
3907
		info = ib[idx + 1];
-
 
3908
		if (command & PACKET3_CP_DMA_CMD_SAS) {
-
 
3909
			/* src address space is register */
4585
		r = si_vm_packet3_cp_dma_check(ib, idx);
3910
			if (((info & 0x60000000) >> 29) == 0) {
-
 
3911
				start_reg = idx_value << 2;
-
 
3912
				if (command & PACKET3_CP_DMA_CMD_SAIC) {
-
 
3913
					reg = start_reg;
-
 
3914
					if (!si_vm_reg_valid(reg)) {
-
 
3915
						DRM_ERROR("CP DMA Bad SRC register\n");
-
 
3916
						return -EINVAL;
-
 
3917
					}
-
 
3918
				} else {
-
 
3919
					for (i = 0; i < (command & 0x1fffff); i++) {
-
 
3920
						reg = start_reg + (4 * i);
-
 
3921
						if (!si_vm_reg_valid(reg)) {
-
 
3922
							DRM_ERROR("CP DMA Bad SRC register\n");
-
 
3923
							return -EINVAL;
-
 
3924
						}
4586
		if (r)
3925
					}
-
 
3926
				}
-
 
3927
			}
-
 
3928
		}
-
 
3929
		if (command & PACKET3_CP_DMA_CMD_DAS) {
-
 
3930
			/* dst address space is register */
-
 
3931
			if (((info & 0x00300000) >> 20) == 0) {
-
 
3932
				start_reg = ib[idx + 2];
-
 
3933
				if (command & PACKET3_CP_DMA_CMD_DAIC) {
-
 
3934
					reg = start_reg;
-
 
3935
					if (!si_vm_reg_valid(reg)) {
-
 
3936
						DRM_ERROR("CP DMA Bad DST register\n");
-
 
3937
						return -EINVAL;
4587
			return r;
3938
					}
-
 
3939
				} else {
-
 
3940
					for (i = 0; i < (command & 0x1fffff); i++) {
-
 
3941
						reg = start_reg + (4 * i);
-
 
3942
						if (!si_vm_reg_valid(reg)) {
-
 
3943
							DRM_ERROR("CP DMA Bad DST register\n");
-
 
3944
							return -EINVAL;
-
 
3945
						}
-
 
3946
					}
-
 
3947
				}
-
 
3948
			}
-
 
3949
		}
-
 
3950
		break;
4588
		break;
3951
	default:
4589
	default:
3952
		DRM_ERROR("Invalid GFX packet3: 0x%x\n", pkt->opcode);
4590
		DRM_ERROR("Invalid GFX packet3: 0x%x\n", pkt->opcode);
3953
		return -EINVAL;
4591
		return -EINVAL;
3954
	}
4592
	}
Line 3956... Line 4594...
3956
}
4594
}
Line 3957... Line 4595...
3957
 
4595
 
3958
static int si_vm_packet3_compute_check(struct radeon_device *rdev,
4596
static int si_vm_packet3_compute_check(struct radeon_device *rdev,
3959
				       u32 *ib, struct radeon_cs_packet *pkt)
4597
				       u32 *ib, struct radeon_cs_packet *pkt)
-
 
4598
{
3960
{
4599
	int r;
3961
	u32 idx = pkt->idx + 1;
4600
	u32 idx = pkt->idx + 1;
3962
	u32 idx_value = ib[idx];
4601
	u32 idx_value = ib[idx];
Line 3963... Line 4602...
3963
	u32 start_reg, reg, i;
4602
	u32 start_reg, reg, i;
Line 4028... Line 4667...
4028
			reg = ib[idx + 3] * 4;
4667
			reg = ib[idx + 3] * 4;
4029
			if (!si_vm_reg_valid(reg))
4668
			if (!si_vm_reg_valid(reg))
4030
				return -EINVAL;
4669
				return -EINVAL;
4031
		}
4670
		}
4032
		break;
4671
		break;
-
 
4672
	case PACKET3_CP_DMA:
-
 
4673
		r = si_vm_packet3_cp_dma_check(ib, idx);
-
 
4674
		if (r)
-
 
4675
			return r;
-
 
4676
		break;
4033
	default:
4677
	default:
4034
		DRM_ERROR("Invalid Compute packet3: 0x%x\n", pkt->opcode);
4678
		DRM_ERROR("Invalid Compute packet3: 0x%x\n", pkt->opcode);
4035
		return -EINVAL;
4679
		return -EINVAL;
4036
	}
4680
	}
4037
	return 0;
4681
	return 0;
Line 4105... Line 4749...
4105
void si_vm_fini(struct radeon_device *rdev)
4749
void si_vm_fini(struct radeon_device *rdev)
4106
{
4750
{
4107
}
4751
}
Line 4108... Line 4752...
4108
 
4752
 
4109
/**
4753
/**
4110
 * si_vm_set_page - update the page tables using the CP
4754
 * si_vm_decode_fault - print human readable fault info
4111
 *
4755
 *
4112
 * @rdev: radeon_device pointer
4756
 * @rdev: radeon_device pointer
4113
 * @ib: indirect buffer to fill with commands
-
 
4114
 * @pe: addr of the page entry
4757
 * @status: VM_CONTEXT1_PROTECTION_FAULT_STATUS register value
4115
 * @addr: dst addr to write into pe
-
 
4116
 * @count: number of page entries to update
-
 
4117
 * @incr: increase next addr by incr bytes
-
 
4118
 * @flags: access flags
4758
 * @addr: VM_CONTEXT1_PROTECTION_FAULT_ADDR register value
4119
 *
4759
 *
4120
 * Update the page tables using the CP (SI).
4760
 * Print human readable fault information (SI).
4207
				count -= ndw / 2;
4890
			break;
-
 
4891
		}
-
 
4892
	} else {
-
 
4893
		switch (mc_id) {
-
 
4894
		case 32:
-
 
4895
		case 16:
-
 
4896
		case 96:
-
 
4897
		case 80:
-
 
4898
		case 160:
-
 
4899
		case 144:
-
 
4900
		case 224:
-
 
4901
		case 208:
-
 
4902
			block = "CB";
-
 
4903
			break;
-
 
4904
		case 33:
-
 
4905
		case 17:
-
 
4906
		case 97:
-
 
4907
		case 81:
-
 
4908
		case 161:
-
 
4909
		case 145:
-
 
4910
		case 225:
-
 
4911
		case 209:
-
 
4912
			block = "CB_FMASK";
-
 
4913
			break;
-
 
4914
		case 34:
-
 
4915
		case 18:
-
 
4916
		case 98:
-
 
4917
		case 82:
-
 
4918
		case 162:
-
 
4919
		case 146:
-
 
4920
		case 226:
-
 
4921
		case 210:
-
 
4922
			block = "CB_CMASK";
-
 
4923
			break;
-
 
4924
		case 35:
-
 
4925
		case 19:
-
 
4926
		case 99:
-
 
4927
		case 83:
-
 
4928
		case 163:
-
 
4929
		case 147:
-
 
4930
		case 227:
-
 
4931
		case 211:
-
 
4932
			block = "CB_IMMED";
-
 
4933
			break;
-
 
4934
		case 36:
-
 
4935
		case 20:
-
 
4936
		case 100:
-
 
4937
		case 84:
-
 
4938
		case 164:
-
 
4939
		case 148:
-
 
4940
		case 228:
-
 
4941
		case 212:
-
 
4942
			block = "DB";
-
 
4943
			break;
-
 
4944
		case 37:
-
 
4945
		case 21:
-
 
4946
		case 101:
-
 
4947
		case 85:
-
 
4948
		case 165:
-
 
4949
		case 149:
-
 
4950
		case 229:
-
 
4951
		case 213:
-
 
4952
			block = "DB_HTILE";
-
 
4953
			break;
-
 
4954
		case 39:
-
 
4955
		case 23:
-
 
4956
		case 103:
-
 
4957
		case 87:
-
 
4958
		case 167:
-
 
4959
		case 151:
-
 
4960
		case 231:
-
 
4961
		case 215:
-
 
4962
			block = "DB_STEN";
-
 
4963
			break;
-
 
4964
		case 72:
-
 
4965
		case 68:
-
 
4966
		case 8:
-
 
4967
		case 4:
-
 
4968
		case 136:
-
 
4969
		case 132:
-
 
4970
		case 200:
-
 
4971
		case 196:
-
 
4972
			block = "TC";
-
 
4973
			break;
-
 
4974
		case 112:
-
 
4975
		case 48:
-
 
4976
			block = "CP";
-
 
4977
			break;
-
 
4978
		case 49:
-
 
4979
		case 177:
-
 
4980
		case 50:
-
 
4981
		case 178:
-
 
4982
			block = "SH";
-
 
4983
			break;
-
 
4984
		case 53:
-
 
4985
			block = "VGT";
-
 
4986
			break;
-
 
4987
		case 117:
-
 
4988
			block = "IH";
-
 
4989
			break;
-
 
4990
		case 51:
-
 
4991
		case 115:
-
 
4992
			block = "RLC";
-
 
4993
			break;
-
 
4994
		case 119:
-
 
4995
		case 183:
-
 
4996
			block = "DMA0";
-
 
4997
			break;
-
 
4998
		case 61:
-
 
4999
			block = "DMA1";
-
 
5000
			break;
-
 
5001
		case 248:
-
 
5002
		case 120:
-
 
5003
			block = "HDP";
-
 
5004
			break;
-
 
5005
		default:
-
 
5006
			block = "unknown";
4208
			}
5007
			break;
4209
		}
-
 
4210
		while (ib->length_dw & 0x7)
-
 
4211
			ib->ptr[ib->length_dw++] = DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0, 0);
5008
		}
-
 
5009
	}
-
 
5010
 
-
 
5011
	printk("VM fault (0x%02x, vmid %d) at page %u, %s from %s (%d)\n",
-
 
5012
	       protections, vmid, addr,
-
 
5013
	       (status & MEMORY_CLIENT_RW_MASK) ? "write" : "read",
4212
	}
5014
	       block, mc_id);
Line 4213... Line 5015...
4213
}
5015
}
4214
 
5016
 
4215
void si_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm)
5017
void si_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm)
Line 4219... Line 5021...
4219
	if (vm == NULL)
5021
	if (vm == NULL)
4220
		return;
5022
		return;
Line 4221... Line 5023...
4221
 
5023
 
4222
	/* write new base address */
5024
	/* write new base address */
4223
	radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
5025
	radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
4224
	radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
5026
	radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(1) |
Line 4225... Line 5027...
4225
				 WRITE_DATA_DST_SEL(0)));
5027
				 WRITE_DATA_DST_SEL(0)));
4226
 
5028
 
4227
	if (vm->id < 8) {
5029
	if (vm->id < 8) {
Line 4234... Line 5036...
4234
	radeon_ring_write(ring, 0);
5036
	radeon_ring_write(ring, 0);
4235
	radeon_ring_write(ring, vm->pd_gpu_addr >> 12);
5037
	radeon_ring_write(ring, vm->pd_gpu_addr >> 12);
Line 4236... Line 5038...
4236
 
5038
 
4237
	/* flush hdp cache */
5039
	/* flush hdp cache */
4238
	radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
5040
	radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
4239
	radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
5041
	radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(1) |
4240
				 WRITE_DATA_DST_SEL(0)));
5042
				 WRITE_DATA_DST_SEL(0)));
4241
	radeon_ring_write(ring, HDP_MEM_COHERENCY_FLUSH_CNTL >> 2);
5043
	radeon_ring_write(ring, HDP_MEM_COHERENCY_FLUSH_CNTL >> 2);
4242
	radeon_ring_write(ring, 0);
5044
	radeon_ring_write(ring, 0);
Line 4243... Line 5045...
4243
	radeon_ring_write(ring, 0x1);
5045
	radeon_ring_write(ring, 0x1);
4244
 
5046
 
4245
	/* bits 0-15 are the VM contexts0-15 */
5047
	/* bits 0-15 are the VM contexts0-15 */
4246
	radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
5048
	radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
4247
	radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
5049
	radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(1) |
4248
				 WRITE_DATA_DST_SEL(0)));
5050
				 WRITE_DATA_DST_SEL(0)));
4249
	radeon_ring_write(ring, VM_INVALIDATE_REQUEST >> 2);
5051
	radeon_ring_write(ring, VM_INVALIDATE_REQUEST >> 2);
Line 4250... Line 5052...
4250
	radeon_ring_write(ring, 0);
5052
	radeon_ring_write(ring, 0);
4251
	radeon_ring_write(ring, 1 << vm->id);
5053
	radeon_ring_write(ring, 1 << vm->id);
4252
 
5054
 
4253
	/* sync PFP to ME, otherwise we might get invalid PFP reads */
5055
	/* sync PFP to ME, otherwise we might get invalid PFP reads */
Line -... Line 5056...
-
 
5056
	radeon_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0));
-
 
5057
	radeon_ring_write(ring, 0x0);
-
 
5058
}
4254
	radeon_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0));
5059
 
4255
	radeon_ring_write(ring, 0x0);
5060
/*
4256
}
5061
 *  Power and clock gating
Line -... Line 5062...
-
 
5062
 */
-
 
5063
static void si_wait_for_rlc_serdes(struct radeon_device *rdev)
4257
 
5064
{
4258
void si_dma_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm)
5065
	int i;
-
 
5066
 
Line -... Line 5067...
-
 
5067
	for (i = 0; i < rdev->usec_timeout; i++) {
-
 
5068
		if (RREG32(RLC_SERDES_MASTER_BUSY_0) == 0)
-
 
5069
			break;
-
 
5070
		udelay(1);
-
 
5071
	}
-
 
5072
 
-
 
5073
	for (i = 0; i < rdev->usec_timeout; i++) {
4259
{
5074
		if (RREG32(RLC_SERDES_MASTER_BUSY_1) == 0)
-
 
5075
			break;
-
 
5076
		udelay(1);
-
 
5077
	}
-
 
5078
}
-
 
5079
 
-
 
5080
static void si_enable_gui_idle_interrupt(struct radeon_device *rdev,
-
 
5081
					 bool enable)
-
 
5082
{
-
 
5083
	u32 tmp = RREG32(CP_INT_CNTL_RING0);
-
 
5084
	u32 mask;
-
 
5085
	int i;
-
 
5086
 
4260
	struct radeon_ring *ring = &rdev->ring[ridx];
5087
	if (enable)
-
 
5088
		tmp |= (CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
-
 
5089
	else
-
 
5090
		tmp &= ~(CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
4261
 
5091
	WREG32(CP_INT_CNTL_RING0, tmp);
-
 
5092
 
-
 
5093
	if (!enable) {
-
 
5094
		/* read a gfx register */
-
 
5095
		tmp = RREG32(DB_DEPTH_INFO);
-
 
5096
 
-
 
5097
		mask = RLC_BUSY_STATUS | GFX_POWER_STATUS | GFX_CLOCK_STATUS | GFX_LS_STATUS;
-
 
5098
		for (i = 0; i < rdev->usec_timeout; i++) {
-
 
5099
			if ((RREG32(RLC_STAT) & mask) == (GFX_CLOCK_STATUS | GFX_POWER_STATUS))
-
 
5100
				break;
-
 
5101
			udelay(1);
-
 
5102
		}
-
 
5103
	}
-
 
5104
}
-
 
5105
 
-
 
5106
static void si_set_uvd_dcm(struct radeon_device *rdev,
-
 
5107
			   bool sw_mode)
-
 
5108
{
-
 
5109
	u32 tmp, tmp2;
-
 
5110
 
-
 
5111
	tmp = RREG32(UVD_CGC_CTRL);
4262
	if (vm == NULL)
5112
	tmp &= ~(CLK_OD_MASK | CG_DT_MASK);
4263
		return;
5113
	tmp |= DCM | CG_DT(1) | CLK_OD(4);
-
 
5114
 
4264
 
5115
	if (sw_mode) {
4265
	radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_SRBM_WRITE, 0, 0, 0, 0));
-
 
Line 4266... Line -...
4266
	if (vm->id < 8) {
-
 
4267
		radeon_ring_write(ring, (0xf << 16) | ((VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (vm->id << 2)) >> 2));
-
 
4268
	} else {
-
 
4269
		radeon_ring_write(ring, (0xf << 16) | ((VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((vm->id - 8) << 2)) >> 2));
5116
		tmp &= ~0x7ffff800;
4270
	}
-
 
4271
	radeon_ring_write(ring, vm->pd_gpu_addr >> 12);
-
 
4272
 
-
 
4273
	/* flush hdp cache */
-
 
4274
	radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_SRBM_WRITE, 0, 0, 0, 0));
5117
		tmp2 = DYN_OR_EN | DYN_RR_EN | G_DIV_ID(7);
4275
	radeon_ring_write(ring, (0xf << 16) | (HDP_MEM_COHERENCY_FLUSH_CNTL >> 2));
5118
	} else {
Line 4276... Line -...
4276
	radeon_ring_write(ring, 1);
-
 
4277
 
-
 
4278
	/* bits 0-7 are the VM contexts0-7 */
-
 
4279
	radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_SRBM_WRITE, 0, 0, 0, 0));
5119
		tmp |= 0x7ffff800;
4280
	radeon_ring_write(ring, (0xf << 16) | (VM_INVALIDATE_REQUEST >> 2));
5120
		tmp2 = 0;
-
 
5121
	}
-
 
5122
 
-
 
5123
	WREG32(UVD_CGC_CTRL, tmp);
-
 
5124
	WREG32_UVD_CTX(UVD_CGC_CTRL2, tmp2);
4281
	radeon_ring_write(ring, 1 << vm->id);
5125
}
-
 
5126
 
-
 
5127
void si_init_uvd_internal_cg(struct radeon_device *rdev)
-
 
5128
{
-
 
5129
	bool hw_mode = true;
-
 
5130
 
-
 
5131
	if (hw_mode) {
-
 
5132
		si_set_uvd_dcm(rdev, false);
-
 
5133
	} else {
-
 
5134
		u32 tmp = RREG32(UVD_CGC_CTRL);
-
 
5135
		tmp &= ~DCM;
-
 
5136
		WREG32(UVD_CGC_CTRL, tmp);
-
 
5137
	}
-
 
5138
}
-
 
5139
 
-
 
5140
static u32 si_halt_rlc(struct radeon_device *rdev)
Line 4282... Line -...
4282
}
-
 
4283
 
5141
{
4284
/*
-
 
4285
 * RLC
5142
	u32 data, orig;
4286
 */
-
 
4287
void si_rlc_fini(struct radeon_device *rdev)
-
 
4288
{
-
 
Line 4289... Line -...
4289
	int r;
-
 
4290
 
5143
 
4291
	/* save restore block */
5144
	orig = data = RREG32(RLC_CNTL);
Line 4292... Line -...
4292
	if (rdev->rlc.save_restore_obj) {
-
 
4293
		r = radeon_bo_reserve(rdev->rlc.save_restore_obj, false);
-
 
4294
		if (unlikely(r != 0))
5145
 
-
 
5146
	if (data & RLC_ENABLE) {
4295
			dev_warn(rdev->dev, "(%d) reserve RLC sr bo failed\n", r);
5147
		data &= ~RLC_ENABLE;
4296
		radeon_bo_unpin(rdev->rlc.save_restore_obj);
-
 
4297
		radeon_bo_unreserve(rdev->rlc.save_restore_obj);
-
 
4298
 
-
 
Line 4299... Line 5148...
4299
		radeon_bo_unref(&rdev->rlc.save_restore_obj);
5148
		WREG32(RLC_CNTL, data);
-
 
5149
 
4300
		rdev->rlc.save_restore_obj = NULL;
5150
		si_wait_for_rlc_serdes(rdev);
4301
	}
5151
	}
-
 
5152
 
-
 
5153
	return orig;
-
 
5154
}
-
 
5155
 
-
 
5156
static void si_update_rlc(struct radeon_device *rdev, u32 rlc)
-
 
5157
{
-
 
5158
	u32 tmp;
-
 
5159
 
-
 
5160
	tmp = RREG32(RLC_CNTL);
-
 
5161
	if (tmp != rlc)
-
 
5162
		WREG32(RLC_CNTL, rlc);
-
 
5163
}
4302
 
5164
 
Line 4303... Line 5165...
4303
	/* clear state block */
5165
static void si_enable_dma_pg(struct radeon_device *rdev, bool enable)
4304
	if (rdev->rlc.clear_state_obj) {
5166
{
4305
		r = radeon_bo_reserve(rdev->rlc.clear_state_obj, false);
5167
	u32 data, orig;
Line -... Line 5168...
-
 
5168
 
-
 
5169
	orig = data = RREG32(DMA_PG);
-
 
5170
	if (enable && (rdev->pg_flags & RADEON_PG_SUPPORT_SDMA))
-
 
5171
		data |= PG_CNTL_ENABLE;
-
 
5172
	else
-
 
5173
		data &= ~PG_CNTL_ENABLE;
-
 
5174
	if (orig != data)
-
 
5175
		WREG32(DMA_PG, data);
4306
		if (unlikely(r != 0))
5176
}
-
 
5177
 
-
 
5178
static void si_init_dma_pg(struct radeon_device *rdev)
-
 
5179
{
4307
			dev_warn(rdev->dev, "(%d) reserve RLC c bo failed\n", r);
5180
	u32 tmp;
4308
		radeon_bo_unpin(rdev->rlc.clear_state_obj);
5181
 
-
 
5182
	WREG32(DMA_PGFSM_WRITE,  0x00002000);
-
 
5183
	WREG32(DMA_PGFSM_CONFIG, 0x100010ff);
4309
		radeon_bo_unreserve(rdev->rlc.clear_state_obj);
5184
 
-
 
5185
	for (tmp = 0; tmp < 5; tmp++)
-
 
5186
		WREG32(DMA_PGFSM_WRITE, 0);
-
 
5187
}
4310
 
5188
 
-
 
5189
static void si_enable_gfx_cgpg(struct radeon_device *rdev,
-
 
5190
			       bool enable)
4311
		radeon_bo_unref(&rdev->rlc.clear_state_obj);
5191
{
4312
		rdev->rlc.clear_state_obj = NULL;
5192
	u32 tmp;
4313
	}
5193
 
-
 
5194
	if (enable && (rdev->pg_flags & RADEON_PG_SUPPORT_GFX_PG)) {
-
 
5195
		tmp = RLC_PUD(0x10) | RLC_PDD(0x10) | RLC_TTPD(0x10) | RLC_MSD(0x10);
-
 
5196
		WREG32(RLC_TTOP_D, tmp);
4314
}
5197
 
4315
 
5198
		tmp = RREG32(RLC_PG_CNTL);
Line -... Line 5199...
-
 
5199
		tmp |= GFX_PG_ENABLE;
-
 
5200
		WREG32(RLC_PG_CNTL, tmp);
-
 
5201
 
-
 
5202
		tmp = RREG32(RLC_AUTO_PG_CTRL);
4316
int si_rlc_init(struct radeon_device *rdev)
5203
		tmp |= AUTO_PG_EN;
-
 
5204
		WREG32(RLC_AUTO_PG_CTRL, tmp);
4317
{
5205
	} else {
4318
	int r;
5206
		tmp = RREG32(RLC_AUTO_PG_CTRL);
4319
 
5207
		tmp &= ~AUTO_PG_EN;
-
 
5208
		WREG32(RLC_AUTO_PG_CTRL, tmp);
-
 
5209
 
-
 
5210
		tmp = RREG32(DB_RENDER_CONTROL);
-
 
5211
	}
-
 
5212
}
-
 
5213
 
-
 
5214
static void si_init_gfx_cgpg(struct radeon_device *rdev)
-
 
5215
{
-
 
5216
	u32 tmp;
4320
	/* save restore block */
5217
 
-
 
5218
	WREG32(RLC_SAVE_AND_RESTORE_BASE, rdev->rlc.save_restore_gpu_addr >> 8);
4321
	if (rdev->rlc.save_restore_obj == NULL) {
5219
 
-
 
5220
	tmp = RREG32(RLC_PG_CNTL);
-
 
5221
	tmp |= GFX_PG_SRC;
-
 
5222
	WREG32(RLC_PG_CNTL, tmp);
-
 
5223
 
4322
		r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, PAGE_SIZE, true,
5224
	WREG32(RLC_CLEAR_STATE_RESTORE_BASE, rdev->rlc.clear_state_gpu_addr >> 8);
-
 
5225
 
-
 
5226
	tmp = RREG32(RLC_AUTO_PG_CTRL);
4323
				     RADEON_GEM_DOMAIN_VRAM, NULL,
5227
 
-
 
5228
	tmp &= ~GRBM_REG_SGIT_MASK;
-
 
5229
	tmp |= GRBM_REG_SGIT(0x700);
-
 
5230
	tmp &= ~PG_AFTER_GRBM_REG_ST_MASK;
-
 
5231
	WREG32(RLC_AUTO_PG_CTRL, tmp);
4324
				     &rdev->rlc.save_restore_obj);
5232
}
-
 
5233
 
4325
		if (r) {
5234
static u32 si_get_cu_active_bitmap(struct radeon_device *rdev, u32 se, u32 sh)
4326
			dev_warn(rdev->dev, "(%d) create RLC sr bo failed\n", r);
5235
{
4327
			return r;
5236
	u32 mask = 0, tmp, tmp1;
4328
		}
5237
	int i;
Line 4329... Line -...
4329
	}
-
 
4330
 
-
 
4331
	r = radeon_bo_reserve(rdev->rlc.save_restore_obj, false);
-
 
4332
	if (unlikely(r != 0)) {
-
 
4333
		si_rlc_fini(rdev);
-
 
4334
		return r;
-
 
4335
	}
-
 
4336
	r = radeon_bo_pin(rdev->rlc.save_restore_obj, RADEON_GEM_DOMAIN_VRAM,
-
 
4337
			  &rdev->rlc.save_restore_gpu_addr);
5238
 
4338
	radeon_bo_unreserve(rdev->rlc.save_restore_obj);
5239
	si_select_se_sh(rdev, se, sh);
-
 
5240
	tmp = RREG32(CC_GC_SHADER_ARRAY_CONFIG);
-
 
5241
	tmp1 = RREG32(GC_USER_SHADER_ARRAY_CONFIG);
-
 
5242
	si_select_se_sh(rdev, 0xffffffff, 0xffffffff);
-
 
5243
 
-
 
5244
	tmp &= 0xffff0000;
-
 
5245
 
-
 
5246
	tmp |= tmp1;
-
 
5247
	tmp >>= 16;
-
 
5248
 
-
 
5249
	for (i = 0; i < rdev->config.si.max_cu_per_sh; i ++) {
-
 
5250
		mask <<= 1;
-
 
5251
		mask |= 1;
-
 
5252
	}
-
 
5253
 
-
 
5254
	return (~tmp) & mask;
-
 
5255
}
-
 
5256
 
4339
	if (r) {
5257
static void si_init_ao_cu_mask(struct radeon_device *rdev)
-
 
5258
{
-
 
5259
	u32 i, j, k, active_cu_number = 0;
-
 
5260
	u32 mask, counter, cu_bitmap;
-
 
5261
	u32 tmp = 0;
-
 
5262
 
-
 
5263
	for (i = 0; i < rdev->config.si.max_shader_engines; i++) {
-
 
5264
		for (j = 0; j < rdev->config.si.max_sh_per_se; j++) {
-
 
5265
			mask = 1;
-
 
5266
			cu_bitmap = 0;
-
 
5267
			counter  = 0;
-
 
5268
			for (k = 0; k < rdev->config.si.max_cu_per_sh; k++) {
-
 
5269
				if (si_get_cu_active_bitmap(rdev, i, j) & mask) {
-
 
5270
					if (counter < 2)
-
 
5271
						cu_bitmap |= mask;
-
 
5272
					counter++;
-
 
5273
				}
-
 
5274
				mask <<= 1;
-
 
5275
			}
-
 
5276
 
-
 
5277
			active_cu_number += counter;
-
 
5278
			tmp |= (cu_bitmap << (i * 16 + j * 8));
-
 
5279
		}
-
 
5280
	}
-
 
5281
 
-
 
5282
	WREG32(RLC_PG_AO_CU_MASK, tmp);
-
 
5283
 
-
 
5284
	tmp = RREG32(RLC_MAX_PG_CU);
-
 
5285
	tmp &= ~MAX_PU_CU_MASK;
-
 
5286
	tmp |= MAX_PU_CU(active_cu_number);
-
 
5287
	WREG32(RLC_MAX_PG_CU, tmp);
-
 
5288
}
-
 
5289
 
-
 
5290
static void si_enable_cgcg(struct radeon_device *rdev,
-
 
5291
			   bool enable)
-
 
5292
{
-
 
5293
	u32 data, orig, tmp;
-
 
5294
 
-
 
5295
	orig = data = RREG32(RLC_CGCG_CGLS_CTRL);
-
 
5296
 
-
 
5297
	if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_GFX_CGCG)) {
-
 
5298
		si_enable_gui_idle_interrupt(rdev, true);
-
 
5299
 
4340
		dev_warn(rdev->dev, "(%d) pin RLC sr bo failed\n", r);
5300
		WREG32(RLC_GCPM_GENERAL_3, 0x00000080);
-
 
5301
 
-
 
5302
		tmp = si_halt_rlc(rdev);
-
 
5303
 
-
 
5304
		WREG32(RLC_SERDES_WR_MASTER_MASK_0, 0xffffffff);
-
 
5305
		WREG32(RLC_SERDES_WR_MASTER_MASK_1, 0xffffffff);
-
 
5306
		WREG32(RLC_SERDES_WR_CTRL, 0x00b000ff);
-
 
5307
 
-
 
5308
		si_wait_for_rlc_serdes(rdev);
-
 
5309
 
4341
		si_rlc_fini(rdev);
5310
		si_update_rlc(rdev, tmp);
-
 
5311
 
-
 
5312
		WREG32(RLC_SERDES_WR_CTRL, 0x007000ff);
-
 
5313
 
-
 
5314
		data |= CGCG_EN | CGLS_EN;
-
 
5315
	} else {
-
 
5316
		si_enable_gui_idle_interrupt(rdev, false);
-
 
5317
 
-
 
5318
		RREG32(CB_CGTT_SCLK_CTRL);
-
 
5319
		RREG32(CB_CGTT_SCLK_CTRL);
-
 
5320
		RREG32(CB_CGTT_SCLK_CTRL);
-
 
5321
		RREG32(CB_CGTT_SCLK_CTRL);
-
 
5322
 
-
 
5323
		data &= ~(CGCG_EN | CGLS_EN);
-
 
5324
	}
-
 
5325
 
-
 
5326
	if (orig != data)
-
 
5327
		WREG32(RLC_CGCG_CGLS_CTRL, data);
-
 
5328
}
-
 
5329
 
-
 
5330
static void si_enable_mgcg(struct radeon_device *rdev,
-
 
5331
			   bool enable)
-
 
5332
{
-
 
5333
	u32 data, orig, tmp = 0;
-
 
5334
 
-
 
5335
	if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_GFX_MGCG)) {
-
 
5336
		orig = data = RREG32(CGTS_SM_CTRL_REG);
-
 
5337
		data = 0x96940200;
-
 
5338
		if (orig != data)
-
 
5339
			WREG32(CGTS_SM_CTRL_REG, data);
-
 
5340
 
-
 
5341
		if (rdev->cg_flags & RADEON_CG_SUPPORT_GFX_CP_LS) {
-
 
5342
			orig = data = RREG32(CP_MEM_SLP_CNTL);
-
 
5343
			data |= CP_MEM_LS_EN;
-
 
5344
			if (orig != data)
-
 
5345
				WREG32(CP_MEM_SLP_CNTL, data);
-
 
5346
		}
-
 
5347
 
-
 
5348
		orig = data = RREG32(RLC_CGTT_MGCG_OVERRIDE);
-
 
5349
		data &= 0xffffffc0;
-
 
5350
		if (orig != data)
-
 
5351
			WREG32(RLC_CGTT_MGCG_OVERRIDE, data);
-
 
5352
 
-
 
5353
		tmp = si_halt_rlc(rdev);
-
 
5354
 
-
 
5355
		WREG32(RLC_SERDES_WR_MASTER_MASK_0, 0xffffffff);
-
 
5356
		WREG32(RLC_SERDES_WR_MASTER_MASK_1, 0xffffffff);
-
 
5357
		WREG32(RLC_SERDES_WR_CTRL, 0x00d000ff);
-
 
5358
 
-
 
5359
		si_update_rlc(rdev, tmp);
4342
		return r;
5360
	} else {
-
 
5361
		orig = data = RREG32(RLC_CGTT_MGCG_OVERRIDE);
-
 
5362
		data |= 0x00000003;
-
 
5363
		if (orig != data)
-
 
5364
			WREG32(RLC_CGTT_MGCG_OVERRIDE, data);
-
 
5365
 
-
 
5366
		data = RREG32(CP_MEM_SLP_CNTL);
-
 
5367
		if (data & CP_MEM_LS_EN) {
-
 
5368
			data &= ~CP_MEM_LS_EN;
-
 
5369
			WREG32(CP_MEM_SLP_CNTL, data);
-
 
5370
		}
-
 
5371
		orig = data = RREG32(CGTS_SM_CTRL_REG);
-
 
5372
		data |= LS_OVERRIDE | OVERRIDE;
-
 
5373
		if (orig != data)
-
 
5374
			WREG32(CGTS_SM_CTRL_REG, data);
-
 
5375
 
-
 
5376
		tmp = si_halt_rlc(rdev);
-
 
5377
 
-
 
5378
		WREG32(RLC_SERDES_WR_MASTER_MASK_0, 0xffffffff);
-
 
5379
		WREG32(RLC_SERDES_WR_MASTER_MASK_1, 0xffffffff);
-
 
5380
		WREG32(RLC_SERDES_WR_CTRL, 0x00e000ff);
4343
	}
5381
 
-
 
5382
		si_update_rlc(rdev, tmp);
-
 
5383
	}
-
 
5384
}
-
 
5385
 
-
 
5386
static void si_enable_uvd_mgcg(struct radeon_device *rdev,
-
 
5387
			       bool enable)
-
 
5388
{
-
 
5389
	u32 orig, data, tmp;
-
 
5390
 
-
 
5391
	if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_UVD_MGCG)) {
-
 
5392
		tmp = RREG32_UVD_CTX(UVD_CGC_MEM_CTRL);
-
 
5393
		tmp |= 0x3fff;
-
 
5394
		WREG32_UVD_CTX(UVD_CGC_MEM_CTRL, tmp);
-
 
5395
 
-
 
5396
		orig = data = RREG32(UVD_CGC_CTRL);
-
 
5397
		data |= DCM;
-
 
5398
		if (orig != data)
-
 
5399
			WREG32(UVD_CGC_CTRL, data);
-
 
5400
 
-
 
5401
		WREG32_SMC(SMC_CG_IND_START + CG_CGTT_LOCAL_0, 0);
-
 
5402
		WREG32_SMC(SMC_CG_IND_START + CG_CGTT_LOCAL_1, 0);
-
 
5403
	} else {
-
 
5404
		tmp = RREG32_UVD_CTX(UVD_CGC_MEM_CTRL);
-
 
5405
		tmp &= ~0x3fff;
-
 
5406
		WREG32_UVD_CTX(UVD_CGC_MEM_CTRL, tmp);
-
 
5407
 
-
 
5408
		orig = data = RREG32(UVD_CGC_CTRL);
-
 
5409
		data &= ~DCM;
-
 
5410
		if (orig != data)
-
 
5411
			WREG32(UVD_CGC_CTRL, data);
-
 
5412
 
-
 
5413
		WREG32_SMC(SMC_CG_IND_START + CG_CGTT_LOCAL_0, 0xffffffff);
-
 
5414
		WREG32_SMC(SMC_CG_IND_START + CG_CGTT_LOCAL_1, 0xffffffff);
-
 
5415
	}
-
 
5416
}
-
 
5417
 
-
 
5418
static const u32 mc_cg_registers[] =
-
 
5419
{
-
 
5420
	MC_HUB_MISC_HUB_CG,
-
 
5421
	MC_HUB_MISC_SIP_CG,
-
 
5422
	MC_HUB_MISC_VM_CG,
-
 
5423
	MC_XPB_CLK_GAT,
-
 
5424
	ATC_MISC_CG,
-
 
5425
	MC_CITF_MISC_WR_CG,
-
 
5426
	MC_CITF_MISC_RD_CG,
-
 
5427
	MC_CITF_MISC_VM_CG,
-
 
5428
	VM_L2_CG,
-
 
5429
};
-
 
5430
 
-
 
5431
static void si_enable_mc_ls(struct radeon_device *rdev,
-
 
5432
			    bool enable)
-
 
5433
{
-
 
5434
	int i;
-
 
5435
	u32 orig, data;
-
 
5436
 
-
 
5437
	for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) {
-
 
5438
		orig = data = RREG32(mc_cg_registers[i]);
-
 
5439
		if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_MC_LS))
-
 
5440
			data |= MC_LS_ENABLE;
-
 
5441
		else
-
 
5442
			data &= ~MC_LS_ENABLE;
-
 
5443
		if (data != orig)
-
 
5444
			WREG32(mc_cg_registers[i], data);
-
 
5445
	}
-
 
5446
}
-
 
5447
 
-
 
5448
static void si_enable_mc_mgcg(struct radeon_device *rdev,
-
 
5449
			       bool enable)
-
 
5450
{
-
 
5451
	int i;
-
 
5452
	u32 orig, data;
-
 
5453
 
-
 
5454
	for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) {
-
 
5455
		orig = data = RREG32(mc_cg_registers[i]);
-
 
5456
		if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_MC_MGCG))
-
 
5457
			data |= MC_CG_ENABLE;
-
 
5458
		else
-
 
5459
			data &= ~MC_CG_ENABLE;
-
 
5460
		if (data != orig)
-
 
5461
			WREG32(mc_cg_registers[i], data);
-
 
5462
	}
-
 
5463
}
-
 
5464
 
-
 
5465
static void si_enable_dma_mgcg(struct radeon_device *rdev,
-
 
5466
			       bool enable)
-
 
5467
{
-
 
5468
	u32 orig, data, offset;
-
 
5469
	int i;
-
 
5470
 
-
 
5471
	if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_SDMA_MGCG)) {
-
 
5472
		for (i = 0; i < 2; i++) {
-
 
5473
			if (i == 0)
-
 
5474
				offset = DMA0_REGISTER_OFFSET;
-
 
5475
			else
-
 
5476
				offset = DMA1_REGISTER_OFFSET;
-
 
5477
			orig = data = RREG32(DMA_POWER_CNTL + offset);
-
 
5478
			data &= ~MEM_POWER_OVERRIDE;
-
 
5479
			if (data != orig)
-
 
5480
				WREG32(DMA_POWER_CNTL + offset, data);
-
 
5481
			WREG32(DMA_CLK_CTRL + offset, 0x00000100);
4344
 
5482
		}
4345
	/* clear state block */
-
 
4346
	if (rdev->rlc.clear_state_obj == NULL) {
-
 
4347
		r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, PAGE_SIZE, true,
-
 
4348
				     RADEON_GEM_DOMAIN_VRAM, NULL,
-
 
4349
				     &rdev->rlc.clear_state_obj);
-
 
4350
		if (r) {
-
 
4351
			dev_warn(rdev->dev, "(%d) create RLC c bo failed\n", r);
-
 
4352
			si_rlc_fini(rdev);
5483
	} else {
-
 
5484
		for (i = 0; i < 2; i++) {
-
 
5485
			if (i == 0)
-
 
5486
				offset = DMA0_REGISTER_OFFSET;
-
 
5487
			else
-
 
5488
				offset = DMA1_REGISTER_OFFSET;
-
 
5489
			orig = data = RREG32(DMA_POWER_CNTL + offset);
-
 
5490
			data |= MEM_POWER_OVERRIDE;
-
 
5491
			if (data != orig)
-
 
5492
				WREG32(DMA_POWER_CNTL + offset, data);
-
 
5493
 
-
 
5494
			orig = data = RREG32(DMA_CLK_CTRL + offset);
-
 
5495
			data = 0xff000000;
-
 
5496
			if (data != orig)
-
 
5497
				WREG32(DMA_CLK_CTRL + offset, data);
-
 
5498
		}
-
 
5499
	}
-
 
5500
}
-
 
5501
 
-
 
5502
static void si_enable_bif_mgls(struct radeon_device *rdev,
-
 
5503
			       bool enable)
-
 
5504
{
-
 
5505
	u32 orig, data;
-
 
5506
 
-
 
5507
	orig = data = RREG32_PCIE(PCIE_CNTL2);
-
 
5508
 
-
 
5509
	if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_BIF_LS))
-
 
5510
		data |= SLV_MEM_LS_EN | MST_MEM_LS_EN |
-
 
5511
			REPLAY_MEM_LS_EN | SLV_MEM_AGGRESSIVE_LS_EN;
-
 
5512
	else
-
 
5513
		data &= ~(SLV_MEM_LS_EN | MST_MEM_LS_EN |
-
 
5514
			  REPLAY_MEM_LS_EN | SLV_MEM_AGGRESSIVE_LS_EN);
-
 
5515
 
-
 
5516
	if (orig != data)
-
 
5517
		WREG32_PCIE(PCIE_CNTL2, data);
-
 
5518
}
-
 
5519
 
-
 
5520
static void si_enable_hdp_mgcg(struct radeon_device *rdev,
-
 
5521
			       bool enable)
-
 
5522
{
-
 
5523
	u32 orig, data;
-
 
5524
 
-
 
5525
	orig = data = RREG32(HDP_HOST_PATH_CNTL);
-
 
5526
 
-
 
5527
	if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_HDP_MGCG))
-
 
5528
		data &= ~CLOCK_GATING_DIS;
-
 
5529
	else
-
 
5530
		data |= CLOCK_GATING_DIS;
Line -... Line 5531...
-
 
5531
 
-
 
5532
	if (orig != data)
-
 
5533
		WREG32(HDP_HOST_PATH_CNTL, data);
-
 
5534
}
-
 
5535
 
-
 
5536
static void si_enable_hdp_ls(struct radeon_device *rdev,
-
 
5537
			     bool enable)
-
 
5538
{
-
 
5539
	u32 orig, data;
-
 
5540
 
-
 
5541
	orig = data = RREG32(HDP_MEM_POWER_LS);
-
 
5542
 
-
 
5543
	if (enable && (rdev->cg_flags & RADEON_CG_SUPPORT_HDP_LS))
-
 
5544
		data |= HDP_LS_ENABLE;
-
 
5545
	else
-
 
5546
		data &= ~HDP_LS_ENABLE;
-
 
5547
 
-
 
5548
	if (orig != data)
-
 
5549
		WREG32(HDP_MEM_POWER_LS, data);
-
 
5550
}
-
 
5551
 
-
 
5552
static void si_update_cg(struct radeon_device *rdev,
-
 
5553
		  u32 block, bool enable)
-
 
5554
{
-
 
5555
	if (block & RADEON_CG_BLOCK_GFX) {
-
 
5556
		si_enable_gui_idle_interrupt(rdev, false);
-
 
5557
		/* order matters! */
-
 
5558
		if (enable) {
-
 
5559
			si_enable_mgcg(rdev, true);
-
 
5560
			si_enable_cgcg(rdev, true);
-
 
5561
		} else {
-
 
5562
			si_enable_cgcg(rdev, false);
-
 
5563
			si_enable_mgcg(rdev, false);
-
 
5564
		}
-
 
5565
		si_enable_gui_idle_interrupt(rdev, true);
-
 
5566
	}
-
 
5567
 
-
 
5568
	if (block & RADEON_CG_BLOCK_MC) {
-
 
5569
		si_enable_mc_mgcg(rdev, enable);
-
 
5570
		si_enable_mc_ls(rdev, enable);
-
 
5571
	}
-
 
5572
 
-
 
5573
	if (block & RADEON_CG_BLOCK_SDMA) {
-
 
5574
		si_enable_dma_mgcg(rdev, enable);
-
 
5575
	}
-
 
5576
 
-
 
5577
	if (block & RADEON_CG_BLOCK_BIF) {
-
 
5578
		si_enable_bif_mgls(rdev, enable);
-
 
5579
	}
-
 
5580
 
-
 
5581
	if (block & RADEON_CG_BLOCK_UVD) {
-
 
5582
		if (rdev->has_uvd) {
-
 
5583
			si_enable_uvd_mgcg(rdev, enable);
-
 
5584
		}
-
 
5585
	}
-
 
5586
 
-
 
5587
	if (block & RADEON_CG_BLOCK_HDP) {
-
 
5588
		si_enable_hdp_mgcg(rdev, enable);
-
 
5589
		si_enable_hdp_ls(rdev, enable);
-
 
5590
	}
-
 
5591
}
-
 
5592
 
-
 
5593
static void si_init_cg(struct radeon_device *rdev)
-
 
5594
{
-
 
5595
	si_update_cg(rdev, (RADEON_CG_BLOCK_GFX |
-
 
5596
			    RADEON_CG_BLOCK_MC |
-
 
5597
			    RADEON_CG_BLOCK_SDMA |
-
 
5598
			    RADEON_CG_BLOCK_BIF |
-
 
5599
			    RADEON_CG_BLOCK_HDP), true);
-
 
5600
	if (rdev->has_uvd) {
-
 
5601
		si_update_cg(rdev, RADEON_CG_BLOCK_UVD, true);
-
 
5602
		si_init_uvd_internal_cg(rdev);
-
 
5603
		}
-
 
5604
}
-
 
5605
 
-
 
5606
static void si_fini_cg(struct radeon_device *rdev)
-
 
5607
{
4353
			return r;
5608
	if (rdev->has_uvd) {
-
 
5609
		si_update_cg(rdev, RADEON_CG_BLOCK_UVD, false);
-
 
5610
	}
-
 
5611
	si_update_cg(rdev, (RADEON_CG_BLOCK_GFX |
-
 
5612
			    RADEON_CG_BLOCK_MC |
-
 
5613
			    RADEON_CG_BLOCK_SDMA |
-
 
5614
			    RADEON_CG_BLOCK_BIF |
-
 
5615
			    RADEON_CG_BLOCK_HDP), false);
-
 
5616
}
-
 
5617
 
-
 
5618
u32 si_get_csb_size(struct radeon_device *rdev)
-
 
5619
{
-
 
5620
	u32 count = 0;
-
 
5621
	const struct cs_section_def *sect = NULL;
-
 
5622
	const struct cs_extent_def *ext = NULL;
-
 
5623
 
-
 
5624
	if (rdev->rlc.cs_data == NULL)
-
 
5625
	return 0;
-
 
5626
 
-
 
5627
	/* begin clear state */
-
 
5628
	count += 2;
-
 
5629
	/* context control state */
-
 
5630
	count += 3;
-
 
5631
 
-
 
5632
	for (sect = rdev->rlc.cs_data; sect->section != NULL; ++sect) {
-
 
5633
		for (ext = sect->section; ext->extent != NULL; ++ext) {
-
 
5634
			if (sect->id == SECT_CONTEXT)
-
 
5635
				count += 2 + ext->reg_count;
-
 
5636
			else
-
 
5637
				return 0;
-
 
5638
		}
-
 
5639
	}
-
 
5640
	/* pa_sc_raster_config */
-
 
5641
	count += 3;
-
 
5642
	/* end clear state */
-
 
5643
	count += 2;
-
 
5644
	/* clear state */
-
 
5645
	count += 2;
-
 
5646
 
-
 
5647
	return count;
-
 
5648
}
-
 
5649
 
-
 
5650
void si_get_csb_buffer(struct radeon_device *rdev, volatile u32 *buffer)
-
 
5651
{
-
 
5652
	u32 count = 0, i;
-
 
5653
	const struct cs_section_def *sect = NULL;
-
 
5654
	const struct cs_extent_def *ext = NULL;
-
 
5655
 
-
 
5656
	if (rdev->rlc.cs_data == NULL)
-
 
5657
		return;
-
 
5658
	if (buffer == NULL)
-
 
5659
		return;
-
 
5660
 
-
 
5661
	buffer[count++] = cpu_to_le32(PACKET3(PACKET3_PREAMBLE_CNTL, 0));
-
 
5662
	buffer[count++] = cpu_to_le32(PACKET3_PREAMBLE_BEGIN_CLEAR_STATE);
-
 
5663
 
-
 
5664
	buffer[count++] = cpu_to_le32(PACKET3(PACKET3_CONTEXT_CONTROL, 1));
-
 
5665
	buffer[count++] = cpu_to_le32(0x80000000);
-
 
5666
	buffer[count++] = cpu_to_le32(0x80000000);
-
 
5667
 
-
 
5668
	for (sect = rdev->rlc.cs_data; sect->section != NULL; ++sect) {
-
 
5669
		for (ext = sect->section; ext->extent != NULL; ++ext) {
-
 
5670
			if (sect->id == SECT_CONTEXT) {
-
 
5671
				buffer[count++] =
-
 
5672
					cpu_to_le32(PACKET3(PACKET3_SET_CONTEXT_REG, ext->reg_count));
-
 
5673
				buffer[count++] = cpu_to_le32(ext->reg_index - 0xa000);
-
 
5674
				for (i = 0; i < ext->reg_count; i++)
-
 
5675
					buffer[count++] = cpu_to_le32(ext->extent[i]);
-
 
5676
			} else {
-
 
5677
				return;
-
 
5678
			}
-
 
5679
		}
-
 
5680
	}
-
 
5681
 
-
 
5682
	buffer[count++] = cpu_to_le32(PACKET3(PACKET3_SET_CONTEXT_REG, 1));
-
 
5683
	buffer[count++] = cpu_to_le32(PA_SC_RASTER_CONFIG - PACKET3_SET_CONTEXT_REG_START);
-
 
5684
	switch (rdev->family) {
-
 
5685
	case CHIP_TAHITI:
-
 
5686
	case CHIP_PITCAIRN:
-
 
5687
		buffer[count++] = cpu_to_le32(0x2a00126a);
-
 
5688
		break;
-
 
5689
	case CHIP_VERDE:
-
 
5690
		buffer[count++] = cpu_to_le32(0x0000124a);
-
 
5691
		break;
-
 
5692
	case CHIP_OLAND:
-
 
5693
		buffer[count++] = cpu_to_le32(0x00000082);
-
 
5694
		break;
-
 
5695
	case CHIP_HAINAN:
-
 
5696
		buffer[count++] = cpu_to_le32(0x00000000);
-
 
5697
		break;
-
 
5698
	default:
-
 
5699
		buffer[count++] = cpu_to_le32(0x00000000);
-
 
5700
		break;
-
 
5701
	}
-
 
5702
 
-
 
5703
	buffer[count++] = cpu_to_le32(PACKET3(PACKET3_PREAMBLE_CNTL, 0));
-
 
5704
	buffer[count++] = cpu_to_le32(PACKET3_PREAMBLE_END_CLEAR_STATE);
-
 
5705
 
-
 
5706
	buffer[count++] = cpu_to_le32(PACKET3(PACKET3_CLEAR_STATE, 0));
-
 
5707
	buffer[count++] = cpu_to_le32(0);
-
 
5708
}
-
 
5709
 
-
 
5710
static void si_init_pg(struct radeon_device *rdev)
-
 
5711
{
-
 
5712
	if (rdev->pg_flags) {
-
 
5713
		if (rdev->pg_flags & RADEON_PG_SUPPORT_SDMA) {
-
 
5714
			si_init_dma_pg(rdev);
-
 
5715
		}
-
 
5716
		si_init_ao_cu_mask(rdev);
-
 
5717
		if (rdev->pg_flags & RADEON_PG_SUPPORT_GFX_PG) {
-
 
5718
			si_init_gfx_cgpg(rdev);
-
 
5719
		} else {
-
 
5720
			WREG32(RLC_SAVE_AND_RESTORE_BASE, rdev->rlc.save_restore_gpu_addr >> 8);
-
 
5721
			WREG32(RLC_CLEAR_STATE_RESTORE_BASE, rdev->rlc.clear_state_gpu_addr >> 8);
-
 
5722
		}
-
 
5723
		si_enable_dma_pg(rdev, true);
-
 
5724
		si_enable_gfx_cgpg(rdev, true);
-
 
5725
	} else {
-
 
5726
		WREG32(RLC_SAVE_AND_RESTORE_BASE, rdev->rlc.save_restore_gpu_addr >> 8);
-
 
5727
		WREG32(RLC_CLEAR_STATE_RESTORE_BASE, rdev->rlc.clear_state_gpu_addr >> 8);
-
 
5728
	}
-
 
5729
}
-
 
5730
 
-
 
5731
static void si_fini_pg(struct radeon_device *rdev)
-
 
5732
{
-
 
5733
	if (rdev->pg_flags) {
-
 
5734
		si_enable_dma_pg(rdev, false);
4354
		}
5735
		si_enable_gfx_cgpg(rdev, false);
Line 4355... Line 5736...
4355
	}
5736
	}
4356
	r = radeon_bo_reserve(rdev->rlc.clear_state_obj, false);
5737
}
4357
	if (unlikely(r != 0)) {
5738
 
-
 
5739
/*
-
 
5740
 * RLC
-
 
5741
 */
-
 
5742
void si_rlc_reset(struct radeon_device *rdev)
4358
		si_rlc_fini(rdev);
5743
{
Line 4359... Line 5744...
4359
		return r;
5744
	u32 tmp = RREG32(GRBM_SOFT_RESET);
4360
	}
5745
 
4361
	r = radeon_bo_pin(rdev->rlc.clear_state_obj, RADEON_GEM_DOMAIN_VRAM,
5746
	tmp |= SOFT_RESET_RLC;
-
 
5747
	WREG32(GRBM_SOFT_RESET, tmp);
-
 
5748
	udelay(50);
-
 
5749
	tmp &= ~SOFT_RESET_RLC;
-
 
5750
	WREG32(GRBM_SOFT_RESET, tmp);
-
 
5751
	udelay(50);
-
 
5752
}
-
 
5753
 
-
 
5754
static void si_rlc_stop(struct radeon_device *rdev)
-
 
5755
{
-
 
5756
	WREG32(RLC_CNTL, 0);
-
 
5757
 
-
 
5758
	si_enable_gui_idle_interrupt(rdev, false);
-
 
5759
 
-
 
5760
	si_wait_for_rlc_serdes(rdev);
-
 
5761
}
-
 
5762
 
-
 
5763
static void si_rlc_start(struct radeon_device *rdev)
-
 
5764
{
-
 
5765
	WREG32(RLC_CNTL, RLC_ENABLE);
-
 
5766
 
-
 
5767
	si_enable_gui_idle_interrupt(rdev, true);
-
 
5768
 
-
 
5769
	udelay(50);
-
 
5770
}
-
 
5771
 
-
 
5772
static bool si_lbpw_supported(struct radeon_device *rdev)
-
 
5773
{
-
 
5774
	u32 tmp;
-
 
5775
 
-
 
5776
	/* Enable LBPW only for DDR3 */
-
 
5777
	tmp = RREG32(MC_SEQ_MISC0);
-
 
5778
	if ((tmp & 0xF0000000) == 0xB0000000)
4362
			  &rdev->rlc.clear_state_gpu_addr);
5779
		return true;
Line 4363... Line 5780...
4363
	radeon_bo_unreserve(rdev->rlc.clear_state_obj);
5780
	return false;
4364
	if (r) {
5781
}
4365
		dev_warn(rdev->dev, "(%d) pin RLC c bo failed\n", r);
5782
 
4366
		si_rlc_fini(rdev);
-
 
Line 4367... Line 5783...
4367
		return r;
5783
static void si_enable_lbpw(struct radeon_device *rdev, bool enable)
4368
	}
5784
{
Line 4369... Line 5785...
4369
 
5785
	u32 tmp;
Line -... Line 5786...
-
 
5786
 
-
 
5787
	tmp = RREG32(RLC_LB_CNTL);
-
 
5788
	if (enable)
-
 
5789
		tmp |= LOAD_BALANCE_ENABLE;
-
 
5790
	else
-
 
5791
		tmp &= ~LOAD_BALANCE_ENABLE;
4370
	return 0;
5792
	WREG32(RLC_LB_CNTL, tmp);
4371
}
5793
 
4372
 
5794
	if (!enable) {
4373
static void si_rlc_stop(struct radeon_device *rdev)
5795
		si_select_se_sh(rdev, 0xffffffff, 0xffffffff);
4374
{
5796
		WREG32(SPI_LB_CU_MASK, 0x00ff);
4375
	WREG32(RLC_CNTL, 0);
-
 
4376
}
5797
	}
4377
 
-
 
Line 4378... Line 5798...
4378
static void si_rlc_start(struct radeon_device *rdev)
5798
}
4379
{
5799
 
Line -... Line 5800...
-
 
5800
static int si_rlc_resume(struct radeon_device *rdev)
-
 
5801
{
-
 
5802
	u32 i;
-
 
5803
 
-
 
5804
	if (!rdev->rlc_fw)
-
 
5805
		return -EINVAL;
-
 
5806
 
-
 
5807
	si_rlc_stop(rdev);
-
 
5808
 
-
 
5809
	si_rlc_reset(rdev);
-
 
5810
 
-
 
5811
	si_init_pg(rdev);
-
 
5812
 
-
 
5813
	si_init_cg(rdev);
-
 
5814
 
4380
	WREG32(RLC_CNTL, RLC_ENABLE);
5815
	WREG32(RLC_RL_BASE, 0);
4381
}
5816
	WREG32(RLC_RL_SIZE, 0);
4382
 
5817
	WREG32(RLC_LB_CNTL, 0);
4383
static int si_rlc_resume(struct radeon_device *rdev)
5818
	WREG32(RLC_LB_CNTR_MAX, 0xffffffff);
4384
{
5819
	WREG32(RLC_LB_CNTR_INIT, 0);
-
 
5820
	WREG32(RLC_LB_INIT_CU_MASK, 0xffffffff);
4385
	u32 i;
5821
 
Line -... Line 5822...
-
 
5822
	WREG32(RLC_MC_CNTL, 0);
-
 
5823
	WREG32(RLC_UCODE_CNTL, 0);
4386
	const __be32 *fw_data;
5824
 
Line 4387... Line 5825...
4387
 
5825
	if (rdev->new_fw) {
4388
	if (!rdev->rlc_fw)
5826
		const struct rlc_firmware_header_v1_0 *hdr =
Line 4444... Line 5882...
4444
 
5882
 
4445
static void si_disable_interrupt_state(struct radeon_device *rdev)
5883
static void si_disable_interrupt_state(struct radeon_device *rdev)
4446
{
5884
{
Line -... Line 5885...
-
 
5885
	u32 tmp;
4447
	u32 tmp;
5886
 
-
 
5887
	tmp = RREG32(CP_INT_CNTL_RING0) &
4448
 
5888
		(CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
4449
	WREG32(CP_INT_CNTL_RING0, CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
5889
	WREG32(CP_INT_CNTL_RING0, tmp);
4450
	WREG32(CP_INT_CNTL_RING1, 0);
5890
	WREG32(CP_INT_CNTL_RING1, 0);
4451
	WREG32(CP_INT_CNTL_RING2, 0);
5891
	WREG32(CP_INT_CNTL_RING2, 0);
4452
	tmp = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
5892
	tmp = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
Line 4479... Line 5919...
4479
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
5919
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
4480
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
5920
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
4481
	}
5921
	}
Line 4482... Line 5922...
4482
 
5922
 
4483
	if (!ASIC_IS_NODCE(rdev)) {
5923
	if (!ASIC_IS_NODCE(rdev)) {
Line 4484... Line 5924...
4484
	WREG32(DACA_AUTODETECT_INT_CONTROL, 0);
5924
		WREG32(DAC_AUTODETECT_INT_CONTROL, 0);
4485
 
5925
 
4486
	tmp = RREG32(DC_HPD1_INT_CONTROL) & DC_HPDx_INT_POLARITY;
5926
	tmp = RREG32(DC_HPD1_INT_CONTROL) & DC_HPDx_INT_POLARITY;
4487
	WREG32(DC_HPD1_INT_CONTROL, tmp);
5927
	WREG32(DC_HPD1_INT_CONTROL, tmp);
Line 4530... Line 5970...
4530
	/* IH_REQ_NONSNOOP_EN=1 if ring is in non-cacheable memory, e.g., vram */
5970
	/* IH_REQ_NONSNOOP_EN=1 if ring is in non-cacheable memory, e.g., vram */
4531
	interrupt_cntl &= ~IH_REQ_NONSNOOP_EN;
5971
	interrupt_cntl &= ~IH_REQ_NONSNOOP_EN;
4532
	WREG32(INTERRUPT_CNTL, interrupt_cntl);
5972
	WREG32(INTERRUPT_CNTL, interrupt_cntl);
Line 4533... Line 5973...
4533
 
5973
 
4534
	WREG32(IH_RB_BASE, rdev->ih.gpu_addr >> 8);
5974
	WREG32(IH_RB_BASE, rdev->ih.gpu_addr >> 8);
Line 4535... Line 5975...
4535
	rb_bufsz = drm_order(rdev->ih.ring_size / 4);
5975
	rb_bufsz = order_base_2(rdev->ih.ring_size / 4);
4536
 
5976
 
4537
	ih_rb_cntl = (IH_WPTR_OVERFLOW_ENABLE |
5977
	ih_rb_cntl = (IH_WPTR_OVERFLOW_ENABLE |
Line 4569... Line 6009...
4569
	return ret;
6009
	return ret;
4570
}
6010
}
Line 4571... Line 6011...
4571
 
6011
 
4572
int si_irq_set(struct radeon_device *rdev)
6012
int si_irq_set(struct radeon_device *rdev)
4573
{
6013
{
4574
	u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE;
6014
	u32 cp_int_cntl;
4575
	u32 cp_int_cntl1 = 0, cp_int_cntl2 = 0;
6015
	u32 cp_int_cntl1 = 0, cp_int_cntl2 = 0;
4576
	u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0;
6016
	u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0;
4577
	u32 hpd1 = 0, hpd2 = 0, hpd3 = 0, hpd4 = 0, hpd5 = 0, hpd6 = 0;
6017
	u32 hpd1 = 0, hpd2 = 0, hpd3 = 0, hpd4 = 0, hpd5 = 0, hpd6 = 0;
4578
	u32 grbm_int_cntl = 0;
-
 
4579
	u32 grph1 = 0, grph2 = 0, grph3 = 0, grph4 = 0, grph5 = 0, grph6 = 0;
6018
	u32 grbm_int_cntl = 0;
-
 
6019
	u32 dma_cntl, dma_cntl1;
Line 4580... Line 6020...
4580
	u32 dma_cntl, dma_cntl1;
6020
	u32 thermal_int = 0;
4581
 
6021
 
4582
	if (!rdev->irq.installed) {
6022
	if (!rdev->irq.installed) {
4583
		WARN(1, "Can't enable IRQ/MSI because no handler is installed\n");
6023
		WARN(1, "Can't enable IRQ/MSI because no handler is installed\n");
Line 4589... Line 6029...
4589
		/* force the active interrupt state to all disabled */
6029
		/* force the active interrupt state to all disabled */
4590
		si_disable_interrupt_state(rdev);
6030
		si_disable_interrupt_state(rdev);
4591
		return 0;
6031
		return 0;
4592
	}
6032
	}
Line -... Line 6033...
-
 
6033
 
-
 
6034
	cp_int_cntl = RREG32(CP_INT_CNTL_RING0) &
-
 
6035
		(CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
4593
 
6036
 
4594
	if (!ASIC_IS_NODCE(rdev)) {
6037
	if (!ASIC_IS_NODCE(rdev)) {
4595
	hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN;
6038
	hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN;
4596
	hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN;
6039
	hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN;
4597
	hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN;
6040
	hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN;
Line 4601... Line 6044...
4601
	}
6044
	}
Line 4602... Line 6045...
4602
 
6045
 
4603
	dma_cntl = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
6046
	dma_cntl = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
Line -... Line 6047...
-
 
6047
	dma_cntl1 = RREG32(DMA_CNTL + DMA1_REGISTER_OFFSET) & ~TRAP_ENABLE;
-
 
6048
 
-
 
6049
	thermal_int = RREG32(CG_THERMAL_INT) &
4604
	dma_cntl1 = RREG32(DMA_CNTL + DMA1_REGISTER_OFFSET) & ~TRAP_ENABLE;
6050
		~(THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW);
4605
 
6051
 
4606
	/* enable CP interrupts on all rings */
6052
	/* enable CP interrupts on all rings */
4607
	if (atomic_read(&rdev->irq.ring_int[RADEON_RING_TYPE_GFX_INDEX])) {
6053
	if (atomic_read(&rdev->irq.ring_int[RADEON_RING_TYPE_GFX_INDEX])) {
4608
		DRM_DEBUG("si_irq_set: sw int gfx\n");
6054
		DRM_DEBUG("si_irq_set: sw int gfx\n");
Line 4687... Line 6133...
4687
	WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, dma_cntl);
6133
	WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, dma_cntl);
4688
	WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, dma_cntl1);
6134
	WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, dma_cntl1);
Line 4689... Line 6135...
4689
 
6135
 
Line -... Line 6136...
-
 
6136
	WREG32(GRBM_INT_CNTL, grbm_int_cntl);
-
 
6137
 
-
 
6138
	if (rdev->irq.dpm_thermal) {
-
 
6139
		DRM_DEBUG("dpm thermal\n");
-
 
6140
		thermal_int |= THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW;
4690
	WREG32(GRBM_INT_CNTL, grbm_int_cntl);
6141
	}
4691
 
6142
 
4692
	if (rdev->num_crtc >= 2) {
6143
	if (rdev->num_crtc >= 2) {
4693
	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1);
6144
	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1);
4694
	WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, crtc2);
6145
	WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, crtc2);
Line 4701... Line 6152...
4701
		WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, crtc5);
6152
		WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, crtc5);
4702
		WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, crtc6);
6153
		WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, crtc6);
4703
	}
6154
	}
Line 4704... Line 6155...
4704
 
6155
 
4705
	if (rdev->num_crtc >= 2) {
6156
	if (rdev->num_crtc >= 2) {
-
 
6157
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET,
4706
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, grph1);
6158
		       GRPH_PFLIP_INT_MASK);
-
 
6159
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET,
4707
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, grph2);
6160
		       GRPH_PFLIP_INT_MASK);
4708
	}
6161
	}
4709
	if (rdev->num_crtc >= 4) {
6162
	if (rdev->num_crtc >= 4) {
-
 
6163
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET,
4710
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, grph3);
6164
		       GRPH_PFLIP_INT_MASK);
-
 
6165
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET,
4711
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, grph4);
6166
		       GRPH_PFLIP_INT_MASK);
4712
	}
6167
	}
4713
	if (rdev->num_crtc >= 6) {
6168
	if (rdev->num_crtc >= 6) {
-
 
6169
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET,
4714
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, grph5);
6170
		       GRPH_PFLIP_INT_MASK);
-
 
6171
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET,
4715
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, grph6);
6172
		       GRPH_PFLIP_INT_MASK);
Line 4716... Line 6173...
4716
	}
6173
	}
4717
 
6174
 
4718
	if (!ASIC_IS_NODCE(rdev)) {
6175
	if (!ASIC_IS_NODCE(rdev)) {
Line 4722... Line 6179...
4722
	WREG32(DC_HPD4_INT_CONTROL, hpd4);
6179
	WREG32(DC_HPD4_INT_CONTROL, hpd4);
4723
	WREG32(DC_HPD5_INT_CONTROL, hpd5);
6180
	WREG32(DC_HPD5_INT_CONTROL, hpd5);
4724
	WREG32(DC_HPD6_INT_CONTROL, hpd6);
6181
	WREG32(DC_HPD6_INT_CONTROL, hpd6);
4725
	}
6182
	}
Line -... Line 6183...
-
 
6183
 
-
 
6184
	WREG32(CG_THERMAL_INT, thermal_int);
4726
 
6185
 
4727
	return 0;
6186
	return 0;
Line 4728... Line 6187...
4728
}
6187
}
4729
 
6188
 
Line 4865... Line 6324...
4865
			wptr, rdev->ih.rptr, (wptr + 16) + rdev->ih.ptr_mask);
6324
			wptr, rdev->ih.rptr, (wptr + 16) + rdev->ih.ptr_mask);
4866
		rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask;
6325
		rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask;
4867
		tmp = RREG32(IH_RB_CNTL);
6326
		tmp = RREG32(IH_RB_CNTL);
4868
		tmp |= IH_WPTR_OVERFLOW_CLEAR;
6327
		tmp |= IH_WPTR_OVERFLOW_CLEAR;
4869
		WREG32(IH_RB_CNTL, tmp);
6328
		WREG32(IH_RB_CNTL, tmp);
-
 
6329
		wptr &= ~RB_OVERFLOW;
4870
	}
6330
	}
4871
	return (wptr & rdev->ih.ptr_mask);
6331
	return (wptr & rdev->ih.ptr_mask);
4872
}
6332
}
Line 4873... Line 6333...
4873
 
6333
 
Line 4886... Line 6346...
4886
	u32 wptr;
6346
	u32 wptr;
4887
	u32 rptr;
6347
	u32 rptr;
4888
	u32 src_id, src_data, ring_id;
6348
	u32 src_id, src_data, ring_id;
4889
	u32 ring_index;
6349
	u32 ring_index;
4890
	bool queue_hotplug = false;
6350
	bool queue_hotplug = false;
-
 
6351
	bool queue_thermal = false;
-
 
6352
	u32 status, addr;
Line 4891... Line 6353...
4891
 
6353
 
4892
	if (!rdev->ih.enabled || rdev->shutdown)
6354
	if (!rdev->ih.enabled || rdev->shutdown)
Line 4893... Line 6355...
4893
		return IRQ_NONE;
6355
		return IRQ_NONE;
Line 5070... Line 6532...
5070
			default:
6532
			default:
5071
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
6533
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
5072
				break;
6534
				break;
5073
			}
6535
			}
5074
			break;
6536
			break;
-
 
6537
		case 8: /* D1 page flip */
-
 
6538
		case 10: /* D2 page flip */
-
 
6539
		case 12: /* D3 page flip */
-
 
6540
		case 14: /* D4 page flip */
-
 
6541
		case 16: /* D5 page flip */
-
 
6542
		case 18: /* D6 page flip */
-
 
6543
			DRM_DEBUG("IH: D%d flip\n", ((src_id - 8) >> 1) + 1);
-
 
6544
			break;
5075
		case 42: /* HPD hotplug */
6545
		case 42: /* HPD hotplug */
5076
			switch (src_data) {
6546
			switch (src_data) {
5077
			case 0:
6547
			case 0:
5078
				if (rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_INTERRUPT) {
6548
				if (rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_INTERRUPT) {
5079
					rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_INTERRUPT;
6549
					rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_INTERRUPT;
Line 5119... Line 6589...
5119
			default:
6589
			default:
5120
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
6590
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
5121
				break;
6591
				break;
5122
			}
6592
			}
5123
			break;
6593
			break;
-
 
6594
		case 124: /* UVD */
-
 
6595
			DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data);
-
 
6596
			radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX);
-
 
6597
			break;
5124
		case 146:
6598
		case 146:
5125
		case 147:
6599
		case 147:
-
 
6600
			addr = RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR);
-
 
6601
			status = RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS);
-
 
6602
			/* reset addr and status */
-
 
6603
			WREG32_P(VM_CONTEXT1_CNTL2, 1, ~1);
-
 
6604
			if (addr == 0x0 && status == 0x0)
-
 
6605
				break;
5126
			dev_err(rdev->dev, "GPU fault detected: %d 0x%08x\n", src_id, src_data);
6606
			dev_err(rdev->dev, "GPU fault detected: %d 0x%08x\n", src_id, src_data);
5127
			dev_err(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_ADDR   0x%08X\n",
6607
			dev_err(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_ADDR   0x%08X\n",
5128
				RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
6608
				addr);
5129
			dev_err(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
6609
			dev_err(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
5130
				RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
-
 
5131
			/* reset addr and status */
6610
				status);
5132
			WREG32_P(VM_CONTEXT1_CNTL2, 1, ~1);
6611
			si_vm_decode_fault(rdev, status, addr);
5133
			break;
6612
			break;
5134
		case 176: /* RINGID0 CP_INT */
6613
		case 176: /* RINGID0 CP_INT */
5135
			radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX);
6614
			radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX);
5136
			break;
6615
			break;
5137
		case 177: /* RINGID1 CP_INT */
6616
		case 177: /* RINGID1 CP_INT */
Line 5156... Line 6635...
5156
			break;
6635
			break;
5157
		case 224: /* DMA trap event */
6636
		case 224: /* DMA trap event */
5158
			DRM_DEBUG("IH: DMA trap\n");
6637
			DRM_DEBUG("IH: DMA trap\n");
5159
			radeon_fence_process(rdev, R600_RING_TYPE_DMA_INDEX);
6638
			radeon_fence_process(rdev, R600_RING_TYPE_DMA_INDEX);
5160
			break;
6639
			break;
-
 
6640
		case 230: /* thermal low to high */
-
 
6641
			DRM_DEBUG("IH: thermal low to high\n");
-
 
6642
			rdev->pm.dpm.thermal.high_to_low = false;
-
 
6643
			queue_thermal = true;
-
 
6644
			break;
-
 
6645
		case 231: /* thermal high to low */
-
 
6646
			DRM_DEBUG("IH: thermal high to low\n");
-
 
6647
			rdev->pm.dpm.thermal.high_to_low = true;
-
 
6648
			queue_thermal = true;
-
 
6649
			break;
5161
		case 233: /* GUI IDLE */
6650
		case 233: /* GUI IDLE */
5162
			DRM_DEBUG("IH: GUI idle\n");
6651
			DRM_DEBUG("IH: GUI idle\n");
5163
			break;
6652
			break;
5164
		case 244: /* DMA trap event */
6653
		case 244: /* DMA trap event */
5165
			DRM_DEBUG("IH: DMA1 trap\n");
6654
			DRM_DEBUG("IH: DMA1 trap\n");
Line 5186... Line 6675...
5186
		goto restart_ih;
6675
		goto restart_ih;
Line 5187... Line 6676...
5187
 
6676
 
5188
	return IRQ_HANDLED;
6677
	return IRQ_HANDLED;
Line 5189... Line -...
5189
}
-
 
5190
 
-
 
5191
/**
-
 
5192
 * si_copy_dma - copy pages using the DMA engine
-
 
5193
 *
-
 
5194
 * @rdev: radeon_device pointer
-
 
5195
 * @src_offset: src GPU address
-
 
5196
 * @dst_offset: dst GPU address
-
 
5197
 * @num_gpu_pages: number of GPU pages to xfer
-
 
5198
 * @fence: radeon fence object
-
 
5199
 *
-
 
5200
 * Copy GPU paging using the DMA engine (SI).
-
 
5201
 * Used by the radeon ttm implementation to move pages if
-
 
5202
 * registered as the asic copy callback.
-
 
5203
 */
-
 
5204
int si_copy_dma(struct radeon_device *rdev,
-
 
5205
		uint64_t src_offset, uint64_t dst_offset,
-
 
5206
		unsigned num_gpu_pages,
-
 
5207
		struct radeon_fence **fence)
-
 
5208
{
-
 
5209
	struct radeon_semaphore *sem = NULL;
-
 
5210
	int ring_index = rdev->asic->copy.dma_ring_index;
-
 
5211
	struct radeon_ring *ring = &rdev->ring[ring_index];
-
 
5212
	u32 size_in_bytes, cur_size_in_bytes;
-
 
5213
	int i, num_loops;
-
 
5214
	int r = 0;
-
 
5215
 
-
 
5216
	r = radeon_semaphore_create(rdev, &sem);
-
 
5217
	if (r) {
-
 
5218
		DRM_ERROR("radeon: moving bo (%d).\n", r);
-
 
5219
		return r;
-
 
5220
	}
-
 
5221
 
-
 
5222
	size_in_bytes = (num_gpu_pages << RADEON_GPU_PAGE_SHIFT);
-
 
5223
	num_loops = DIV_ROUND_UP(size_in_bytes, 0xfffff);
-
 
5224
	r = radeon_ring_lock(rdev, ring, num_loops * 5 + 11);
-
 
5225
	if (r) {
-
 
5226
		DRM_ERROR("radeon: moving bo (%d).\n", r);
-
 
5227
		radeon_semaphore_free(rdev, &sem, NULL);
-
 
5228
		return r;
-
 
5229
	}
-
 
5230
 
-
 
5231
	if (radeon_fence_need_sync(*fence, ring->idx)) {
-
 
5232
		radeon_semaphore_sync_rings(rdev, sem, (*fence)->ring,
-
 
5233
					    ring->idx);
-
 
5234
		radeon_fence_note_sync(*fence, ring->idx);
-
 
5235
	} else {
-
 
5236
		radeon_semaphore_free(rdev, &sem, NULL);
-
 
5237
	}
-
 
5238
 
-
 
5239
	for (i = 0; i < num_loops; i++) {
-
 
5240
		cur_size_in_bytes = size_in_bytes;
-
 
5241
		if (cur_size_in_bytes > 0xFFFFF)
-
 
5242
			cur_size_in_bytes = 0xFFFFF;
-
 
5243
		size_in_bytes -= cur_size_in_bytes;
-
 
5244
		radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_COPY, 1, 0, 0, cur_size_in_bytes));
-
 
5245
		radeon_ring_write(ring, dst_offset & 0xffffffff);
-
 
5246
		radeon_ring_write(ring, src_offset & 0xffffffff);
-
 
5247
		radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff);
-
 
5248
		radeon_ring_write(ring, upper_32_bits(src_offset) & 0xff);
-
 
5249
		src_offset += cur_size_in_bytes;
-
 
5250
		dst_offset += cur_size_in_bytes;
-
 
5251
	}
-
 
5252
 
-
 
5253
	r = radeon_fence_emit(rdev, fence, ring->idx);
-
 
5254
	if (r) {
-
 
5255
		radeon_ring_unlock_undo(rdev, ring);
-
 
5256
		return r;
-
 
5257
	}
-
 
5258
 
-
 
5259
	radeon_ring_unlock_commit(rdev, ring);
-
 
5260
	radeon_semaphore_free(rdev, &sem, *fence);
-
 
5261
 
-
 
5262
	return r;
-
 
5263
}
6678
}
5264
 
6679
 
5265
/*
6680
/*
5266
 * startup/shutdown callbacks
6681
 * startup/shutdown callbacks
5267
 */
6682
 */
5268
static int si_startup(struct radeon_device *rdev)
6683
static int si_startup(struct radeon_device *rdev)
5269
{
6684
{
Line 5270... Line 6685...
5270
	struct radeon_ring *ring;
6685
	struct radeon_ring *ring;
5271
	int r;
6686
	int r;
-
 
6687
 
-
 
6688
	/* enable pcie gen2/3 link */
-
 
6689
	si_pcie_gen3_enable(rdev);
-
 
6690
	/* enable aspm */
5272
 
6691
	si_program_aspm(rdev);
5273
	if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
6692
 
5274
	    !rdev->rlc_fw || !rdev->mc_fw) {
-
 
5275
		r = si_init_microcode(rdev);
6693
	/* scratch needs to be initialized before MC */
5276
		if (r) {
-
 
5277
			DRM_ERROR("Failed to load firmware!\n");
-
 
Line -... Line 6694...
-
 
6694
	r = r600_vram_scratch_init(rdev);
-
 
6695
	if (r)
-
 
6696
		return r;
5278
			return r;
6697
 
5279
		}
6698
	si_mc_program(rdev);
5280
	}
6699
 
5281
 
6700
	if (!rdev->pm.dpm_enabled) {
5282
	r = si_mc_load_microcode(rdev);
6701
		r = si_mc_load_microcode(rdev);
-
 
6702
		if (r) {
Line 5283... Line -...
5283
	if (r) {
-
 
5284
		DRM_ERROR("Failed to load MC firmware!\n");
-
 
5285
		return r;
-
 
5286
	}
-
 
5287
 
-
 
5288
	r = r600_vram_scratch_init(rdev);
6703
			DRM_ERROR("Failed to load MC firmware!\n");
5289
	if (r)
6704
			return r;
5290
		return r;
6705
		}
5291
 
6706
	}
Line 5292... Line 6707...
5292
	si_mc_program(rdev);
6707
 
-
 
6708
	r = si_pcie_gart_enable(rdev);
-
 
6709
	if (r)
-
 
6710
		return r;
-
 
6711
	si_gpu_init(rdev);
-
 
6712
 
-
 
6713
	/* allocate rlc buffers */
5293
	r = si_pcie_gart_enable(rdev);
6714
	if (rdev->family == CHIP_VERDE) {
5294
	if (r)
6715
		rdev->rlc.reg_list = verde_rlc_save_restore_register_list;
5295
		return r;
6716
		rdev->rlc.reg_list_size =
5296
	si_gpu_init(rdev);
6717
			(u32)ARRAY_SIZE(verde_rlc_save_restore_register_list);
5297
 
6718
	}
Line 5335... Line 6756...
5335
	if (r) {
6756
	if (r) {
5336
		dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r);
6757
		dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r);
5337
		return r;
6758
		return r;
5338
	}
6759
	}
Line -... Line 6760...
-
 
6760
 
-
 
6761
	if (rdev->has_uvd) {
-
 
6762
		r = uvd_v2_2_resume(rdev);
-
 
6763
		if (!r) {
-
 
6764
			r = radeon_fence_driver_start_ring(rdev,
-
 
6765
							   R600_RING_TYPE_UVD_INDEX);
-
 
6766
			if (r)
-
 
6767
				dev_err(rdev->dev, "UVD fences init error (%d).\n", r);
-
 
6768
		}
-
 
6769
		if (r)
-
 
6770
			rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_size = 0;
Line 5339... Line 6771...
5339
 
6771
	}
5340
 
6772
 
5341
	/* Enable IRQ */
6773
	/* Enable IRQ */
5342
	if (!rdev->irq.installed) {
6774
	if (!rdev->irq.installed) {
Line 5353... Line 6785...
5353
	}
6785
	}
5354
	si_irq_set(rdev);
6786
	si_irq_set(rdev);
Line 5355... Line 6787...
5355
 
6787
 
5356
	ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
6788
	ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
5357
	r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP_RPTR_OFFSET,
-
 
5358
			     CP_RB0_RPTR, CP_RB0_WPTR,
6789
	r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP_RPTR_OFFSET,
5359
			     0, 0xfffff, RADEON_CP_PACKET2);
6790
			     RADEON_CP_PACKET2);
5360
	if (r)
6791
	if (r)
Line 5361... Line 6792...
5361
		return r;
6792
		return r;
5362
 
6793
 
5363
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
-
 
5364
	r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP1_RPTR_OFFSET,
6794
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
5365
			     CP_RB1_RPTR, CP_RB1_WPTR,
6795
	r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP1_RPTR_OFFSET,
5366
			     0, 0xfffff, RADEON_CP_PACKET2);
6796
			     RADEON_CP_PACKET2);
Line 5367... Line 6797...
5367
	if (r)
6797
	if (r)
5368
		return r;
6798
		return r;
5369
 
-
 
5370
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
6799
 
5371
	r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP2_RPTR_OFFSET,
6800
	ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
5372
			     CP_RB2_RPTR, CP_RB2_WPTR,
6801
	r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP2_RPTR_OFFSET,
Line 5373... Line 6802...
5373
			     0, 0xfffff, RADEON_CP_PACKET2);
6802
			     RADEON_CP_PACKET2);
5374
	if (r)
6803
	if (r)
5375
		return r;
-
 
5376
 
-
 
5377
	ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX];
6804
		return r;
5378
	r = radeon_ring_init(rdev, ring, ring->ring_size, R600_WB_DMA_RPTR_OFFSET,
6805
 
5379
			     DMA_RB_RPTR + DMA0_REGISTER_OFFSET,
6806
	ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX];
Line 5380... Line 6807...
5380
			     DMA_RB_WPTR + DMA0_REGISTER_OFFSET,
6807
	r = radeon_ring_init(rdev, ring, ring->ring_size, R600_WB_DMA_RPTR_OFFSET,
5381
			     2, 0x3fffc, DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0, 0));
6808
			     DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0, 0));
5382
	if (r)
-
 
5383
		return r;
-
 
5384
 
6809
	if (r)
5385
	ring = &rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX];
6810
		return r;
5386
	r = radeon_ring_init(rdev, ring, ring->ring_size, CAYMAN_WB_DMA1_RPTR_OFFSET,
6811
 
Line 5387... Line 6812...
5387
			     DMA_RB_RPTR + DMA1_REGISTER_OFFSET,
6812
	ring = &rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX];
5388
			     DMA_RB_WPTR + DMA1_REGISTER_OFFSET,
6813
	r = radeon_ring_init(rdev, ring, ring->ring_size, CAYMAN_WB_DMA1_RPTR_OFFSET,
Line 5399... Line 6824...
5399
 
6824
 
5400
	r = cayman_dma_resume(rdev);
6825
	r = cayman_dma_resume(rdev);
5401
	if (r)
6826
	if (r)
Line -... Line 6827...
-
 
6827
		return r;
-
 
6828
 
-
 
6829
	if (rdev->has_uvd) {
-
 
6830
		ring = &rdev->ring[R600_RING_TYPE_UVD_INDEX];
-
 
6831
		if (ring->ring_size) {
-
 
6832
			r = radeon_ring_init(rdev, ring, ring->ring_size, 0,
-
 
6833
					     RADEON_CP_PACKET2);
-
 
6834
			if (!r)
-
 
6835
				r = uvd_v1_0_init(rdev);
-
 
6836
			if (r)
-
 
6837
				DRM_ERROR("radeon: failed initializing UVD (%d).\n", r);
Line 5402... Line 6838...
5402
		return r;
6838
		}
5403
 
6839
	}
5404
 
6840
 
5405
	r = radeon_ib_pool_init(rdev);
6841
	r = radeon_ib_pool_init(rdev);
Line 5412... Line 6848...
5412
	if (r) {
6848
	if (r) {
5413
		dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r);
6849
		dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r);
5414
		return r;
6850
		return r;
5415
	}
6851
	}
Line -... Line 6852...
-
 
6852
 
-
 
6853
	r = dce6_audio_init(rdev);
-
 
6854
	if (r)
-
 
6855
		return r;
5416
 
6856
 
5417
	return 0;
6857
	return 0;
Line 5429... Line 6869...
5429
int si_init(struct radeon_device *rdev)
6869
int si_init(struct radeon_device *rdev)
5430
{
6870
{
5431
	struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
6871
	struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
5432
	int r;
6872
	int r;
Line 5433... Line -...
5433
 
-
 
5434
    ENTER();
-
 
5435
 
6873
 
5436
	/* Read BIOS */
6874
	/* Read BIOS */
5437
	if (!radeon_get_bios(rdev)) {
6875
	if (!radeon_get_bios(rdev)) {
5438
		if (ASIC_IS_AVIVO(rdev))
6876
		if (ASIC_IS_AVIVO(rdev))
5439
			return -EINVAL;
6877
			return -EINVAL;
Line 5477... Line 6915...
5477
	/* Memory manager */
6915
	/* Memory manager */
5478
	r = radeon_bo_init(rdev);
6916
	r = radeon_bo_init(rdev);
5479
	if (r)
6917
	if (r)
5480
		return r;
6918
		return r;
Line -... Line 6919...
-
 
6919
 
-
 
6920
	if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
-
 
6921
	    !rdev->rlc_fw || !rdev->mc_fw) {
-
 
6922
		r = si_init_microcode(rdev);
-
 
6923
		if (r) {
-
 
6924
			DRM_ERROR("Failed to load firmware!\n");
-
 
6925
			return r;
-
 
6926
		}
-
 
6927
	}
-
 
6928
 
-
 
6929
	/* Initialize power management */
-
 
6930
	radeon_pm_init(rdev);
5481
 
6931
 
5482
	ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
6932
	ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
5483
	ring->ring_obj = NULL;
6933
	ring->ring_obj = NULL;
Line 5484... Line 6934...
5484
	r600_ring_init(rdev, ring, 1024 * 1024);
6934
	r600_ring_init(rdev, ring, 1024 * 1024);
Line 5497... Line 6947...
5497
 
6947
 
5498
	ring = &rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX];
6948
	ring = &rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX];
5499
	ring->ring_obj = NULL;
6949
	ring->ring_obj = NULL;
Line -... Line 6950...
-
 
6950
	r600_ring_init(rdev, ring, 64 * 1024);
-
 
6951
 
-
 
6952
	if (rdev->has_uvd) {
-
 
6953
		r = radeon_uvd_init(rdev);
-
 
6954
		if (!r) {
-
 
6955
			ring = &rdev->ring[R600_RING_TYPE_UVD_INDEX];
-
 
6956
			ring->ring_obj = NULL;
-
 
6957
			r600_ring_init(rdev, ring, 4096);
-
 
6958
		}
5500
	r600_ring_init(rdev, ring, 64 * 1024);
6959
	}
5501
 
6960
 
Line 5502... Line 6961...
5502
    rdev->ih.ring_obj = NULL;
6961
    rdev->ih.ring_obj = NULL;
5503
	r600_ih_ring_init(rdev, 64 * 1024);
6962
	r600_ih_ring_init(rdev, 64 * 1024);
Line 5508... Line 6967...
5508
 
6967
 
5509
	rdev->accel_working = true;
6968
	rdev->accel_working = true;
5510
    r = si_startup(rdev);
6969
    r = si_startup(rdev);
5511
	if (r) {
6970
	if (r) {
5512
		dev_err(rdev->dev, "disabling GPU acceleration\n");
6971
		dev_err(rdev->dev, "disabling GPU acceleration\n");
5513
//       si_cp_fini(rdev);
6972
		si_cp_fini(rdev);
5514
//       si_irq_fini(rdev);
6973
//       si_irq_fini(rdev);
5515
//       si_rlc_fini(rdev);
6974
//       si_rlc_fini(rdev);
5516
//       radeon_wb_fini(rdev);
6975
//       radeon_wb_fini(rdev);
5517
//       radeon_ib_pool_fini(rdev);
6976
//       radeon_ib_pool_fini(rdev);
Line 5527... Line 6986...
5527
	 */
6986
	 */
5528
	if (!rdev->mc_fw) {
6987
	if (!rdev->mc_fw) {
5529
		DRM_ERROR("radeon: MC ucode required for NI+.\n");
6988
		DRM_ERROR("radeon: MC ucode required for NI+.\n");
5530
		return -EINVAL;
6989
		return -EINVAL;
5531
	}
6990
	}
5532
    LEAVE();
-
 
Line 5533... Line 6991...
5533
 
6991
 
5534
	return 0;
6992
	return 0;
Line 5535... Line 6993...
5535
}
6993
}
Line 5552... Line 7010...
5552
	        ((uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_MSB) << 32ULL);
7010
	        ((uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_MSB) << 32ULL);
5553
	mutex_unlock(&rdev->gpu_clock_mutex);
7011
	mutex_unlock(&rdev->gpu_clock_mutex);
5554
	return clock;
7012
	return clock;
5555
}
7013
}
Line 5556... Line -...
5556
 
-
 
5557
#if 0
7014
 
5558
int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)
7015
int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)
5559
{
7016
{
5560
	unsigned fb_div = 0, vclk_div = 0, dclk_div = 0;
7017
	unsigned fb_div = 0, vclk_div = 0, dclk_div = 0;
Line 5643... Line 7100...
5643
 
7100
 
Line 5644... Line 7101...
5644
	mdelay(100);
7101
	mdelay(100);
5645
 
7102
 
-
 
7103
	return 0;
-
 
7104
}
-
 
7105
 
-
 
7106
static void si_pcie_gen3_enable(struct radeon_device *rdev)
-
 
7107
{
-
 
7108
	struct pci_dev *root = rdev->pdev->bus->self;
-
 
7109
	int bridge_pos, gpu_pos;
-
 
7110
	u32 speed_cntl, mask, current_data_rate;
-
 
7111
	int ret, i;
-
 
7112
	u16 tmp16;
-
 
7113
 
-
 
7114
	if (radeon_pcie_gen2 == 0)
-
 
7115
		return;
-
 
7116
 
-
 
7117
	if (rdev->flags & RADEON_IS_IGP)
-
 
7118
		return;
-
 
7119
 
-
 
7120
	if (!(rdev->flags & RADEON_IS_PCIE))
-
 
7121
		return;
-
 
7122
 
-
 
7123
	ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask);
-
 
7124
	if (ret != 0)
-
 
7125
		return;
-
 
7126
 
-
 
7127
	if (!(mask & (DRM_PCIE_SPEED_50 | DRM_PCIE_SPEED_80)))
-
 
7128
		return;
-
 
7129
 
-
 
7130
	speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
-
 
7131
	current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >>
-
 
7132
		LC_CURRENT_DATA_RATE_SHIFT;
-
 
7133
	if (mask & DRM_PCIE_SPEED_80) {
-
 
7134
		if (current_data_rate == 2) {
-
 
7135
			DRM_INFO("PCIE gen 3 link speeds already enabled\n");
-
 
7136
			return;
-
 
7137
		}
-
 
7138
		DRM_INFO("enabling PCIE gen 3 link speeds, disable with radeon.pcie_gen2=0\n");
-
 
7139
	} else if (mask & DRM_PCIE_SPEED_50) {
-
 
7140
		if (current_data_rate == 1) {
-
 
7141
			DRM_INFO("PCIE gen 2 link speeds already enabled\n");
-
 
7142
			return;
-
 
7143
		}
-
 
7144
		DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n");
-
 
7145
	}
-
 
7146
 
-
 
7147
	bridge_pos = pci_pcie_cap(root);
-
 
7148
	if (!bridge_pos)
-
 
7149
		return;
-
 
7150
 
-
 
7151
	gpu_pos = pci_pcie_cap(rdev->pdev);
-
 
7152
	if (!gpu_pos)
-
 
7153
		return;
-
 
7154
 
-
 
7155
	if (mask & DRM_PCIE_SPEED_80) {
-
 
7156
		/* re-try equalization if gen3 is not already enabled */
-
 
7157
		if (current_data_rate != 2) {
-
 
7158
			u16 bridge_cfg, gpu_cfg;
-
 
7159
			u16 bridge_cfg2, gpu_cfg2;
-
 
7160
			u32 max_lw, current_lw, tmp;
-
 
7161
 
-
 
7162
			pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg);
-
 
7163
			pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg);
-
 
7164
 
-
 
7165
			tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD;
-
 
7166
			pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16);
-
 
7167
 
-
 
7168
			tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD;
-
 
7169
			pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16);
-
 
7170
 
-
 
7171
			tmp = RREG32_PCIE(PCIE_LC_STATUS1);
-
 
7172
			max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT;
-
 
7173
			current_lw = (tmp & LC_OPERATING_LINK_WIDTH_MASK) >> LC_OPERATING_LINK_WIDTH_SHIFT;
-
 
7174
 
-
 
7175
			if (current_lw < max_lw) {
-
 
7176
				tmp = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL);
-
 
7177
				if (tmp & LC_RENEGOTIATION_SUPPORT) {
-
 
7178
					tmp &= ~(LC_LINK_WIDTH_MASK | LC_UPCONFIGURE_DIS);
-
 
7179
					tmp |= (max_lw << LC_LINK_WIDTH_SHIFT);
-
 
7180
					tmp |= LC_UPCONFIGURE_SUPPORT | LC_RENEGOTIATE_EN | LC_RECONFIG_NOW;
-
 
7181
					WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, tmp);
-
 
7182
				}
-
 
7183
			}
-
 
7184
 
-
 
7185
			for (i = 0; i < 10; i++) {
-
 
7186
				/* check status */
-
 
7187
				pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16);
-
 
7188
				if (tmp16 & PCI_EXP_DEVSTA_TRPND)
-
 
7189
					break;
-
 
7190
 
-
 
7191
				pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg);
-
 
7192
				pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg);
-
 
7193
 
-
 
7194
				pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2);
-
 
7195
				pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2);
-
 
7196
 
-
 
7197
				tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
-
 
7198
				tmp |= LC_SET_QUIESCE;
-
 
7199
				WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
-
 
7200
 
-
 
7201
				tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
-
 
7202
				tmp |= LC_REDO_EQ;
-
 
7203
				WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
-
 
7204
 
-
 
7205
				mdelay(100);
-
 
7206
 
-
 
7207
				/* linkctl */
-
 
7208
				pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16);
-
 
7209
				tmp16 &= ~PCI_EXP_LNKCTL_HAWD;
-
 
7210
				tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD);
-
 
7211
				pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16);
-
 
7212
 
-
 
7213
				pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16);
-
 
7214
				tmp16 &= ~PCI_EXP_LNKCTL_HAWD;
-
 
7215
				tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD);
-
 
7216
				pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16);
-
 
7217
 
-
 
7218
				/* linkctl2 */
-
 
7219
				pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16);
-
 
7220
				tmp16 &= ~((1 << 4) | (7 << 9));
-
 
7221
				tmp16 |= (bridge_cfg2 & ((1 << 4) | (7 << 9)));
-
 
7222
				pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16);
-
 
7223
 
-
 
7224
				pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
-
 
7225
				tmp16 &= ~((1 << 4) | (7 << 9));
-
 
7226
				tmp16 |= (gpu_cfg2 & ((1 << 4) | (7 << 9)));
-
 
7227
				pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16);
-
 
7228
 
-
 
7229
				tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
-
 
7230
				tmp &= ~LC_SET_QUIESCE;
-
 
7231
				WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
-
 
7232
			}
-
 
7233
		}
-
 
7234
	}
-
 
7235
 
-
 
7236
	/* set the link speed */
-
 
7237
	speed_cntl |= LC_FORCE_EN_SW_SPEED_CHANGE | LC_FORCE_DIS_HW_SPEED_CHANGE;
-
 
7238
	speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE;
-
 
7239
	WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
-
 
7240
 
-
 
7241
	pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
-
 
7242
	tmp16 &= ~0xf;
-
 
7243
	if (mask & DRM_PCIE_SPEED_80)
-
 
7244
		tmp16 |= 3; /* gen3 */
5646
	return 0;
7245
	else if (mask & DRM_PCIE_SPEED_50)
-
 
7246
		tmp16 |= 2; /* gen2 */
-
 
7247
	else
-
 
7248
		tmp16 |= 1; /* gen1 */
-
 
7249
	pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16);
-
 
7250
 
-
 
7251
	speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
-
 
7252
	speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE;
-
 
7253
	WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
-
 
7254
 
-
 
7255
	for (i = 0; i < rdev->usec_timeout; i++) {
-
 
7256
		speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
-
 
7257
		if ((speed_cntl & LC_INITIATE_LINK_SPEED_CHANGE) == 0)
-
 
7258
			break;
-
 
7259
		udelay(1);
-
 
7260
	}
-
 
7261
}
-
 
7262
 
-
 
7263
static void si_program_aspm(struct radeon_device *rdev)
-
 
7264
{
-
 
7265
	u32 data, orig;
-
 
7266
	bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false;
-
 
7267
	bool disable_clkreq = false;
-
 
7268
 
-
 
7269
	if (radeon_aspm == 0)
-
 
7270
		return;
-
 
7271
 
-
 
7272
	if (!(rdev->flags & RADEON_IS_PCIE))
-
 
7273
		return;
-
 
7274
 
-
 
7275
	orig = data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL);
-
 
7276
	data &= ~LC_XMIT_N_FTS_MASK;
-
 
7277
	data |= LC_XMIT_N_FTS(0x24) | LC_XMIT_N_FTS_OVERRIDE_EN;
-
 
7278
	if (orig != data)
-
 
7279
		WREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL, data);
-
 
7280
 
-
 
7281
	orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL3);
-
 
7282
	data |= LC_GO_TO_RECOVERY;
-
 
7283
	if (orig != data)
-
 
7284
		WREG32_PCIE_PORT(PCIE_LC_CNTL3, data);
-
 
7285
 
-
 
7286
	orig = data = RREG32_PCIE(PCIE_P_CNTL);
-
 
7287
	data |= P_IGNORE_EDB_ERR;
-
 
7288
	if (orig != data)
-
 
7289
		WREG32_PCIE(PCIE_P_CNTL, data);
-
 
7290
 
-
 
7291
	orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL);
-
 
7292
	data &= ~(LC_L0S_INACTIVITY_MASK | LC_L1_INACTIVITY_MASK);
-
 
7293
	data |= LC_PMI_TO_L1_DIS;
-
 
7294
	if (!disable_l0s)
-
 
7295
		data |= LC_L0S_INACTIVITY(7);
-
 
7296
 
-
 
7297
	if (!disable_l1) {
-
 
7298
		data |= LC_L1_INACTIVITY(7);
-
 
7299
		data &= ~LC_PMI_TO_L1_DIS;
-
 
7300
		if (orig != data)
-
 
7301
			WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
-
 
7302
 
-
 
7303
		if (!disable_plloff_in_l1) {
-
 
7304
			bool clk_req_support;
-
 
7305
 
-
 
7306
			orig = data = RREG32_PIF_PHY0(PB0_PIF_PWRDOWN_0);
-
 
7307
			data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK);
-
 
7308
			data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7);
-
 
7309
			if (orig != data)
-
 
7310
				WREG32_PIF_PHY0(PB0_PIF_PWRDOWN_0, data);
-
 
7311
 
-
 
7312
			orig = data = RREG32_PIF_PHY0(PB0_PIF_PWRDOWN_1);
-
 
7313
			data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK);
-
 
7314
			data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7);
-
 
7315
			if (orig != data)
-
 
7316
				WREG32_PIF_PHY0(PB0_PIF_PWRDOWN_1, data);
-
 
7317
 
-
 
7318
			orig = data = RREG32_PIF_PHY1(PB1_PIF_PWRDOWN_0);
-
 
7319
			data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK);
-
 
7320
			data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7);
-
 
7321
			if (orig != data)
-
 
7322
				WREG32_PIF_PHY1(PB1_PIF_PWRDOWN_0, data);
-
 
7323
 
-
 
7324
			orig = data = RREG32_PIF_PHY1(PB1_PIF_PWRDOWN_1);
-
 
7325
			data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK);
-
 
7326
			data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7);
-
 
7327
			if (orig != data)
-
 
7328
				WREG32_PIF_PHY1(PB1_PIF_PWRDOWN_1, data);
-
 
7329
 
-
 
7330
			if ((rdev->family != CHIP_OLAND) && (rdev->family != CHIP_HAINAN)) {
-
 
7331
				orig = data = RREG32_PIF_PHY0(PB0_PIF_PWRDOWN_0);
-
 
7332
				data &= ~PLL_RAMP_UP_TIME_0_MASK;
-
 
7333
				if (orig != data)
-
 
7334
					WREG32_PIF_PHY0(PB0_PIF_PWRDOWN_0, data);
-
 
7335
 
-
 
7336
				orig = data = RREG32_PIF_PHY0(PB0_PIF_PWRDOWN_1);
-
 
7337
				data &= ~PLL_RAMP_UP_TIME_1_MASK;
-
 
7338
				if (orig != data)
-
 
7339
					WREG32_PIF_PHY0(PB0_PIF_PWRDOWN_1, data);
-
 
7340
 
-
 
7341
				orig = data = RREG32_PIF_PHY0(PB0_PIF_PWRDOWN_2);
-
 
7342
				data &= ~PLL_RAMP_UP_TIME_2_MASK;
-
 
7343
				if (orig != data)
-
 
7344
					WREG32_PIF_PHY0(PB0_PIF_PWRDOWN_2, data);
-
 
7345
 
-
 
7346
				orig = data = RREG32_PIF_PHY0(PB0_PIF_PWRDOWN_3);
-
 
7347
				data &= ~PLL_RAMP_UP_TIME_3_MASK;
-
 
7348
				if (orig != data)
-
 
7349
					WREG32_PIF_PHY0(PB0_PIF_PWRDOWN_3, data);
-
 
7350
 
-
 
7351
				orig = data = RREG32_PIF_PHY1(PB1_PIF_PWRDOWN_0);
-
 
7352
				data &= ~PLL_RAMP_UP_TIME_0_MASK;
-
 
7353
				if (orig != data)
-
 
7354
					WREG32_PIF_PHY1(PB1_PIF_PWRDOWN_0, data);
-
 
7355
 
-
 
7356
				orig = data = RREG32_PIF_PHY1(PB1_PIF_PWRDOWN_1);
-
 
7357
				data &= ~PLL_RAMP_UP_TIME_1_MASK;
-
 
7358
				if (orig != data)
-
 
7359
					WREG32_PIF_PHY1(PB1_PIF_PWRDOWN_1, data);
-
 
7360
 
-
 
7361
				orig = data = RREG32_PIF_PHY1(PB1_PIF_PWRDOWN_2);
-
 
7362
				data &= ~PLL_RAMP_UP_TIME_2_MASK;
-
 
7363
				if (orig != data)
-
 
7364
					WREG32_PIF_PHY1(PB1_PIF_PWRDOWN_2, data);
-
 
7365
 
-
 
7366
				orig = data = RREG32_PIF_PHY1(PB1_PIF_PWRDOWN_3);
-
 
7367
				data &= ~PLL_RAMP_UP_TIME_3_MASK;
-
 
7368
				if (orig != data)
-
 
7369
					WREG32_PIF_PHY1(PB1_PIF_PWRDOWN_3, data);
-
 
7370
			}
-
 
7371
			orig = data = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL);
-
 
7372
			data &= ~LC_DYN_LANES_PWR_STATE_MASK;
-
 
7373
			data |= LC_DYN_LANES_PWR_STATE(3);
-
 
7374
			if (orig != data)
-
 
7375
				WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, data);
-
 
7376
 
-
 
7377
			orig = data = RREG32_PIF_PHY0(PB0_PIF_CNTL);
-
 
7378
			data &= ~LS2_EXIT_TIME_MASK;
-
 
7379
			if ((rdev->family == CHIP_OLAND) || (rdev->family == CHIP_HAINAN))
-
 
7380
				data |= LS2_EXIT_TIME(5);
-
 
7381
			if (orig != data)
-
 
7382
				WREG32_PIF_PHY0(PB0_PIF_CNTL, data);
-
 
7383
 
-
 
7384
			orig = data = RREG32_PIF_PHY1(PB1_PIF_CNTL);
-
 
7385
			data &= ~LS2_EXIT_TIME_MASK;
-
 
7386
			if ((rdev->family == CHIP_OLAND) || (rdev->family == CHIP_HAINAN))
-
 
7387
				data |= LS2_EXIT_TIME(5);
-
 
7388
			if (orig != data)
-
 
7389
				WREG32_PIF_PHY1(PB1_PIF_CNTL, data);
-
 
7390
 
-
 
7391
			if (!disable_clkreq) {
-
 
7392
				struct pci_dev *root = rdev->pdev->bus->self;
-
 
7393
				u32 lnkcap;
-
 
7394
 
-
 
7395
				clk_req_support = false;
-
 
7396
				pcie_capability_read_dword(root, PCI_EXP_LNKCAP, &lnkcap);
-
 
7397
				if (lnkcap & PCI_EXP_LNKCAP_CLKPM)
-
 
7398
					clk_req_support = true;
-
 
7399
			} else {
-
 
7400
				clk_req_support = false;
-
 
7401
			}
-
 
7402
 
-
 
7403
			if (clk_req_support) {
-
 
7404
				orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL2);
-
 
7405
				data |= LC_ALLOW_PDWN_IN_L1 | LC_ALLOW_PDWN_IN_L23;
-
 
7406
				if (orig != data)
-
 
7407
					WREG32_PCIE_PORT(PCIE_LC_CNTL2, data);
-
 
7408
 
-
 
7409
				orig = data = RREG32(THM_CLK_CNTL);
-
 
7410
				data &= ~(CMON_CLK_SEL_MASK | TMON_CLK_SEL_MASK);
-
 
7411
				data |= CMON_CLK_SEL(1) | TMON_CLK_SEL(1);
-
 
7412
				if (orig != data)
-
 
7413
					WREG32(THM_CLK_CNTL, data);
-
 
7414
 
-
 
7415
				orig = data = RREG32(MISC_CLK_CNTL);
-
 
7416
				data &= ~(DEEP_SLEEP_CLK_SEL_MASK | ZCLK_SEL_MASK);
-
 
7417
				data |= DEEP_SLEEP_CLK_SEL(1) | ZCLK_SEL(1);
-
 
7418
				if (orig != data)
-
 
7419
					WREG32(MISC_CLK_CNTL, data);
-
 
7420
 
-
 
7421
				orig = data = RREG32(CG_CLKPIN_CNTL);
-
 
7422
				data &= ~BCLK_AS_XCLK;
-
 
7423
				if (orig != data)
-
 
7424
					WREG32(CG_CLKPIN_CNTL, data);
-
 
7425
 
-
 
7426
				orig = data = RREG32(CG_CLKPIN_CNTL_2);
-
 
7427
				data &= ~FORCE_BIF_REFCLK_EN;
-
 
7428
				if (orig != data)
-
 
7429
					WREG32(CG_CLKPIN_CNTL_2, data);
-
 
7430
 
-
 
7431
				orig = data = RREG32(MPLL_BYPASSCLK_SEL);
-
 
7432
				data &= ~MPLL_CLKOUT_SEL_MASK;
-
 
7433
				data |= MPLL_CLKOUT_SEL(4);
-
 
7434
				if (orig != data)
-
 
7435
					WREG32(MPLL_BYPASSCLK_SEL, data);
-
 
7436
 
-
 
7437
				orig = data = RREG32(SPLL_CNTL_MODE);
-
 
7438
				data &= ~SPLL_REFCLK_SEL_MASK;
-
 
7439
				if (orig != data)
-
 
7440
					WREG32(SPLL_CNTL_MODE, data);
-
 
7441
			}
-
 
7442
		}
-
 
7443
	} else {
-
 
7444
		if (orig != data)
-
 
7445
			WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
-
 
7446
	}
-
 
7447
 
-
 
7448
	orig = data = RREG32_PCIE(PCIE_CNTL2);
-
 
7449
	data |= SLV_MEM_LS_EN | MST_MEM_LS_EN | REPLAY_MEM_LS_EN;
-
 
7450
	if (orig != data)
-
 
7451
		WREG32_PCIE(PCIE_CNTL2, data);
-
 
7452
 
-
 
7453
	if (!disable_l0s) {
-
 
7454
		data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL);
-
 
7455
		if((data & LC_N_FTS_MASK) == LC_N_FTS_MASK) {
-
 
7456
			data = RREG32_PCIE(PCIE_LC_STATUS1);
-
 
7457
			if ((data & LC_REVERSE_XMIT) && (data & LC_REVERSE_RCVR)) {
-
 
7458
				orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL);
-
 
7459
				data &= ~LC_L0S_INACTIVITY_MASK;
-
 
7460
				if (orig != data)
-
 
7461
					WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
-
 
7462
			}
-
 
7463
		}