Subversion Repositories Kolibri OS

Rev

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

Rev 3192 Rev 3764
Line 36... Line 36...
36
#define SI_PFP_UCODE_SIZE 2144
36
#define SI_PFP_UCODE_SIZE 2144
37
#define SI_PM4_UCODE_SIZE 2144
37
#define SI_PM4_UCODE_SIZE 2144
38
#define SI_CE_UCODE_SIZE 2144
38
#define SI_CE_UCODE_SIZE 2144
39
#define SI_RLC_UCODE_SIZE 2048
39
#define SI_RLC_UCODE_SIZE 2048
40
#define SI_MC_UCODE_SIZE 7769
40
#define SI_MC_UCODE_SIZE 7769
-
 
41
#define OLAND_MC_UCODE_SIZE 7863
Line 41... Line 42...
41
 
42
 
42
MODULE_FIRMWARE("radeon/TAHITI_pfp.bin");
43
MODULE_FIRMWARE("radeon/TAHITI_pfp.bin");
43
MODULE_FIRMWARE("radeon/TAHITI_me.bin");
44
MODULE_FIRMWARE("radeon/TAHITI_me.bin");
44
MODULE_FIRMWARE("radeon/TAHITI_ce.bin");
45
MODULE_FIRMWARE("radeon/TAHITI_ce.bin");
Line 52... Line 53...
52
MODULE_FIRMWARE("radeon/VERDE_pfp.bin");
53
MODULE_FIRMWARE("radeon/VERDE_pfp.bin");
53
MODULE_FIRMWARE("radeon/VERDE_me.bin");
54
MODULE_FIRMWARE("radeon/VERDE_me.bin");
54
MODULE_FIRMWARE("radeon/VERDE_ce.bin");
55
MODULE_FIRMWARE("radeon/VERDE_ce.bin");
55
MODULE_FIRMWARE("radeon/VERDE_mc.bin");
56
MODULE_FIRMWARE("radeon/VERDE_mc.bin");
56
MODULE_FIRMWARE("radeon/VERDE_rlc.bin");
57
MODULE_FIRMWARE("radeon/VERDE_rlc.bin");
-
 
58
MODULE_FIRMWARE("radeon/OLAND_pfp.bin");
-
 
59
MODULE_FIRMWARE("radeon/OLAND_me.bin");
-
 
60
MODULE_FIRMWARE("radeon/OLAND_ce.bin");
-
 
61
MODULE_FIRMWARE("radeon/OLAND_mc.bin");
-
 
62
MODULE_FIRMWARE("radeon/OLAND_rlc.bin");
-
 
63
MODULE_FIRMWARE("radeon/HAINAN_pfp.bin");
-
 
64
MODULE_FIRMWARE("radeon/HAINAN_me.bin");
-
 
65
MODULE_FIRMWARE("radeon/HAINAN_ce.bin");
-
 
66
MODULE_FIRMWARE("radeon/HAINAN_mc.bin");
-
 
67
MODULE_FIRMWARE("radeon/HAINAN_rlc.bin");
Line 57... Line 68...
57
 
68
 
58
extern int r600_ih_ring_alloc(struct radeon_device *rdev);
69
extern int r600_ih_ring_alloc(struct radeon_device *rdev);
59
extern void r600_ih_ring_fini(struct radeon_device *rdev);
70
extern void r600_ih_ring_fini(struct radeon_device *rdev);
60
extern void evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev);
71
extern void evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev);
61
extern void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save);
72
extern void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save);
62
extern void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save);
73
extern void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save);
-
 
74
extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev);
-
 
75
extern void evergreen_print_gpu_status_regs(struct radeon_device *rdev);
-
 
76
extern bool evergreen_is_display_hung(struct radeon_device *rdev);
-
 
77
 
-
 
78
static const u32 tahiti_golden_rlc_registers[] =
-
 
79
{
-
 
80
	0xc424, 0xffffffff, 0x00601005,
-
 
81
	0xc47c, 0xffffffff, 0x10104040,
-
 
82
	0xc488, 0xffffffff, 0x0100000a,
-
 
83
	0xc314, 0xffffffff, 0x00000800,
-
 
84
	0xc30c, 0xffffffff, 0x800000f4,
-
 
85
	0xf4a8, 0xffffffff, 0x00000000
-
 
86
};
-
 
87
 
-
 
88
static const u32 tahiti_golden_registers[] =
-
 
89
{
-
 
90
	0x9a10, 0x00010000, 0x00018208,
-
 
91
	0x9830, 0xffffffff, 0x00000000,
-
 
92
	0x9834, 0xf00fffff, 0x00000400,
-
 
93
	0x9838, 0x0002021c, 0x00020200,
-
 
94
	0xc78, 0x00000080, 0x00000000,
-
 
95
	0xd030, 0x000300c0, 0x00800040,
-
 
96
	0xd830, 0x000300c0, 0x00800040,
-
 
97
	0x5bb0, 0x000000f0, 0x00000070,
-
 
98
	0x5bc0, 0x00200000, 0x50100000,
-
 
99
	0x7030, 0x31000311, 0x00000011,
-
 
100
	0x277c, 0x00000003, 0x000007ff,
-
 
101
	0x240c, 0x000007ff, 0x00000000,
-
 
102
	0x8a14, 0xf000001f, 0x00000007,
-
 
103
	0x8b24, 0xffffffff, 0x00ffffff,
-
 
104
	0x8b10, 0x0000ff0f, 0x00000000,
-
 
105
	0x28a4c, 0x07ffffff, 0x4e000000,
-
 
106
	0x28350, 0x3f3f3fff, 0x2a00126a,
-
 
107
	0x30, 0x000000ff, 0x0040,
-
 
108
	0x34, 0x00000040, 0x00004040,
-
 
109
	0x9100, 0x07ffffff, 0x03000000,
-
 
110
	0x8e88, 0x01ff1f3f, 0x00000000,
-
 
111
	0x8e84, 0x01ff1f3f, 0x00000000,
-
 
112
	0x9060, 0x0000007f, 0x00000020,
-
 
113
	0x9508, 0x00010000, 0x00010000,
-
 
114
	0xac14, 0x00000200, 0x000002fb,
-
 
115
	0xac10, 0xffffffff, 0x0000543b,
-
 
116
	0xac0c, 0xffffffff, 0xa9210876,
-
 
117
	0x88d0, 0xffffffff, 0x000fff40,
-
 
118
	0x88d4, 0x0000001f, 0x00000010,
-
 
119
	0x1410, 0x20000000, 0x20fffed8,
-
 
120
	0x15c0, 0x000c0fc0, 0x000c0400
-
 
121
};
-
 
122
 
-
 
123
static const u32 tahiti_golden_registers2[] =
-
 
124
{
-
 
125
	0xc64, 0x00000001, 0x00000001
-
 
126
};
-
 
127
 
-
 
128
static const u32 pitcairn_golden_rlc_registers[] =
-
 
129
{
-
 
130
	0xc424, 0xffffffff, 0x00601004,
-
 
131
	0xc47c, 0xffffffff, 0x10102020,
-
 
132
	0xc488, 0xffffffff, 0x01000020,
-
 
133
	0xc314, 0xffffffff, 0x00000800,
-
 
134
	0xc30c, 0xffffffff, 0x800000a4
-
 
135
};
-
 
136
 
-
 
137
static const u32 pitcairn_golden_registers[] =
-
 
138
{
-
 
139
	0x9a10, 0x00010000, 0x00018208,
-
 
140
	0x9830, 0xffffffff, 0x00000000,
-
 
141
	0x9834, 0xf00fffff, 0x00000400,
-
 
142
	0x9838, 0x0002021c, 0x00020200,
-
 
143
	0xc78, 0x00000080, 0x00000000,
-
 
144
	0xd030, 0x000300c0, 0x00800040,
-
 
145
	0xd830, 0x000300c0, 0x00800040,
-
 
146
	0x5bb0, 0x000000f0, 0x00000070,
-
 
147
	0x5bc0, 0x00200000, 0x50100000,
-
 
148
	0x7030, 0x31000311, 0x00000011,
-
 
149
	0x2ae4, 0x00073ffe, 0x000022a2,
-
 
150
	0x240c, 0x000007ff, 0x00000000,
-
 
151
	0x8a14, 0xf000001f, 0x00000007,
-
 
152
	0x8b24, 0xffffffff, 0x00ffffff,
-
 
153
	0x8b10, 0x0000ff0f, 0x00000000,
-
 
154
	0x28a4c, 0x07ffffff, 0x4e000000,
-
 
155
	0x28350, 0x3f3f3fff, 0x2a00126a,
-
 
156
	0x30, 0x000000ff, 0x0040,
-
 
157
	0x34, 0x00000040, 0x00004040,
-
 
158
	0x9100, 0x07ffffff, 0x03000000,
-
 
159
	0x9060, 0x0000007f, 0x00000020,
-
 
160
	0x9508, 0x00010000, 0x00010000,
-
 
161
	0xac14, 0x000003ff, 0x000000f7,
-
 
162
	0xac10, 0xffffffff, 0x00000000,
-
 
163
	0xac0c, 0xffffffff, 0x32761054,
-
 
164
	0x88d4, 0x0000001f, 0x00000010,
-
 
165
	0x15c0, 0x000c0fc0, 0x000c0400
-
 
166
};
-
 
167
 
-
 
168
static const u32 verde_golden_rlc_registers[] =
-
 
169
{
-
 
170
	0xc424, 0xffffffff, 0x033f1005,
-
 
171
	0xc47c, 0xffffffff, 0x10808020,
-
 
172
	0xc488, 0xffffffff, 0x00800008,
-
 
173
	0xc314, 0xffffffff, 0x00001000,
-
 
174
	0xc30c, 0xffffffff, 0x80010014
-
 
175
};
-
 
176
 
-
 
177
static const u32 verde_golden_registers[] =
-
 
178
{
-
 
179
	0x9a10, 0x00010000, 0x00018208,
-
 
180
	0x9830, 0xffffffff, 0x00000000,
-
 
181
	0x9834, 0xf00fffff, 0x00000400,
-
 
182
	0x9838, 0x0002021c, 0x00020200,
-
 
183
	0xc78, 0x00000080, 0x00000000,
-
 
184
	0xd030, 0x000300c0, 0x00800040,
-
 
185
	0xd030, 0x000300c0, 0x00800040,
-
 
186
	0xd830, 0x000300c0, 0x00800040,
-
 
187
	0xd830, 0x000300c0, 0x00800040,
-
 
188
	0x5bb0, 0x000000f0, 0x00000070,
-
 
189
	0x5bc0, 0x00200000, 0x50100000,
-
 
190
	0x7030, 0x31000311, 0x00000011,
-
 
191
	0x2ae4, 0x00073ffe, 0x000022a2,
-
 
192
	0x2ae4, 0x00073ffe, 0x000022a2,
-
 
193
	0x2ae4, 0x00073ffe, 0x000022a2,
-
 
194
	0x240c, 0x000007ff, 0x00000000,
-
 
195
	0x240c, 0x000007ff, 0x00000000,
-
 
196
	0x240c, 0x000007ff, 0x00000000,
-
 
197
	0x8a14, 0xf000001f, 0x00000007,
-
 
198
	0x8a14, 0xf000001f, 0x00000007,
-
 
199
	0x8a14, 0xf000001f, 0x00000007,
-
 
200
	0x8b24, 0xffffffff, 0x00ffffff,
-
 
201
	0x8b10, 0x0000ff0f, 0x00000000,
-
 
202
	0x28a4c, 0x07ffffff, 0x4e000000,
-
 
203
	0x28350, 0x3f3f3fff, 0x0000124a,
-
 
204
	0x28350, 0x3f3f3fff, 0x0000124a,
-
 
205
	0x28350, 0x3f3f3fff, 0x0000124a,
-
 
206
	0x30, 0x000000ff, 0x0040,
-
 
207
	0x34, 0x00000040, 0x00004040,
-
 
208
	0x9100, 0x07ffffff, 0x03000000,
-
 
209
	0x9100, 0x07ffffff, 0x03000000,
-
 
210
	0x8e88, 0x01ff1f3f, 0x00000000,
-
 
211
	0x8e88, 0x01ff1f3f, 0x00000000,
-
 
212
	0x8e88, 0x01ff1f3f, 0x00000000,
-
 
213
	0x8e84, 0x01ff1f3f, 0x00000000,
-
 
214
	0x8e84, 0x01ff1f3f, 0x00000000,
-
 
215
	0x8e84, 0x01ff1f3f, 0x00000000,
-
 
216
	0x9060, 0x0000007f, 0x00000020,
-
 
217
	0x9508, 0x00010000, 0x00010000,
-
 
218
	0xac14, 0x000003ff, 0x00000003,
-
 
219
	0xac14, 0x000003ff, 0x00000003,
-
 
220
	0xac14, 0x000003ff, 0x00000003,
-
 
221
	0xac10, 0xffffffff, 0x00000000,
-
 
222
	0xac10, 0xffffffff, 0x00000000,
-
 
223
	0xac10, 0xffffffff, 0x00000000,
-
 
224
	0xac0c, 0xffffffff, 0x00001032,
-
 
225
	0xac0c, 0xffffffff, 0x00001032,
-
 
226
	0xac0c, 0xffffffff, 0x00001032,
-
 
227
	0x88d4, 0x0000001f, 0x00000010,
-
 
228
	0x88d4, 0x0000001f, 0x00000010,
-
 
229
	0x88d4, 0x0000001f, 0x00000010,
-
 
230
	0x15c0, 0x000c0fc0, 0x000c0400
-
 
231
};
-
 
232
 
-
 
233
static const u32 oland_golden_rlc_registers[] =
-
 
234
{
-
 
235
	0xc424, 0xffffffff, 0x00601005,
-
 
236
	0xc47c, 0xffffffff, 0x10104040,
-
 
237
	0xc488, 0xffffffff, 0x0100000a,
-
 
238
	0xc314, 0xffffffff, 0x00000800,
-
 
239
	0xc30c, 0xffffffff, 0x800000f4
-
 
240
};
-
 
241
 
-
 
242
static const u32 oland_golden_registers[] =
-
 
243
{
-
 
244
	0x9a10, 0x00010000, 0x00018208,
-
 
245
	0x9830, 0xffffffff, 0x00000000,
-
 
246
	0x9834, 0xf00fffff, 0x00000400,
-
 
247
	0x9838, 0x0002021c, 0x00020200,
-
 
248
	0xc78, 0x00000080, 0x00000000,
-
 
249
	0xd030, 0x000300c0, 0x00800040,
-
 
250
	0xd830, 0x000300c0, 0x00800040,
-
 
251
	0x5bb0, 0x000000f0, 0x00000070,
-
 
252
	0x5bc0, 0x00200000, 0x50100000,
-
 
253
	0x7030, 0x31000311, 0x00000011,
-
 
254
	0x2ae4, 0x00073ffe, 0x000022a2,
-
 
255
	0x240c, 0x000007ff, 0x00000000,
-
 
256
	0x8a14, 0xf000001f, 0x00000007,
-
 
257
	0x8b24, 0xffffffff, 0x00ffffff,
-
 
258
	0x8b10, 0x0000ff0f, 0x00000000,
-
 
259
	0x28a4c, 0x07ffffff, 0x4e000000,
-
 
260
	0x28350, 0x3f3f3fff, 0x00000082,
-
 
261
	0x30, 0x000000ff, 0x0040,
-
 
262
	0x34, 0x00000040, 0x00004040,
-
 
263
	0x9100, 0x07ffffff, 0x03000000,
-
 
264
	0x9060, 0x0000007f, 0x00000020,
-
 
265
	0x9508, 0x00010000, 0x00010000,
-
 
266
	0xac14, 0x000003ff, 0x000000f3,
-
 
267
	0xac10, 0xffffffff, 0x00000000,
-
 
268
	0xac0c, 0xffffffff, 0x00003210,
-
 
269
	0x88d4, 0x0000001f, 0x00000010,
-
 
270
	0x15c0, 0x000c0fc0, 0x000c0400
-
 
271
};
-
 
272
 
-
 
273
static const u32 hainan_golden_registers[] =
-
 
274
{
-
 
275
	0x9a10, 0x00010000, 0x00018208,
-
 
276
	0x9830, 0xffffffff, 0x00000000,
-
 
277
	0x9834, 0xf00fffff, 0x00000400,
-
 
278
	0x9838, 0x0002021c, 0x00020200,
-
 
279
	0xd0c0, 0xff000fff, 0x00000100,
-
 
280
	0xd030, 0x000300c0, 0x00800040,
-
 
281
	0xd8c0, 0xff000fff, 0x00000100,
-
 
282
	0xd830, 0x000300c0, 0x00800040,
-
 
283
	0x2ae4, 0x00073ffe, 0x000022a2,
-
 
284
	0x240c, 0x000007ff, 0x00000000,
-
 
285
	0x8a14, 0xf000001f, 0x00000007,
-
 
286
	0x8b24, 0xffffffff, 0x00ffffff,
-
 
287
	0x8b10, 0x0000ff0f, 0x00000000,
-
 
288
	0x28a4c, 0x07ffffff, 0x4e000000,
-
 
289
	0x28350, 0x3f3f3fff, 0x00000000,
-
 
290
	0x30, 0x000000ff, 0x0040,
-
 
291
	0x34, 0x00000040, 0x00004040,
-
 
292
	0x9100, 0x03e00000, 0x03600000,
-
 
293
	0x9060, 0x0000007f, 0x00000020,
-
 
294
	0x9508, 0x00010000, 0x00010000,
-
 
295
	0xac14, 0x000003ff, 0x000000f1,
-
 
296
	0xac10, 0xffffffff, 0x00000000,
-
 
297
	0xac0c, 0xffffffff, 0x00003210,
-
 
298
	0x88d4, 0x0000001f, 0x00000010,
-
 
299
	0x15c0, 0x000c0fc0, 0x000c0400
-
 
300
};
-
 
301
 
-
 
302
static const u32 hainan_golden_registers2[] =
-
 
303
{
-
 
304
	0x98f8, 0xffffffff, 0x02010001
-
 
305
};
-
 
306
 
-
 
307
static const u32 tahiti_mgcg_cgcg_init[] =
-
 
308
{
-
 
309
	0xc400, 0xffffffff, 0xfffffffc,
-
 
310
	0x802c, 0xffffffff, 0xe0000000,
-
 
311
	0x9a60, 0xffffffff, 0x00000100,
-
 
312
	0x92a4, 0xffffffff, 0x00000100,
-
 
313
	0xc164, 0xffffffff, 0x00000100,
-
 
314
	0x9774, 0xffffffff, 0x00000100,
-
 
315
	0x8984, 0xffffffff, 0x06000100,
-
 
316
	0x8a18, 0xffffffff, 0x00000100,
-
 
317
	0x92a0, 0xffffffff, 0x00000100,
-
 
318
	0xc380, 0xffffffff, 0x00000100,
-
 
319
	0x8b28, 0xffffffff, 0x00000100,
-
 
320
	0x9144, 0xffffffff, 0x00000100,
-
 
321
	0x8d88, 0xffffffff, 0x00000100,
-
 
322
	0x8d8c, 0xffffffff, 0x00000100,
-
 
323
	0x9030, 0xffffffff, 0x00000100,
-
 
324
	0x9034, 0xffffffff, 0x00000100,
-
 
325
	0x9038, 0xffffffff, 0x00000100,
-
 
326
	0x903c, 0xffffffff, 0x00000100,
-
 
327
	0xad80, 0xffffffff, 0x00000100,
-
 
328
	0xac54, 0xffffffff, 0x00000100,
-
 
329
	0x897c, 0xffffffff, 0x06000100,
-
 
330
	0x9868, 0xffffffff, 0x00000100,
-
 
331
	0x9510, 0xffffffff, 0x00000100,
-
 
332
	0xaf04, 0xffffffff, 0x00000100,
-
 
333
	0xae04, 0xffffffff, 0x00000100,
-
 
334
	0x949c, 0xffffffff, 0x00000100,
-
 
335
	0x802c, 0xffffffff, 0xe0000000,
-
 
336
	0x9160, 0xffffffff, 0x00010000,
-
 
337
	0x9164, 0xffffffff, 0x00030002,
-
 
338
	0x9168, 0xffffffff, 0x00040007,
-
 
339
	0x916c, 0xffffffff, 0x00060005,
-
 
340
	0x9170, 0xffffffff, 0x00090008,
-
 
341
	0x9174, 0xffffffff, 0x00020001,
-
 
342
	0x9178, 0xffffffff, 0x00040003,
-
 
343
	0x917c, 0xffffffff, 0x00000007,
-
 
344
	0x9180, 0xffffffff, 0x00060005,
-
 
345
	0x9184, 0xffffffff, 0x00090008,
-
 
346
	0x9188, 0xffffffff, 0x00030002,
-
 
347
	0x918c, 0xffffffff, 0x00050004,
-
 
348
	0x9190, 0xffffffff, 0x00000008,
-
 
349
	0x9194, 0xffffffff, 0x00070006,
-
 
350
	0x9198, 0xffffffff, 0x000a0009,
-
 
351
	0x919c, 0xffffffff, 0x00040003,
-
 
352
	0x91a0, 0xffffffff, 0x00060005,
-
 
353
	0x91a4, 0xffffffff, 0x00000009,
-
 
354
	0x91a8, 0xffffffff, 0x00080007,
-
 
355
	0x91ac, 0xffffffff, 0x000b000a,
-
 
356
	0x91b0, 0xffffffff, 0x00050004,
-
 
357
	0x91b4, 0xffffffff, 0x00070006,
-
 
358
	0x91b8, 0xffffffff, 0x0008000b,
-
 
359
	0x91bc, 0xffffffff, 0x000a0009,
-
 
360
	0x91c0, 0xffffffff, 0x000d000c,
-
 
361
	0x91c4, 0xffffffff, 0x00060005,
-
 
362
	0x91c8, 0xffffffff, 0x00080007,
-
 
363
	0x91cc, 0xffffffff, 0x0000000b,
-
 
364
	0x91d0, 0xffffffff, 0x000a0009,
-
 
365
	0x91d4, 0xffffffff, 0x000d000c,
-
 
366
	0x91d8, 0xffffffff, 0x00070006,
-
 
367
	0x91dc, 0xffffffff, 0x00090008,
-
 
368
	0x91e0, 0xffffffff, 0x0000000c,
-
 
369
	0x91e4, 0xffffffff, 0x000b000a,
-
 
370
	0x91e8, 0xffffffff, 0x000e000d,
-
 
371
	0x91ec, 0xffffffff, 0x00080007,
-
 
372
	0x91f0, 0xffffffff, 0x000a0009,
-
 
373
	0x91f4, 0xffffffff, 0x0000000d,
-
 
374
	0x91f8, 0xffffffff, 0x000c000b,
-
 
375
	0x91fc, 0xffffffff, 0x000f000e,
-
 
376
	0x9200, 0xffffffff, 0x00090008,
-
 
377
	0x9204, 0xffffffff, 0x000b000a,
-
 
378
	0x9208, 0xffffffff, 0x000c000f,
-
 
379
	0x920c, 0xffffffff, 0x000e000d,
-
 
380
	0x9210, 0xffffffff, 0x00110010,
-
 
381
	0x9214, 0xffffffff, 0x000a0009,
-
 
382
	0x9218, 0xffffffff, 0x000c000b,
-
 
383
	0x921c, 0xffffffff, 0x0000000f,
-
 
384
	0x9220, 0xffffffff, 0x000e000d,
-
 
385
	0x9224, 0xffffffff, 0x00110010,
-
 
386
	0x9228, 0xffffffff, 0x000b000a,
-
 
387
	0x922c, 0xffffffff, 0x000d000c,
-
 
388
	0x9230, 0xffffffff, 0x00000010,
-
 
389
	0x9234, 0xffffffff, 0x000f000e,
-
 
390
	0x9238, 0xffffffff, 0x00120011,
-
 
391
	0x923c, 0xffffffff, 0x000c000b,
-
 
392
	0x9240, 0xffffffff, 0x000e000d,
-
 
393
	0x9244, 0xffffffff, 0x00000011,
-
 
394
	0x9248, 0xffffffff, 0x0010000f,
-
 
395
	0x924c, 0xffffffff, 0x00130012,
-
 
396
	0x9250, 0xffffffff, 0x000d000c,
-
 
397
	0x9254, 0xffffffff, 0x000f000e,
-
 
398
	0x9258, 0xffffffff, 0x00100013,
-
 
399
	0x925c, 0xffffffff, 0x00120011,
-
 
400
	0x9260, 0xffffffff, 0x00150014,
-
 
401
	0x9264, 0xffffffff, 0x000e000d,
-
 
402
	0x9268, 0xffffffff, 0x0010000f,
-
 
403
	0x926c, 0xffffffff, 0x00000013,
-
 
404
	0x9270, 0xffffffff, 0x00120011,
-
 
405
	0x9274, 0xffffffff, 0x00150014,
-
 
406
	0x9278, 0xffffffff, 0x000f000e,
-
 
407
	0x927c, 0xffffffff, 0x00110010,
-
 
408
	0x9280, 0xffffffff, 0x00000014,
-
 
409
	0x9284, 0xffffffff, 0x00130012,
-
 
410
	0x9288, 0xffffffff, 0x00160015,
-
 
411
	0x928c, 0xffffffff, 0x0010000f,
-
 
412
	0x9290, 0xffffffff, 0x00120011,
-
 
413
	0x9294, 0xffffffff, 0x00000015,
-
 
414
	0x9298, 0xffffffff, 0x00140013,
-
 
415
	0x929c, 0xffffffff, 0x00170016,
-
 
416
	0x9150, 0xffffffff, 0x96940200,
-
 
417
	0x8708, 0xffffffff, 0x00900100,
-
 
418
	0xc478, 0xffffffff, 0x00000080,
-
 
419
	0xc404, 0xffffffff, 0x0020003f,
-
 
420
	0x30, 0xffffffff, 0x0000001c,
-
 
421
	0x34, 0x000f0000, 0x000f0000,
-
 
422
	0x160c, 0xffffffff, 0x00000100,
-
 
423
	0x1024, 0xffffffff, 0x00000100,
-
 
424
	0x102c, 0x00000101, 0x00000000,
-
 
425
	0x20a8, 0xffffffff, 0x00000104,
-
 
426
	0x264c, 0x000c0000, 0x000c0000,
-
 
427
	0x2648, 0x000c0000, 0x000c0000,
-
 
428
	0x55e4, 0xff000fff, 0x00000100,
-
 
429
	0x55e8, 0x00000001, 0x00000001,
-
 
430
	0x2f50, 0x00000001, 0x00000001,
-
 
431
	0x30cc, 0xc0000fff, 0x00000104,
-
 
432
	0xc1e4, 0x00000001, 0x00000001,
-
 
433
	0xd0c0, 0xfffffff0, 0x00000100,
-
 
434
	0xd8c0, 0xfffffff0, 0x00000100
-
 
435
};
-
 
436
 
-
 
437
static const u32 pitcairn_mgcg_cgcg_init[] =
-
 
438
{
-
 
439
	0xc400, 0xffffffff, 0xfffffffc,
-
 
440
	0x802c, 0xffffffff, 0xe0000000,
-
 
441
	0x9a60, 0xffffffff, 0x00000100,
-
 
442
	0x92a4, 0xffffffff, 0x00000100,
-
 
443
	0xc164, 0xffffffff, 0x00000100,
-
 
444
	0x9774, 0xffffffff, 0x00000100,
-
 
445
	0x8984, 0xffffffff, 0x06000100,
-
 
446
	0x8a18, 0xffffffff, 0x00000100,
-
 
447
	0x92a0, 0xffffffff, 0x00000100,
-
 
448
	0xc380, 0xffffffff, 0x00000100,
-
 
449
	0x8b28, 0xffffffff, 0x00000100,
-
 
450
	0x9144, 0xffffffff, 0x00000100,
-
 
451
	0x8d88, 0xffffffff, 0x00000100,
-
 
452
	0x8d8c, 0xffffffff, 0x00000100,
-
 
453
	0x9030, 0xffffffff, 0x00000100,
-
 
454
	0x9034, 0xffffffff, 0x00000100,
-
 
455
	0x9038, 0xffffffff, 0x00000100,
-
 
456
	0x903c, 0xffffffff, 0x00000100,
-
 
457
	0xad80, 0xffffffff, 0x00000100,
-
 
458
	0xac54, 0xffffffff, 0x00000100,
-
 
459
	0x897c, 0xffffffff, 0x06000100,
-
 
460
	0x9868, 0xffffffff, 0x00000100,
-
 
461
	0x9510, 0xffffffff, 0x00000100,
-
 
462
	0xaf04, 0xffffffff, 0x00000100,
-
 
463
	0xae04, 0xffffffff, 0x00000100,
-
 
464
	0x949c, 0xffffffff, 0x00000100,
-
 
465
	0x802c, 0xffffffff, 0xe0000000,
-
 
466
	0x9160, 0xffffffff, 0x00010000,
-
 
467
	0x9164, 0xffffffff, 0x00030002,
-
 
468
	0x9168, 0xffffffff, 0x00040007,
-
 
469
	0x916c, 0xffffffff, 0x00060005,
-
 
470
	0x9170, 0xffffffff, 0x00090008,
-
 
471
	0x9174, 0xffffffff, 0x00020001,
-
 
472
	0x9178, 0xffffffff, 0x00040003,
-
 
473
	0x917c, 0xffffffff, 0x00000007,
-
 
474
	0x9180, 0xffffffff, 0x00060005,
-
 
475
	0x9184, 0xffffffff, 0x00090008,
-
 
476
	0x9188, 0xffffffff, 0x00030002,
-
 
477
	0x918c, 0xffffffff, 0x00050004,
-
 
478
	0x9190, 0xffffffff, 0x00000008,
-
 
479
	0x9194, 0xffffffff, 0x00070006,
-
 
480
	0x9198, 0xffffffff, 0x000a0009,
-
 
481
	0x919c, 0xffffffff, 0x00040003,
-
 
482
	0x91a0, 0xffffffff, 0x00060005,
-
 
483
	0x91a4, 0xffffffff, 0x00000009,
-
 
484
	0x91a8, 0xffffffff, 0x00080007,
-
 
485
	0x91ac, 0xffffffff, 0x000b000a,
-
 
486
	0x91b0, 0xffffffff, 0x00050004,
-
 
487
	0x91b4, 0xffffffff, 0x00070006,
-
 
488
	0x91b8, 0xffffffff, 0x0008000b,
-
 
489
	0x91bc, 0xffffffff, 0x000a0009,
-
 
490
	0x91c0, 0xffffffff, 0x000d000c,
-
 
491
	0x9200, 0xffffffff, 0x00090008,
-
 
492
	0x9204, 0xffffffff, 0x000b000a,
-
 
493
	0x9208, 0xffffffff, 0x000c000f,
-
 
494
	0x920c, 0xffffffff, 0x000e000d,
-
 
495
	0x9210, 0xffffffff, 0x00110010,
-
 
496
	0x9214, 0xffffffff, 0x000a0009,
-
 
497
	0x9218, 0xffffffff, 0x000c000b,
-
 
498
	0x921c, 0xffffffff, 0x0000000f,
-
 
499
	0x9220, 0xffffffff, 0x000e000d,
-
 
500
	0x9224, 0xffffffff, 0x00110010,
-
 
501
	0x9228, 0xffffffff, 0x000b000a,
-
 
502
	0x922c, 0xffffffff, 0x000d000c,
-
 
503
	0x9230, 0xffffffff, 0x00000010,
-
 
504
	0x9234, 0xffffffff, 0x000f000e,
-
 
505
	0x9238, 0xffffffff, 0x00120011,
-
 
506
	0x923c, 0xffffffff, 0x000c000b,
-
 
507
	0x9240, 0xffffffff, 0x000e000d,
-
 
508
	0x9244, 0xffffffff, 0x00000011,
-
 
509
	0x9248, 0xffffffff, 0x0010000f,
-
 
510
	0x924c, 0xffffffff, 0x00130012,
-
 
511
	0x9250, 0xffffffff, 0x000d000c,
-
 
512
	0x9254, 0xffffffff, 0x000f000e,
-
 
513
	0x9258, 0xffffffff, 0x00100013,
-
 
514
	0x925c, 0xffffffff, 0x00120011,
-
 
515
	0x9260, 0xffffffff, 0x00150014,
-
 
516
	0x9150, 0xffffffff, 0x96940200,
-
 
517
	0x8708, 0xffffffff, 0x00900100,
-
 
518
	0xc478, 0xffffffff, 0x00000080,
-
 
519
	0xc404, 0xffffffff, 0x0020003f,
-
 
520
	0x30, 0xffffffff, 0x0000001c,
-
 
521
	0x34, 0x000f0000, 0x000f0000,
-
 
522
	0x160c, 0xffffffff, 0x00000100,
-
 
523
	0x1024, 0xffffffff, 0x00000100,
-
 
524
	0x102c, 0x00000101, 0x00000000,
-
 
525
	0x20a8, 0xffffffff, 0x00000104,
-
 
526
	0x55e4, 0xff000fff, 0x00000100,
-
 
527
	0x55e8, 0x00000001, 0x00000001,
-
 
528
	0x2f50, 0x00000001, 0x00000001,
-
 
529
	0x30cc, 0xc0000fff, 0x00000104,
-
 
530
	0xc1e4, 0x00000001, 0x00000001,
-
 
531
	0xd0c0, 0xfffffff0, 0x00000100,
-
 
532
	0xd8c0, 0xfffffff0, 0x00000100
-
 
533
};
-
 
534
 
-
 
535
static const u32 verde_mgcg_cgcg_init[] =
-
 
536
{
-
 
537
	0xc400, 0xffffffff, 0xfffffffc,
-
 
538
	0x802c, 0xffffffff, 0xe0000000,
-
 
539
	0x9a60, 0xffffffff, 0x00000100,
-
 
540
	0x92a4, 0xffffffff, 0x00000100,
-
 
541
	0xc164, 0xffffffff, 0x00000100,
-
 
542
	0x9774, 0xffffffff, 0x00000100,
-
 
543
	0x8984, 0xffffffff, 0x06000100,
-
 
544
	0x8a18, 0xffffffff, 0x00000100,
-
 
545
	0x92a0, 0xffffffff, 0x00000100,
-
 
546
	0xc380, 0xffffffff, 0x00000100,
-
 
547
	0x8b28, 0xffffffff, 0x00000100,
-
 
548
	0x9144, 0xffffffff, 0x00000100,
-
 
549
	0x8d88, 0xffffffff, 0x00000100,
-
 
550
	0x8d8c, 0xffffffff, 0x00000100,
-
 
551
	0x9030, 0xffffffff, 0x00000100,
-
 
552
	0x9034, 0xffffffff, 0x00000100,
-
 
553
	0x9038, 0xffffffff, 0x00000100,
-
 
554
	0x903c, 0xffffffff, 0x00000100,
-
 
555
	0xad80, 0xffffffff, 0x00000100,
-
 
556
	0xac54, 0xffffffff, 0x00000100,
-
 
557
	0x897c, 0xffffffff, 0x06000100,
-
 
558
	0x9868, 0xffffffff, 0x00000100,
-
 
559
	0x9510, 0xffffffff, 0x00000100,
-
 
560
	0xaf04, 0xffffffff, 0x00000100,
-
 
561
	0xae04, 0xffffffff, 0x00000100,
-
 
562
	0x949c, 0xffffffff, 0x00000100,
-
 
563
	0x802c, 0xffffffff, 0xe0000000,
-
 
564
	0x9160, 0xffffffff, 0x00010000,
-
 
565
	0x9164, 0xffffffff, 0x00030002,
-
 
566
	0x9168, 0xffffffff, 0x00040007,
-
 
567
	0x916c, 0xffffffff, 0x00060005,
-
 
568
	0x9170, 0xffffffff, 0x00090008,
-
 
569
	0x9174, 0xffffffff, 0x00020001,
-
 
570
	0x9178, 0xffffffff, 0x00040003,
-
 
571
	0x917c, 0xffffffff, 0x00000007,
-
 
572
	0x9180, 0xffffffff, 0x00060005,
-
 
573
	0x9184, 0xffffffff, 0x00090008,
-
 
574
	0x9188, 0xffffffff, 0x00030002,
-
 
575
	0x918c, 0xffffffff, 0x00050004,
-
 
576
	0x9190, 0xffffffff, 0x00000008,
-
 
577
	0x9194, 0xffffffff, 0x00070006,
-
 
578
	0x9198, 0xffffffff, 0x000a0009,
-
 
579
	0x919c, 0xffffffff, 0x00040003,
-
 
580
	0x91a0, 0xffffffff, 0x00060005,
-
 
581
	0x91a4, 0xffffffff, 0x00000009,
-
 
582
	0x91a8, 0xffffffff, 0x00080007,
-
 
583
	0x91ac, 0xffffffff, 0x000b000a,
-
 
584
	0x91b0, 0xffffffff, 0x00050004,
-
 
585
	0x91b4, 0xffffffff, 0x00070006,
-
 
586
	0x91b8, 0xffffffff, 0x0008000b,
-
 
587
	0x91bc, 0xffffffff, 0x000a0009,
-
 
588
	0x91c0, 0xffffffff, 0x000d000c,
-
 
589
	0x9200, 0xffffffff, 0x00090008,
-
 
590
	0x9204, 0xffffffff, 0x000b000a,
-
 
591
	0x9208, 0xffffffff, 0x000c000f,
-
 
592
	0x920c, 0xffffffff, 0x000e000d,
-
 
593
	0x9210, 0xffffffff, 0x00110010,
-
 
594
	0x9214, 0xffffffff, 0x000a0009,
-
 
595
	0x9218, 0xffffffff, 0x000c000b,
-
 
596
	0x921c, 0xffffffff, 0x0000000f,
-
 
597
	0x9220, 0xffffffff, 0x000e000d,
-
 
598
	0x9224, 0xffffffff, 0x00110010,
-
 
599
	0x9228, 0xffffffff, 0x000b000a,
-
 
600
	0x922c, 0xffffffff, 0x000d000c,
-
 
601
	0x9230, 0xffffffff, 0x00000010,
-
 
602
	0x9234, 0xffffffff, 0x000f000e,
-
 
603
	0x9238, 0xffffffff, 0x00120011,
-
 
604
	0x923c, 0xffffffff, 0x000c000b,
-
 
605
	0x9240, 0xffffffff, 0x000e000d,
-
 
606
	0x9244, 0xffffffff, 0x00000011,
-
 
607
	0x9248, 0xffffffff, 0x0010000f,
-
 
608
	0x924c, 0xffffffff, 0x00130012,
-
 
609
	0x9250, 0xffffffff, 0x000d000c,
-
 
610
	0x9254, 0xffffffff, 0x000f000e,
-
 
611
	0x9258, 0xffffffff, 0x00100013,
-
 
612
	0x925c, 0xffffffff, 0x00120011,
-
 
613
	0x9260, 0xffffffff, 0x00150014,
-
 
614
	0x9150, 0xffffffff, 0x96940200,
-
 
615
	0x8708, 0xffffffff, 0x00900100,
-
 
616
	0xc478, 0xffffffff, 0x00000080,
-
 
617
	0xc404, 0xffffffff, 0x0020003f,
-
 
618
	0x30, 0xffffffff, 0x0000001c,
-
 
619
	0x34, 0x000f0000, 0x000f0000,
-
 
620
	0x160c, 0xffffffff, 0x00000100,
-
 
621
	0x1024, 0xffffffff, 0x00000100,
-
 
622
	0x102c, 0x00000101, 0x00000000,
-
 
623
	0x20a8, 0xffffffff, 0x00000104,
-
 
624
	0x264c, 0x000c0000, 0x000c0000,
-
 
625
	0x2648, 0x000c0000, 0x000c0000,
-
 
626
	0x55e4, 0xff000fff, 0x00000100,
-
 
627
	0x55e8, 0x00000001, 0x00000001,
-
 
628
	0x2f50, 0x00000001, 0x00000001,
-
 
629
	0x30cc, 0xc0000fff, 0x00000104,
-
 
630
	0xc1e4, 0x00000001, 0x00000001,
-
 
631
	0xd0c0, 0xfffffff0, 0x00000100,
-
 
632
	0xd8c0, 0xfffffff0, 0x00000100
-
 
633
};
-
 
634
 
-
 
635
static const u32 oland_mgcg_cgcg_init[] =
-
 
636
{
-
 
637
	0xc400, 0xffffffff, 0xfffffffc,
-
 
638
	0x802c, 0xffffffff, 0xe0000000,
-
 
639
	0x9a60, 0xffffffff, 0x00000100,
-
 
640
	0x92a4, 0xffffffff, 0x00000100,
-
 
641
	0xc164, 0xffffffff, 0x00000100,
-
 
642
	0x9774, 0xffffffff, 0x00000100,
-
 
643
	0x8984, 0xffffffff, 0x06000100,
-
 
644
	0x8a18, 0xffffffff, 0x00000100,
-
 
645
	0x92a0, 0xffffffff, 0x00000100,
-
 
646
	0xc380, 0xffffffff, 0x00000100,
-
 
647
	0x8b28, 0xffffffff, 0x00000100,
-
 
648
	0x9144, 0xffffffff, 0x00000100,
-
 
649
	0x8d88, 0xffffffff, 0x00000100,
-
 
650
	0x8d8c, 0xffffffff, 0x00000100,
-
 
651
	0x9030, 0xffffffff, 0x00000100,
-
 
652
	0x9034, 0xffffffff, 0x00000100,
-
 
653
	0x9038, 0xffffffff, 0x00000100,
-
 
654
	0x903c, 0xffffffff, 0x00000100,
-
 
655
	0xad80, 0xffffffff, 0x00000100,
-
 
656
	0xac54, 0xffffffff, 0x00000100,
-
 
657
	0x897c, 0xffffffff, 0x06000100,
-
 
658
	0x9868, 0xffffffff, 0x00000100,
-
 
659
	0x9510, 0xffffffff, 0x00000100,
-
 
660
	0xaf04, 0xffffffff, 0x00000100,
-
 
661
	0xae04, 0xffffffff, 0x00000100,
-
 
662
	0x949c, 0xffffffff, 0x00000100,
-
 
663
	0x802c, 0xffffffff, 0xe0000000,
-
 
664
	0x9160, 0xffffffff, 0x00010000,
-
 
665
	0x9164, 0xffffffff, 0x00030002,
-
 
666
	0x9168, 0xffffffff, 0x00040007,
-
 
667
	0x916c, 0xffffffff, 0x00060005,
-
 
668
	0x9170, 0xffffffff, 0x00090008,
-
 
669
	0x9174, 0xffffffff, 0x00020001,
-
 
670
	0x9178, 0xffffffff, 0x00040003,
-
 
671
	0x917c, 0xffffffff, 0x00000007,
-
 
672
	0x9180, 0xffffffff, 0x00060005,
-
 
673
	0x9184, 0xffffffff, 0x00090008,
-
 
674
	0x9188, 0xffffffff, 0x00030002,
-
 
675
	0x918c, 0xffffffff, 0x00050004,
-
 
676
	0x9190, 0xffffffff, 0x00000008,
-
 
677
	0x9194, 0xffffffff, 0x00070006,
-
 
678
	0x9198, 0xffffffff, 0x000a0009,
-
 
679
	0x919c, 0xffffffff, 0x00040003,
-
 
680
	0x91a0, 0xffffffff, 0x00060005,
-
 
681
	0x91a4, 0xffffffff, 0x00000009,
-
 
682
	0x91a8, 0xffffffff, 0x00080007,
-
 
683
	0x91ac, 0xffffffff, 0x000b000a,
-
 
684
	0x91b0, 0xffffffff, 0x00050004,
-
 
685
	0x91b4, 0xffffffff, 0x00070006,
-
 
686
	0x91b8, 0xffffffff, 0x0008000b,
-
 
687
	0x91bc, 0xffffffff, 0x000a0009,
-
 
688
	0x91c0, 0xffffffff, 0x000d000c,
-
 
689
	0x91c4, 0xffffffff, 0x00060005,
-
 
690
	0x91c8, 0xffffffff, 0x00080007,
-
 
691
	0x91cc, 0xffffffff, 0x0000000b,
-
 
692
	0x91d0, 0xffffffff, 0x000a0009,
-
 
693
	0x91d4, 0xffffffff, 0x000d000c,
-
 
694
	0x9150, 0xffffffff, 0x96940200,
-
 
695
	0x8708, 0xffffffff, 0x00900100,
-
 
696
	0xc478, 0xffffffff, 0x00000080,
-
 
697
	0xc404, 0xffffffff, 0x0020003f,
-
 
698
	0x30, 0xffffffff, 0x0000001c,
-
 
699
	0x34, 0x000f0000, 0x000f0000,
-
 
700
	0x160c, 0xffffffff, 0x00000100,
-
 
701
	0x1024, 0xffffffff, 0x00000100,
-
 
702
	0x102c, 0x00000101, 0x00000000,
-
 
703
	0x20a8, 0xffffffff, 0x00000104,
-
 
704
	0x264c, 0x000c0000, 0x000c0000,
-
 
705
	0x2648, 0x000c0000, 0x000c0000,
-
 
706
	0x55e4, 0xff000fff, 0x00000100,
-
 
707
	0x55e8, 0x00000001, 0x00000001,
-
 
708
	0x2f50, 0x00000001, 0x00000001,
-
 
709
	0x30cc, 0xc0000fff, 0x00000104,
-
 
710
	0xc1e4, 0x00000001, 0x00000001,
-
 
711
	0xd0c0, 0xfffffff0, 0x00000100,
-
 
712
	0xd8c0, 0xfffffff0, 0x00000100
-
 
713
};
-
 
714
 
-
 
715
static const u32 hainan_mgcg_cgcg_init[] =
-
 
716
{
-
 
717
	0xc400, 0xffffffff, 0xfffffffc,
-
 
718
	0x802c, 0xffffffff, 0xe0000000,
-
 
719
	0x9a60, 0xffffffff, 0x00000100,
-
 
720
	0x92a4, 0xffffffff, 0x00000100,
-
 
721
	0xc164, 0xffffffff, 0x00000100,
-
 
722
	0x9774, 0xffffffff, 0x00000100,
-
 
723
	0x8984, 0xffffffff, 0x06000100,
-
 
724
	0x8a18, 0xffffffff, 0x00000100,
-
 
725
	0x92a0, 0xffffffff, 0x00000100,
-
 
726
	0xc380, 0xffffffff, 0x00000100,
-
 
727
	0x8b28, 0xffffffff, 0x00000100,
-
 
728
	0x9144, 0xffffffff, 0x00000100,
-
 
729
	0x8d88, 0xffffffff, 0x00000100,
-
 
730
	0x8d8c, 0xffffffff, 0x00000100,
-
 
731
	0x9030, 0xffffffff, 0x00000100,
-
 
732
	0x9034, 0xffffffff, 0x00000100,
-
 
733
	0x9038, 0xffffffff, 0x00000100,
-
 
734
	0x903c, 0xffffffff, 0x00000100,
-
 
735
	0xad80, 0xffffffff, 0x00000100,
-
 
736
	0xac54, 0xffffffff, 0x00000100,
-
 
737
	0x897c, 0xffffffff, 0x06000100,
-
 
738
	0x9868, 0xffffffff, 0x00000100,
-
 
739
	0x9510, 0xffffffff, 0x00000100,
-
 
740
	0xaf04, 0xffffffff, 0x00000100,
-
 
741
	0xae04, 0xffffffff, 0x00000100,
-
 
742
	0x949c, 0xffffffff, 0x00000100,
-
 
743
	0x802c, 0xffffffff, 0xe0000000,
-
 
744
	0x9160, 0xffffffff, 0x00010000,
-
 
745
	0x9164, 0xffffffff, 0x00030002,
-
 
746
	0x9168, 0xffffffff, 0x00040007,
-
 
747
	0x916c, 0xffffffff, 0x00060005,
-
 
748
	0x9170, 0xffffffff, 0x00090008,
-
 
749
	0x9174, 0xffffffff, 0x00020001,
-
 
750
	0x9178, 0xffffffff, 0x00040003,
-
 
751
	0x917c, 0xffffffff, 0x00000007,
-
 
752
	0x9180, 0xffffffff, 0x00060005,
-
 
753
	0x9184, 0xffffffff, 0x00090008,
-
 
754
	0x9188, 0xffffffff, 0x00030002,
-
 
755
	0x918c, 0xffffffff, 0x00050004,
-
 
756
	0x9190, 0xffffffff, 0x00000008,
-
 
757
	0x9194, 0xffffffff, 0x00070006,
-
 
758
	0x9198, 0xffffffff, 0x000a0009,
-
 
759
	0x919c, 0xffffffff, 0x00040003,
-
 
760
	0x91a0, 0xffffffff, 0x00060005,
-
 
761
	0x91a4, 0xffffffff, 0x00000009,
-
 
762
	0x91a8, 0xffffffff, 0x00080007,
-
 
763
	0x91ac, 0xffffffff, 0x000b000a,
-
 
764
	0x91b0, 0xffffffff, 0x00050004,
-
 
765
	0x91b4, 0xffffffff, 0x00070006,
-
 
766
	0x91b8, 0xffffffff, 0x0008000b,
-
 
767
	0x91bc, 0xffffffff, 0x000a0009,
-
 
768
	0x91c0, 0xffffffff, 0x000d000c,
-
 
769
	0x91c4, 0xffffffff, 0x00060005,
-
 
770
	0x91c8, 0xffffffff, 0x00080007,
-
 
771
	0x91cc, 0xffffffff, 0x0000000b,
-
 
772
	0x91d0, 0xffffffff, 0x000a0009,
-
 
773
	0x91d4, 0xffffffff, 0x000d000c,
-
 
774
	0x9150, 0xffffffff, 0x96940200,
-
 
775
	0x8708, 0xffffffff, 0x00900100,
-
 
776
	0xc478, 0xffffffff, 0x00000080,
-
 
777
	0xc404, 0xffffffff, 0x0020003f,
-
 
778
	0x30, 0xffffffff, 0x0000001c,
-
 
779
	0x34, 0x000f0000, 0x000f0000,
-
 
780
	0x160c, 0xffffffff, 0x00000100,
-
 
781
	0x1024, 0xffffffff, 0x00000100,
-
 
782
	0x20a8, 0xffffffff, 0x00000104,
-
 
783
	0x264c, 0x000c0000, 0x000c0000,
-
 
784
	0x2648, 0x000c0000, 0x000c0000,
-
 
785
	0x2f50, 0x00000001, 0x00000001,
-
 
786
	0x30cc, 0xc0000fff, 0x00000104,
-
 
787
	0xc1e4, 0x00000001, 0x00000001,
-
 
788
	0xd0c0, 0xfffffff0, 0x00000100,
-
 
789
	0xd8c0, 0xfffffff0, 0x00000100
-
 
790
};
-
 
791
 
-
 
792
static u32 verde_pg_init[] =
-
 
793
{
-
 
794
	0x353c, 0xffffffff, 0x40000,
-
 
795
	0x3538, 0xffffffff, 0x200010ff,
-
 
796
	0x353c, 0xffffffff, 0x0,
-
 
797
	0x353c, 0xffffffff, 0x0,
-
 
798
	0x353c, 0xffffffff, 0x0,
-
 
799
	0x353c, 0xffffffff, 0x0,
-
 
800
	0x353c, 0xffffffff, 0x0,
-
 
801
	0x353c, 0xffffffff, 0x7007,
-
 
802
	0x3538, 0xffffffff, 0x300010ff,
-
 
803
	0x353c, 0xffffffff, 0x0,
-
 
804
	0x353c, 0xffffffff, 0x0,
-
 
805
	0x353c, 0xffffffff, 0x0,
-
 
806
	0x353c, 0xffffffff, 0x0,
-
 
807
	0x353c, 0xffffffff, 0x0,
-
 
808
	0x353c, 0xffffffff, 0x400000,
-
 
809
	0x3538, 0xffffffff, 0x100010ff,
-
 
810
	0x353c, 0xffffffff, 0x0,
-
 
811
	0x353c, 0xffffffff, 0x0,
-
 
812
	0x353c, 0xffffffff, 0x0,
-
 
813
	0x353c, 0xffffffff, 0x0,
-
 
814
	0x353c, 0xffffffff, 0x0,
-
 
815
	0x353c, 0xffffffff, 0x120200,
-
 
816
	0x3538, 0xffffffff, 0x500010ff,
-
 
817
	0x353c, 0xffffffff, 0x0,
-
 
818
	0x353c, 0xffffffff, 0x0,
-
 
819
	0x353c, 0xffffffff, 0x0,
-
 
820
	0x353c, 0xffffffff, 0x0,
-
 
821
	0x353c, 0xffffffff, 0x0,
-
 
822
	0x353c, 0xffffffff, 0x1e1e16,
-
 
823
	0x3538, 0xffffffff, 0x600010ff,
-
 
824
	0x353c, 0xffffffff, 0x0,
-
 
825
	0x353c, 0xffffffff, 0x0,
-
 
826
	0x353c, 0xffffffff, 0x0,
-
 
827
	0x353c, 0xffffffff, 0x0,
-
 
828
	0x353c, 0xffffffff, 0x0,
-
 
829
	0x353c, 0xffffffff, 0x171f1e,
-
 
830
	0x3538, 0xffffffff, 0x700010ff,
-
 
831
	0x353c, 0xffffffff, 0x0,
-
 
832
	0x353c, 0xffffffff, 0x0,
-
 
833
	0x353c, 0xffffffff, 0x0,
-
 
834
	0x353c, 0xffffffff, 0x0,
-
 
835
	0x353c, 0xffffffff, 0x0,
-
 
836
	0x353c, 0xffffffff, 0x0,
-
 
837
	0x3538, 0xffffffff, 0x9ff,
-
 
838
	0x3500, 0xffffffff, 0x0,
-
 
839
	0x3504, 0xffffffff, 0x10000800,
-
 
840
	0x3504, 0xffffffff, 0xf,
-
 
841
	0x3504, 0xffffffff, 0xf,
-
 
842
	0x3500, 0xffffffff, 0x4,
-
 
843
	0x3504, 0xffffffff, 0x1000051e,
-
 
844
	0x3504, 0xffffffff, 0xffff,
-
 
845
	0x3504, 0xffffffff, 0xffff,
-
 
846
	0x3500, 0xffffffff, 0x8,
-
 
847
	0x3504, 0xffffffff, 0x80500,
-
 
848
	0x3500, 0xffffffff, 0x12,
-
 
849
	0x3504, 0xffffffff, 0x9050c,
-
 
850
	0x3500, 0xffffffff, 0x1d,
-
 
851
	0x3504, 0xffffffff, 0xb052c,
-
 
852
	0x3500, 0xffffffff, 0x2a,
-
 
853
	0x3504, 0xffffffff, 0x1053e,
-
 
854
	0x3500, 0xffffffff, 0x2d,
-
 
855
	0x3504, 0xffffffff, 0x10546,
-
 
856
	0x3500, 0xffffffff, 0x30,
-
 
857
	0x3504, 0xffffffff, 0xa054e,
-
 
858
	0x3500, 0xffffffff, 0x3c,
-
 
859
	0x3504, 0xffffffff, 0x1055f,
-
 
860
	0x3500, 0xffffffff, 0x3f,
-
 
861
	0x3504, 0xffffffff, 0x10567,
-
 
862
	0x3500, 0xffffffff, 0x42,
-
 
863
	0x3504, 0xffffffff, 0x1056f,
-
 
864
	0x3500, 0xffffffff, 0x45,
-
 
865
	0x3504, 0xffffffff, 0x10572,
-
 
866
	0x3500, 0xffffffff, 0x48,
-
 
867
	0x3504, 0xffffffff, 0x20575,
-
 
868
	0x3500, 0xffffffff, 0x4c,
-
 
869
	0x3504, 0xffffffff, 0x190801,
-
 
870
	0x3500, 0xffffffff, 0x67,
-
 
871
	0x3504, 0xffffffff, 0x1082a,
-
 
872
	0x3500, 0xffffffff, 0x6a,
-
 
873
	0x3504, 0xffffffff, 0x1b082d,
-
 
874
	0x3500, 0xffffffff, 0x87,
-
 
875
	0x3504, 0xffffffff, 0x310851,
-
 
876
	0x3500, 0xffffffff, 0xba,
-
 
877
	0x3504, 0xffffffff, 0x891,
-
 
878
	0x3500, 0xffffffff, 0xbc,
-
 
879
	0x3504, 0xffffffff, 0x893,
-
 
880
	0x3500, 0xffffffff, 0xbe,
-
 
881
	0x3504, 0xffffffff, 0x20895,
-
 
882
	0x3500, 0xffffffff, 0xc2,
-
 
883
	0x3504, 0xffffffff, 0x20899,
-
 
884
	0x3500, 0xffffffff, 0xc6,
-
 
885
	0x3504, 0xffffffff, 0x2089d,
-
 
886
	0x3500, 0xffffffff, 0xca,
-
 
887
	0x3504, 0xffffffff, 0x8a1,
-
 
888
	0x3500, 0xffffffff, 0xcc,
-
 
889
	0x3504, 0xffffffff, 0x8a3,
-
 
890
	0x3500, 0xffffffff, 0xce,
-
 
891
	0x3504, 0xffffffff, 0x308a5,
-
 
892
	0x3500, 0xffffffff, 0xd3,
-
 
893
	0x3504, 0xffffffff, 0x6d08cd,
-
 
894
	0x3500, 0xffffffff, 0x142,
-
 
895
	0x3504, 0xffffffff, 0x2000095a,
-
 
896
	0x3504, 0xffffffff, 0x1,
-
 
897
	0x3500, 0xffffffff, 0x144,
-
 
898
	0x3504, 0xffffffff, 0x301f095b,
-
 
899
	0x3500, 0xffffffff, 0x165,
-
 
900
	0x3504, 0xffffffff, 0xc094d,
-
 
901
	0x3500, 0xffffffff, 0x173,
-
 
902
	0x3504, 0xffffffff, 0xf096d,
-
 
903
	0x3500, 0xffffffff, 0x184,
-
 
904
	0x3504, 0xffffffff, 0x15097f,
-
 
905
	0x3500, 0xffffffff, 0x19b,
-
 
906
	0x3504, 0xffffffff, 0xc0998,
-
 
907
	0x3500, 0xffffffff, 0x1a9,
-
 
908
	0x3504, 0xffffffff, 0x409a7,
-
 
909
	0x3500, 0xffffffff, 0x1af,
-
 
910
	0x3504, 0xffffffff, 0xcdc,
-
 
911
	0x3500, 0xffffffff, 0x1b1,
-
 
912
	0x3504, 0xffffffff, 0x800,
-
 
913
	0x3508, 0xffffffff, 0x6c9b2000,
-
 
914
	0x3510, 0xfc00, 0x2000,
-
 
915
	0x3544, 0xffffffff, 0xfc0,
-
 
916
	0x28d4, 0x00000100, 0x100
-
 
917
};
-
 
918
 
-
 
919
static void si_init_golden_registers(struct radeon_device *rdev)
-
 
920
{
-
 
921
	switch (rdev->family) {
-
 
922
	case CHIP_TAHITI:
-
 
923
		radeon_program_register_sequence(rdev,
-
 
924
						 tahiti_golden_registers,
-
 
925
						 (const u32)ARRAY_SIZE(tahiti_golden_registers));
-
 
926
		radeon_program_register_sequence(rdev,
-
 
927
						 tahiti_golden_rlc_registers,
-
 
928
						 (const u32)ARRAY_SIZE(tahiti_golden_rlc_registers));
-
 
929
		radeon_program_register_sequence(rdev,
-
 
930
						 tahiti_mgcg_cgcg_init,
-
 
931
						 (const u32)ARRAY_SIZE(tahiti_mgcg_cgcg_init));
-
 
932
		radeon_program_register_sequence(rdev,
-
 
933
						 tahiti_golden_registers2,
-
 
934
						 (const u32)ARRAY_SIZE(tahiti_golden_registers2));
-
 
935
		break;
-
 
936
	case CHIP_PITCAIRN:
-
 
937
		radeon_program_register_sequence(rdev,
-
 
938
						 pitcairn_golden_registers,
-
 
939
						 (const u32)ARRAY_SIZE(pitcairn_golden_registers));
-
 
940
		radeon_program_register_sequence(rdev,
-
 
941
						 pitcairn_golden_rlc_registers,
-
 
942
						 (const u32)ARRAY_SIZE(pitcairn_golden_rlc_registers));
-
 
943
		radeon_program_register_sequence(rdev,
-
 
944
						 pitcairn_mgcg_cgcg_init,
-
 
945
						 (const u32)ARRAY_SIZE(pitcairn_mgcg_cgcg_init));
-
 
946
		break;
-
 
947
	case CHIP_VERDE:
-
 
948
		radeon_program_register_sequence(rdev,
-
 
949
						 verde_golden_registers,
-
 
950
						 (const u32)ARRAY_SIZE(verde_golden_registers));
-
 
951
		radeon_program_register_sequence(rdev,
-
 
952
						 verde_golden_rlc_registers,
-
 
953
						 (const u32)ARRAY_SIZE(verde_golden_rlc_registers));
-
 
954
		radeon_program_register_sequence(rdev,
-
 
955
						 verde_mgcg_cgcg_init,
-
 
956
						 (const u32)ARRAY_SIZE(verde_mgcg_cgcg_init));
-
 
957
		radeon_program_register_sequence(rdev,
-
 
958
						 verde_pg_init,
-
 
959
						 (const u32)ARRAY_SIZE(verde_pg_init));
-
 
960
		break;
-
 
961
	case CHIP_OLAND:
-
 
962
		radeon_program_register_sequence(rdev,
-
 
963
						 oland_golden_registers,
-
 
964
						 (const u32)ARRAY_SIZE(oland_golden_registers));
-
 
965
		radeon_program_register_sequence(rdev,
-
 
966
						 oland_golden_rlc_registers,
-
 
967
						 (const u32)ARRAY_SIZE(oland_golden_rlc_registers));
-
 
968
		radeon_program_register_sequence(rdev,
-
 
969
						 oland_mgcg_cgcg_init,
-
 
970
						 (const u32)ARRAY_SIZE(oland_mgcg_cgcg_init));
-
 
971
		break;
-
 
972
	case CHIP_HAINAN:
-
 
973
		radeon_program_register_sequence(rdev,
-
 
974
						 hainan_golden_registers,
-
 
975
						 (const u32)ARRAY_SIZE(hainan_golden_registers));
-
 
976
		radeon_program_register_sequence(rdev,
-
 
977
						 hainan_golden_registers2,
-
 
978
						 (const u32)ARRAY_SIZE(hainan_golden_registers2));
-
 
979
		radeon_program_register_sequence(rdev,
-
 
980
						 hainan_mgcg_cgcg_init,
-
 
981
						 (const u32)ARRAY_SIZE(hainan_mgcg_cgcg_init));
-
 
982
		break;
-
 
983
	default:
-
 
984
		break;
-
 
985
	}
-
 
986
}
-
 
987
 
-
 
988
#define PCIE_BUS_CLK                10000
-
 
989
#define TCLK                        (PCIE_BUS_CLK / 10)
-
 
990
 
-
 
991
/**
-
 
992
 * si_get_xclk - get the xclk
-
 
993
 *
-
 
994
 * @rdev: radeon_device pointer
-
 
995
 *
-
 
996
 * Returns the reference clock used by the gfx engine
-
 
997
 * (SI).
-
 
998
 */
-
 
999
u32 si_get_xclk(struct radeon_device *rdev)
-
 
1000
{
-
 
1001
        u32 reference_clock = rdev->clock.spll.reference_freq;
-
 
1002
	u32 tmp;
-
 
1003
 
-
 
1004
	tmp = RREG32(CG_CLKPIN_CNTL_2);
-
 
1005
	if (tmp & MUX_TCLK_TO_XCLK)
-
 
1006
		return TCLK;
-
 
1007
 
-
 
1008
	tmp = RREG32(CG_CLKPIN_CNTL);
-
 
1009
	if (tmp & XTALIN_DIVIDE)
-
 
1010
		return reference_clock / 4;
-
 
1011
 
-
 
1012
	return reference_clock;
Line 63... Line 1013...
63
extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev);
1013
}
64
 
1014
 
65
/* get temperature in millidegrees */
1015
/* get temperature in millidegrees */
66
int si_get_temp(struct radeon_device *rdev)
1016
int si_get_temp(struct radeon_device *rdev)
Line 198... Line 1148...
198
	{0x00000099, 0x00006000},
1148
	{0x00000099, 0x00006000},
199
	{0x0000009a, 0x00001000},
1149
	{0x0000009a, 0x00001000},
200
	{0x0000009f, 0x00a37400}
1150
	{0x0000009f, 0x00a37400}
201
};
1151
};
Line -... Line 1152...
-
 
1152
 
-
 
1153
static const u32 oland_io_mc_regs[TAHITI_IO_MC_REGS_SIZE][2] = {
-
 
1154
	{0x0000006f, 0x03044000},
-
 
1155
	{0x00000070, 0x0480c018},
-
 
1156
	{0x00000071, 0x00000040},
-
 
1157
	{0x00000072, 0x01000000},
-
 
1158
	{0x00000074, 0x000000ff},
-
 
1159
	{0x00000075, 0x00143400},
-
 
1160
	{0x00000076, 0x08ec0800},
-
 
1161
	{0x00000077, 0x040000cc},
-
 
1162
	{0x00000079, 0x00000000},
-
 
1163
	{0x0000007a, 0x21000409},
-
 
1164
	{0x0000007c, 0x00000000},
-
 
1165
	{0x0000007d, 0xe8000000},
-
 
1166
	{0x0000007e, 0x044408a8},
-
 
1167
	{0x0000007f, 0x00000003},
-
 
1168
	{0x00000080, 0x00000000},
-
 
1169
	{0x00000081, 0x01000000},
-
 
1170
	{0x00000082, 0x02000000},
-
 
1171
	{0x00000083, 0x00000000},
-
 
1172
	{0x00000084, 0xe3f3e4f4},
-
 
1173
	{0x00000085, 0x00052024},
-
 
1174
	{0x00000087, 0x00000000},
-
 
1175
	{0x00000088, 0x66036603},
-
 
1176
	{0x00000089, 0x01000000},
-
 
1177
	{0x0000008b, 0x1c0a0000},
-
 
1178
	{0x0000008c, 0xff010000},
-
 
1179
	{0x0000008e, 0xffffefff},
-
 
1180
	{0x0000008f, 0xfff3efff},
-
 
1181
	{0x00000090, 0xfff3efbf},
-
 
1182
	{0x00000094, 0x00101101},
-
 
1183
	{0x00000095, 0x00000fff},
-
 
1184
	{0x00000096, 0x00116fff},
-
 
1185
	{0x00000097, 0x60010000},
-
 
1186
	{0x00000098, 0x10010000},
-
 
1187
	{0x00000099, 0x00006000},
-
 
1188
	{0x0000009a, 0x00001000},
-
 
1189
	{0x0000009f, 0x00a17730}
-
 
1190
};
-
 
1191
 
-
 
1192
static const u32 hainan_io_mc_regs[TAHITI_IO_MC_REGS_SIZE][2] = {
-
 
1193
	{0x0000006f, 0x03044000},
-
 
1194
	{0x00000070, 0x0480c018},
-
 
1195
	{0x00000071, 0x00000040},
-
 
1196
	{0x00000072, 0x01000000},
-
 
1197
	{0x00000074, 0x000000ff},
-
 
1198
	{0x00000075, 0x00143400},
-
 
1199
	{0x00000076, 0x08ec0800},
-
 
1200
	{0x00000077, 0x040000cc},
-
 
1201
	{0x00000079, 0x00000000},
-
 
1202
	{0x0000007a, 0x21000409},
-
 
1203
	{0x0000007c, 0x00000000},
-
 
1204
	{0x0000007d, 0xe8000000},
-
 
1205
	{0x0000007e, 0x044408a8},
-
 
1206
	{0x0000007f, 0x00000003},
-
 
1207
	{0x00000080, 0x00000000},
-
 
1208
	{0x00000081, 0x01000000},
-
 
1209
	{0x00000082, 0x02000000},
-
 
1210
	{0x00000083, 0x00000000},
-
 
1211
	{0x00000084, 0xe3f3e4f4},
-
 
1212
	{0x00000085, 0x00052024},
-
 
1213
	{0x00000087, 0x00000000},
-
 
1214
	{0x00000088, 0x66036603},
-
 
1215
	{0x00000089, 0x01000000},
-
 
1216
	{0x0000008b, 0x1c0a0000},
-
 
1217
	{0x0000008c, 0xff010000},
-
 
1218
	{0x0000008e, 0xffffefff},
-
 
1219
	{0x0000008f, 0xfff3efff},
-
 
1220
	{0x00000090, 0xfff3efbf},
-
 
1221
	{0x00000094, 0x00101101},
-
 
1222
	{0x00000095, 0x00000fff},
-
 
1223
	{0x00000096, 0x00116fff},
-
 
1224
	{0x00000097, 0x60010000},
-
 
1225
	{0x00000098, 0x10010000},
-
 
1226
	{0x00000099, 0x00006000},
-
 
1227
	{0x0000009a, 0x00001000},
-
 
1228
	{0x0000009f, 0x00a07730}
-
 
1229
};
202
 
1230
 
203
/* ucode loading */
1231
/* ucode loading */
204
static int si_mc_load_microcode(struct radeon_device *rdev)
1232
static int si_mc_load_microcode(struct radeon_device *rdev)
205
{
1233
{
206
	const __be32 *fw_data;
1234
	const __be32 *fw_data;
Line 226... Line 1254...
226
	default:
1254
	default:
227
		io_mc_regs = (u32 *)&verde_io_mc_regs;
1255
		io_mc_regs = (u32 *)&verde_io_mc_regs;
228
		ucode_size = SI_MC_UCODE_SIZE;
1256
		ucode_size = SI_MC_UCODE_SIZE;
229
		regs_size = TAHITI_IO_MC_REGS_SIZE;
1257
		regs_size = TAHITI_IO_MC_REGS_SIZE;
230
		break;
1258
		break;
-
 
1259
	case CHIP_OLAND:
-
 
1260
		io_mc_regs = (u32 *)&oland_io_mc_regs;
-
 
1261
		ucode_size = OLAND_MC_UCODE_SIZE;
-
 
1262
		regs_size = TAHITI_IO_MC_REGS_SIZE;
-
 
1263
		break;
-
 
1264
	case CHIP_HAINAN:
-
 
1265
		io_mc_regs = (u32 *)&hainan_io_mc_regs;
-
 
1266
		ucode_size = OLAND_MC_UCODE_SIZE;
-
 
1267
		regs_size = TAHITI_IO_MC_REGS_SIZE;
-
 
1268
		break;
231
	}
1269
	}
Line 232... Line 1270...
232
 
1270
 
Line 233... Line 1271...
233
	running = RREG32(MC_SEQ_SUP_CNTL) & RUN_MASK;
1271
	running = RREG32(MC_SEQ_SUP_CNTL) & RUN_MASK;
Line 320... Line 1358...
320
		me_req_size = SI_PM4_UCODE_SIZE * 4;
1358
		me_req_size = SI_PM4_UCODE_SIZE * 4;
321
		ce_req_size = SI_CE_UCODE_SIZE * 4;
1359
		ce_req_size = SI_CE_UCODE_SIZE * 4;
322
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
1360
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
323
		mc_req_size = SI_MC_UCODE_SIZE * 4;
1361
		mc_req_size = SI_MC_UCODE_SIZE * 4;
324
		break;
1362
		break;
-
 
1363
	case CHIP_OLAND:
-
 
1364
		chip_name = "OLAND";
-
 
1365
		rlc_chip_name = "OLAND";
-
 
1366
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
-
 
1367
		me_req_size = SI_PM4_UCODE_SIZE * 4;
-
 
1368
		ce_req_size = SI_CE_UCODE_SIZE * 4;
-
 
1369
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
-
 
1370
		mc_req_size = OLAND_MC_UCODE_SIZE * 4;
-
 
1371
		break;
-
 
1372
	case CHIP_HAINAN:
-
 
1373
		chip_name = "HAINAN";
-
 
1374
		rlc_chip_name = "HAINAN";
-
 
1375
		pfp_req_size = SI_PFP_UCODE_SIZE * 4;
-
 
1376
		me_req_size = SI_PM4_UCODE_SIZE * 4;
-
 
1377
		ce_req_size = SI_CE_UCODE_SIZE * 4;
-
 
1378
		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
-
 
1379
		mc_req_size = OLAND_MC_UCODE_SIZE * 4;
-
 
1380
		break;
325
	default: BUG();
1381
	default: BUG();
326
	}
1382
	}
Line 327... Line 1383...
327
 
1383
 
Line 1121... Line 2177...
1121
				break;
2177
				break;
1122
			default:
2178
			default:
1123
				gb_tile_moden = 0;
2179
				gb_tile_moden = 0;
1124
				break;
2180
				break;
1125
			}
2181
			}
-
 
2182
			rdev->config.si.tile_mode_array[reg_offset] = gb_tile_moden;
1126
			WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2183
			WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
1127
		}
2184
		}
1128
	} else if (rdev->family == CHIP_VERDE) {
2185
	} else if ((rdev->family == CHIP_VERDE) ||
-
 
2186
		   (rdev->family == CHIP_OLAND) ||
-
 
2187
		   (rdev->family == CHIP_HAINAN)) {
1129
		for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
2188
		for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
1130
			switch (reg_offset) {
2189
			switch (reg_offset) {
1131
			case 0:  /* non-AA compressed depth or any compressed stencil */
2190
			case 0:  /* non-AA compressed depth or any compressed stencil */
1132
				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
2191
				gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
1133
						 MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
2192
						 MICRO_TILE_MODE(ADDR_SURF_DEPTH_MICRO_TILING) |
Line 1360... Line 2419...
1360
				break;
2419
				break;
1361
			default:
2420
			default:
1362
				gb_tile_moden = 0;
2421
				gb_tile_moden = 0;
1363
				break;
2422
				break;
1364
			}
2423
			}
-
 
2424
			rdev->config.si.tile_mode_array[reg_offset] = gb_tile_moden;
1365
			WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
2425
			WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden);
1366
		}
2426
		}
1367
	} else
2427
	} else
1368
		DRM_ERROR("unknown asic: 0x%x\n", rdev->family);
2428
		DRM_ERROR("unknown asic: 0x%x\n", rdev->family);
1369
}
2429
}
Line 1372... Line 2432...
1372
			    u32 se_num, u32 sh_num)
2432
			    u32 se_num, u32 sh_num)
1373
{
2433
{
1374
	u32 data = INSTANCE_BROADCAST_WRITES;
2434
	u32 data = INSTANCE_BROADCAST_WRITES;
Line 1375... Line 2435...
1375
 
2435
 
1376
	if ((se_num == 0xffffffff) && (sh_num == 0xffffffff))
2436
	if ((se_num == 0xffffffff) && (sh_num == 0xffffffff))
1377
		data = SH_BROADCAST_WRITES | SE_BROADCAST_WRITES;
2437
		data |= SH_BROADCAST_WRITES | SE_BROADCAST_WRITES;
1378
	else if (se_num == 0xffffffff)
2438
	else if (se_num == 0xffffffff)
1379
		data |= SE_BROADCAST_WRITES | SH_INDEX(sh_num);
2439
		data |= SE_BROADCAST_WRITES | SH_INDEX(sh_num);
1380
	else if (sh_num == 0xffffffff)
2440
	else if (sh_num == 0xffffffff)
1381
		data |= SH_BROADCAST_WRITES | SE_INDEX(se_num);
2441
		data |= SH_BROADCAST_WRITES | SE_INDEX(se_num);
Line 1554... Line 2614...
1554
		break;
2614
		break;
1555
	case CHIP_VERDE:
2615
	case CHIP_VERDE:
1556
	default:
2616
	default:
1557
		rdev->config.si.max_shader_engines = 1;
2617
		rdev->config.si.max_shader_engines = 1;
1558
		rdev->config.si.max_tile_pipes = 4;
2618
		rdev->config.si.max_tile_pipes = 4;
1559
		rdev->config.si.max_cu_per_sh = 2;
2619
		rdev->config.si.max_cu_per_sh = 5;
1560
		rdev->config.si.max_sh_per_se = 2;
2620
		rdev->config.si.max_sh_per_se = 2;
1561
		rdev->config.si.max_backends_per_se = 4;
2621
		rdev->config.si.max_backends_per_se = 4;
1562
		rdev->config.si.max_texture_channel_caches = 4;
2622
		rdev->config.si.max_texture_channel_caches = 4;
1563
		rdev->config.si.max_gprs = 256;
2623
		rdev->config.si.max_gprs = 256;
1564
		rdev->config.si.max_gs_threads = 32;
2624
		rdev->config.si.max_gs_threads = 32;
Line 1568... Line 2628...
1568
		rdev->config.si.sc_prim_fifo_size_backend = 0x40;
2628
		rdev->config.si.sc_prim_fifo_size_backend = 0x40;
1569
		rdev->config.si.sc_hiz_tile_fifo_size = 0x30;
2629
		rdev->config.si.sc_hiz_tile_fifo_size = 0x30;
1570
		rdev->config.si.sc_earlyz_tile_fifo_size = 0x130;
2630
		rdev->config.si.sc_earlyz_tile_fifo_size = 0x130;
1571
		gb_addr_config = VERDE_GB_ADDR_CONFIG_GOLDEN;
2631
		gb_addr_config = VERDE_GB_ADDR_CONFIG_GOLDEN;
1572
		break;
2632
		break;
-
 
2633
	case CHIP_OLAND:
-
 
2634
		rdev->config.si.max_shader_engines = 1;
-
 
2635
		rdev->config.si.max_tile_pipes = 4;
-
 
2636
		rdev->config.si.max_cu_per_sh = 6;
-
 
2637
		rdev->config.si.max_sh_per_se = 1;
-
 
2638
		rdev->config.si.max_backends_per_se = 2;
-
 
2639
		rdev->config.si.max_texture_channel_caches = 4;
-
 
2640
		rdev->config.si.max_gprs = 256;
-
 
2641
		rdev->config.si.max_gs_threads = 16;
-
 
2642
		rdev->config.si.max_hw_contexts = 8;
-
 
2643
 
-
 
2644
		rdev->config.si.sc_prim_fifo_size_frontend = 0x20;
-
 
2645
		rdev->config.si.sc_prim_fifo_size_backend = 0x40;
-
 
2646
		rdev->config.si.sc_hiz_tile_fifo_size = 0x30;
-
 
2647
		rdev->config.si.sc_earlyz_tile_fifo_size = 0x130;
-
 
2648
		gb_addr_config = VERDE_GB_ADDR_CONFIG_GOLDEN;
-
 
2649
		break;
-
 
2650
	case CHIP_HAINAN:
-
 
2651
		rdev->config.si.max_shader_engines = 1;
-
 
2652
		rdev->config.si.max_tile_pipes = 4;
-
 
2653
		rdev->config.si.max_cu_per_sh = 5;
-
 
2654
		rdev->config.si.max_sh_per_se = 1;
-
 
2655
		rdev->config.si.max_backends_per_se = 1;
-
 
2656
		rdev->config.si.max_texture_channel_caches = 2;
-
 
2657
		rdev->config.si.max_gprs = 256;
-
 
2658
		rdev->config.si.max_gs_threads = 16;
-
 
2659
		rdev->config.si.max_hw_contexts = 8;
-
 
2660
 
-
 
2661
		rdev->config.si.sc_prim_fifo_size_frontend = 0x20;
-
 
2662
		rdev->config.si.sc_prim_fifo_size_backend = 0x40;
-
 
2663
		rdev->config.si.sc_hiz_tile_fifo_size = 0x30;
-
 
2664
		rdev->config.si.sc_earlyz_tile_fifo_size = 0x130;
-
 
2665
		gb_addr_config = HAINAN_GB_ADDR_CONFIG_GOLDEN;
-
 
2666
		break;
1573
	}
2667
	}
Line 1574... Line 2668...
1574
 
2668
 
1575
	/* Initialize HDP */
2669
	/* Initialize HDP */
1576
	for (i = 0, j = 0; i < 32; i++, j += 0x18) {
2670
	for (i = 0, j = 0; i < 32; i++, j += 0x18) {
Line 1657... Line 2751...
1657
	rdev->config.si.tile_config |=
2751
	rdev->config.si.tile_config |=
1658
		((gb_addr_config & ROW_SIZE_MASK) >> ROW_SIZE_SHIFT) << 12;
2752
		((gb_addr_config & ROW_SIZE_MASK) >> ROW_SIZE_SHIFT) << 12;
Line 1659... Line 2753...
1659
 
2753
 
1660
	WREG32(GB_ADDR_CONFIG, gb_addr_config);
2754
	WREG32(GB_ADDR_CONFIG, gb_addr_config);
-
 
2755
	WREG32(DMIF_ADDR_CONFIG, gb_addr_config);
1661
	WREG32(DMIF_ADDR_CONFIG, gb_addr_config);
2756
	WREG32(DMIF_ADDR_CALC, gb_addr_config);
1662
	WREG32(HDP_ADDR_CONFIG, gb_addr_config);
2757
	WREG32(HDP_ADDR_CONFIG, gb_addr_config);
1663
	WREG32(DMA_TILING_CONFIG + DMA0_REGISTER_OFFSET, gb_addr_config);
2758
	WREG32(DMA_TILING_CONFIG + DMA0_REGISTER_OFFSET, gb_addr_config);
-
 
2759
	WREG32(DMA_TILING_CONFIG + DMA1_REGISTER_OFFSET, gb_addr_config);
-
 
2760
	if (rdev->has_uvd) {
-
 
2761
		WREG32(UVD_UDEC_ADDR_CONFIG, gb_addr_config);
-
 
2762
		WREG32(UVD_UDEC_DB_ADDR_CONFIG, gb_addr_config);
-
 
2763
		WREG32(UVD_UDEC_DBW_ADDR_CONFIG, gb_addr_config);
Line 1664... Line 2764...
1664
	WREG32(DMA_TILING_CONFIG + DMA1_REGISTER_OFFSET, gb_addr_config);
2764
	}
Line 1665... Line 2765...
1665
 
2765
 
1666
	si_tiling_mode_table_init(rdev);
2766
	si_tiling_mode_table_init(rdev);
Line 2104... Line 3204...
2104
	}
3204
	}
Line 2105... Line 3205...
2105
 
3205
 
2106
	return 0;
3206
	return 0;
Line 2107... Line 3207...
2107
}
3207
}
2108
 
3208
 
2109
bool si_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
3209
static u32 si_gpu_check_soft_reset(struct radeon_device *rdev)
-
 
3210
{
-
 
3211
	u32 reset_mask = 0;
-
 
3212
	u32 tmp;
-
 
3213
 
-
 
3214
	/* GRBM_STATUS */
-
 
3215
	tmp = RREG32(GRBM_STATUS);
-
 
3216
	if (tmp & (PA_BUSY | SC_BUSY |
-
 
3217
		   BCI_BUSY | SX_BUSY |
-
 
3218
		   TA_BUSY | VGT_BUSY |
-
 
3219
		   DB_BUSY | CB_BUSY |
2110
{
3220
		   GDS_BUSY | SPI_BUSY |
-
 
3221
		   IA_BUSY | IA_BUSY_NO_DMA))
-
 
3222
		reset_mask |= RADEON_RESET_GFX;
-
 
3223
 
2111
	u32 srbm_status;
3224
	if (tmp & (CF_RQ_PENDING | PF_RQ_PENDING |
-
 
3225
		   CP_BUSY | CP_COHERENCY_BUSY))
-
 
3226
		reset_mask |= RADEON_RESET_CP;
-
 
3227
 
2112
	u32 grbm_status, grbm_status2;
3228
	if (tmp & GRBM_EE_BUSY)
-
 
3229
		reset_mask |= RADEON_RESET_GRBM | RADEON_RESET_GFX | RADEON_RESET_CP;
2113
	u32 grbm_status_se0, grbm_status_se1;
3230
 
-
 
3231
	/* GRBM_STATUS2 */
-
 
3232
	tmp = RREG32(GRBM_STATUS2);
-
 
3233
	if (tmp & (RLC_RQ_PENDING | RLC_BUSY))
-
 
3234
		reset_mask |= RADEON_RESET_RLC;
-
 
3235
 
-
 
3236
	/* DMA_STATUS_REG 0 */
-
 
3237
	tmp = RREG32(DMA_STATUS_REG + DMA0_REGISTER_OFFSET);
-
 
3238
	if (!(tmp & DMA_IDLE))
-
 
3239
		reset_mask |= RADEON_RESET_DMA;
-
 
3240
 
-
 
3241
	/* DMA_STATUS_REG 1 */
-
 
3242
	tmp = RREG32(DMA_STATUS_REG + DMA1_REGISTER_OFFSET);
-
 
3243
	if (!(tmp & DMA_IDLE))
-
 
3244
		reset_mask |= RADEON_RESET_DMA1;
2114
 
3245
 
-
 
3246
	/* SRBM_STATUS2 */
-
 
3247
	tmp = RREG32(SRBM_STATUS2);
-
 
3248
	if (tmp & DMA_BUSY)
-
 
3249
		reset_mask |= RADEON_RESET_DMA;
-
 
3250
 
-
 
3251
	if (tmp & DMA1_BUSY)
-
 
3252
		reset_mask |= RADEON_RESET_DMA1;
2115
	srbm_status = RREG32(SRBM_STATUS);
3253
 
-
 
3254
	/* SRBM_STATUS */
-
 
3255
	tmp = RREG32(SRBM_STATUS);
-
 
3256
 
-
 
3257
	if (tmp & IH_BUSY)
-
 
3258
		reset_mask |= RADEON_RESET_IH;
2116
	grbm_status = RREG32(GRBM_STATUS);
3259
 
-
 
3260
	if (tmp & SEM_BUSY)
-
 
3261
		reset_mask |= RADEON_RESET_SEM;
2117
	grbm_status2 = RREG32(GRBM_STATUS2);
3262
 
-
 
3263
	if (tmp & GRBM_RQ_PENDING)
-
 
3264
		reset_mask |= RADEON_RESET_GRBM;
-
 
3265
 
-
 
3266
	if (tmp & VMC_BUSY)
-
 
3267
		reset_mask |= RADEON_RESET_VMC;
-
 
3268
 
-
 
3269
	if (tmp & (MCB_BUSY | MCB_NON_DISPLAY_BUSY |
-
 
3270
		   MCC_BUSY | MCD_BUSY))
2118
	grbm_status_se0 = RREG32(GRBM_STATUS_SE0);
3271
		reset_mask |= RADEON_RESET_MC;
2119
	grbm_status_se1 = RREG32(GRBM_STATUS_SE1);
3272
 
-
 
3273
	if (evergreen_is_display_hung(rdev))
-
 
3274
		reset_mask |= RADEON_RESET_DISPLAY;
-
 
3275
 
2120
	if (!(grbm_status & GUI_ACTIVE)) {
3276
	/* VM_L2_STATUS */
-
 
3277
	tmp = RREG32(VM_L2_STATUS);
-
 
3278
	if (tmp & L2_BUSY)
-
 
3279
		reset_mask |= RADEON_RESET_VMC;
-
 
3280
 
-
 
3281
	/* Skip MC reset as it's mostly likely not hung, just busy */
-
 
3282
	if (reset_mask & RADEON_RESET_MC) {
2121
		radeon_ring_lockup_update(ring);
3283
		DRM_DEBUG("MC busy: 0x%08X, clearing.\n", reset_mask);
-
 
3284
		reset_mask &= ~RADEON_RESET_MC;
2122
		return false;
3285
	}
2123
	}
-
 
2124
	/* force CP activities */
-
 
2125
	radeon_ring_force_activity(rdev, ring);
3286
 
Line 2126... Line 3287...
2126
	return radeon_ring_test_lockup(rdev, ring);
3287
	return reset_mask;
2127
}
3288
}
-
 
3289
 
2128
 
3290
static void si_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask)
-
 
3291
{
Line 2129... Line 3292...
2129
static void si_gpu_soft_reset_gfx(struct radeon_device *rdev)
3292
	struct evergreen_mc_save save;
2130
{
3293
	u32 grbm_soft_reset = 0, srbm_soft_reset = 0;
Line 2131... Line 3294...
2131
	u32 grbm_reset = 0;
3294
	u32 tmp;
2132
 
-
 
-
 
3295
 
2133
	if (!(RREG32(GRBM_STATUS) & GUI_ACTIVE))
3296
	if (reset_mask == 0)
2134
		return;
-
 
2135
 
-
 
2136
	dev_info(rdev->dev, "  GRBM_STATUS=0x%08X\n",
-
 
2137
		RREG32(GRBM_STATUS));
3297
		return;
2138
	dev_info(rdev->dev, "  GRBM_STATUS2=0x%08X\n",
3298
 
2139
		RREG32(GRBM_STATUS2));
3299
	dev_info(rdev->dev, "GPU softreset: 0x%08X\n", reset_mask);
2140
	dev_info(rdev->dev, "  GRBM_STATUS_SE0=0x%08X\n",
3300
 
Line 2141... Line 3301...
2141
		RREG32(GRBM_STATUS_SE0));
3301
	evergreen_print_gpu_status_regs(rdev);
2142
	dev_info(rdev->dev, "  GRBM_STATUS_SE1=0x%08X\n",
3302
	dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_ADDR   0x%08X\n",
Line 2143... Line 3303...
2143
		RREG32(GRBM_STATUS_SE1));
3303
		 RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
-
 
3304
	dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
-
 
3305
		 RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
-
 
3306
 
-
 
3307
	/* Disable CP parsing/prefetching */
-
 
3308
	WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT);
2144
	dev_info(rdev->dev, "  SRBM_STATUS=0x%08X\n",
3309
 
-
 
3310
	if (reset_mask & RADEON_RESET_DMA) {
-
 
3311
		/* dma0 */
-
 
3312
		tmp = RREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET);
-
 
3313
		tmp &= ~DMA_RB_ENABLE;
-
 
3314
		WREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET, tmp);
-
 
3315
	}
-
 
3316
	if (reset_mask & RADEON_RESET_DMA1) {
-
 
3317
		/* dma1 */
-
 
3318
		tmp = RREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET);
-
 
3319
		tmp &= ~DMA_RB_ENABLE;
-
 
3320
		WREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET, tmp);
-
 
3321
	}
-
 
3322
 
-
 
3323
	udelay(50);
2145
		RREG32(SRBM_STATUS));
3324
 
2146
 
3325
	evergreen_mc_stop(rdev, &save);
2147
	/* Disable CP parsing/prefetching */
3326
	if (evergreen_mc_wait_for_idle(rdev)) {
2148
	WREG32(CP_ME_CNTL, CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT);
3327
		dev_warn(rdev->dev, "Wait for MC idle timedout !\n");
2149
 
3328
	}
2150
	/* reset all the gfx blocks */
3329
 
2151
	grbm_reset = (SOFT_RESET_CP |
3330
	if (reset_mask & (RADEON_RESET_GFX | RADEON_RESET_COMPUTE | RADEON_RESET_CP)) {
2152
		      SOFT_RESET_CB |
3331
		grbm_soft_reset = SOFT_RESET_CB |
2153
		      SOFT_RESET_DB |
3332
		      SOFT_RESET_DB |
2154
		      SOFT_RESET_GDS |
3333
		      SOFT_RESET_GDS |
2155
		      SOFT_RESET_PA |
3334
		      SOFT_RESET_PA |
2156
		      SOFT_RESET_SC |
3335
		      SOFT_RESET_SC |
-
 
3336
		      SOFT_RESET_BCI |
Line 2157... Line -...
2157
		      SOFT_RESET_BCI |
-
 
2158
		      SOFT_RESET_SPI |
-
 
2159
		      SOFT_RESET_SX |
3337
		      SOFT_RESET_SPI |
2160
		      SOFT_RESET_TC |
-
 
2161
		      SOFT_RESET_TA |
-
 
2162
		      SOFT_RESET_VGT |
3338
		      SOFT_RESET_SX |
Line 2163... Line -...
2163
		      SOFT_RESET_IA);
-
 
2164
 
-
 
2165
	dev_info(rdev->dev, "  GRBM_SOFT_RESET=0x%08X\n", grbm_reset);
-
 
2166
	WREG32(GRBM_SOFT_RESET, grbm_reset);
-
 
2167
	(void)RREG32(GRBM_SOFT_RESET);
-
 
2168
	udelay(50);
-
 
2169
	WREG32(GRBM_SOFT_RESET, 0);
-
 
2170
	(void)RREG32(GRBM_SOFT_RESET);
-
 
2171
 
3339
		      SOFT_RESET_TC |
2172
	dev_info(rdev->dev, "  GRBM_STATUS=0x%08X\n",
-
 
2173
		RREG32(GRBM_STATUS));
3340
		      SOFT_RESET_TA |
Line 2174... Line 3341...
2174
	dev_info(rdev->dev, "  GRBM_STATUS2=0x%08X\n",
3341
		      SOFT_RESET_VGT |
2175
		RREG32(GRBM_STATUS2));
-
 
2176
	dev_info(rdev->dev, "  GRBM_STATUS_SE0=0x%08X\n",
3342
			SOFT_RESET_IA;
Line 2177... Line 3343...
2177
		RREG32(GRBM_STATUS_SE0));
3343
	}
2178
	dev_info(rdev->dev, "  GRBM_STATUS_SE1=0x%08X\n",
3344
 
Line 2179... Line 3345...
2179
		RREG32(GRBM_STATUS_SE1));
3345
	if (reset_mask & RADEON_RESET_CP) {
2180
	dev_info(rdev->dev, "  SRBM_STATUS=0x%08X\n",
3346
		grbm_soft_reset |= SOFT_RESET_CP | SOFT_RESET_VGT;
Line 2181... Line -...
2181
		RREG32(SRBM_STATUS));
-
 
2182
}
3347
 
2183
 
3348
		srbm_soft_reset |= SOFT_RESET_GRBM;
2184
static void si_gpu_soft_reset_dma(struct radeon_device *rdev)
-
 
Line 2185... Line -...
2185
{
-
 
2186
	u32 tmp;
3349
	}
2187
 
-
 
2188
	if (RREG32(DMA_STATUS_REG) & DMA_IDLE)
3350
 
Line 2189... Line -...
2189
		return;
-
 
2190
 
-
 
2191
	dev_info(rdev->dev, "  DMA_STATUS_REG   = 0x%08X\n",
3351
	if (reset_mask & RADEON_RESET_DMA)
2192
		RREG32(DMA_STATUS_REG));
-
 
2193
 
3352
		srbm_soft_reset |= SOFT_RESET_DMA;
Line 2194... Line 3353...
2194
	/* dma0 */
3353
 
2195
	tmp = RREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET);
3354
	if (reset_mask & RADEON_RESET_DMA1)
2196
	tmp &= ~DMA_RB_ENABLE;
-
 
Line 2197... Line 3355...
2197
	WREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET, tmp);
3355
		srbm_soft_reset |= SOFT_RESET_DMA1;
2198
 
-
 
2199
	/* dma1 */
3356
 
Line 2200... Line 3357...
2200
	tmp = RREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET);
3357
	if (reset_mask & RADEON_RESET_DISPLAY)
2201
	tmp &= ~DMA_RB_ENABLE;
3358
		srbm_soft_reset |= SOFT_RESET_DC;
Line -... Line 3359...
-
 
3359
 
-
 
3360
	if (reset_mask & RADEON_RESET_RLC)
-
 
3361
		grbm_soft_reset |= SOFT_RESET_RLC;
2202
	WREG32(DMA_RB_CNTL + DMA1_REGISTER_OFFSET, tmp);
3362
 
-
 
3363
	if (reset_mask & RADEON_RESET_SEM)
-
 
3364
		srbm_soft_reset |= SOFT_RESET_SEM;
Line 2203... Line -...
2203
 
-
 
2204
	/* Reset dma */
3365
 
2205
	WREG32(SRBM_SOFT_RESET, SOFT_RESET_DMA | SOFT_RESET_DMA1);
-
 
2206
	RREG32(SRBM_SOFT_RESET);
-
 
Line 2207... Line 3366...
2207
	udelay(50);
3366
	if (reset_mask & RADEON_RESET_IH)
2208
	WREG32(SRBM_SOFT_RESET, 0);
3367
		srbm_soft_reset |= SOFT_RESET_IH;
2209
 
3368
 
2210
	dev_info(rdev->dev, "  DMA_STATUS_REG   = 0x%08X\n",
3369
	if (reset_mask & RADEON_RESET_GRBM)
Line -... Line 3370...
-
 
3370
		srbm_soft_reset |= SOFT_RESET_GRBM;
2211
		RREG32(DMA_STATUS_REG));
3371
 
2212
}
3372
	if (reset_mask & RADEON_RESET_VMC)
-
 
3373
		srbm_soft_reset |= SOFT_RESET_VMC;
-
 
3374
 
-
 
3375
	if (reset_mask & RADEON_RESET_MC)
Line -... Line 3376...
-
 
3376
		srbm_soft_reset |= SOFT_RESET_MC;
-
 
3377
 
-
 
3378
	if (grbm_soft_reset) {
2213
 
3379
		tmp = RREG32(GRBM_SOFT_RESET);
2214
static int si_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask)
3380
		tmp |= grbm_soft_reset;
-
 
3381
		dev_info(rdev->dev, "GRBM_SOFT_RESET=0x%08X\n", tmp);
Line 2215... Line 3382...
2215
{
3382
		WREG32(GRBM_SOFT_RESET, tmp);
2216
	struct evergreen_mc_save save;
3383
		tmp = RREG32(GRBM_SOFT_RESET);
Line 2217... Line 3384...
2217
 
3384
 
2218
	if (reset_mask == 0)
3385
		udelay(50);
-
 
3386
 
-
 
3387
		tmp &= ~grbm_soft_reset;
2219
		return 0;
3388
		WREG32(GRBM_SOFT_RESET, tmp);
Line 2220... Line 3389...
2220
 
3389
		tmp = RREG32(GRBM_SOFT_RESET);
2221
	dev_info(rdev->dev, "GPU softreset: 0x%08X\n", reset_mask);
3390
	}
-
 
3391
 
-
 
3392
	if (srbm_soft_reset) {
-
 
3393
		tmp = RREG32(SRBM_SOFT_RESET);
-
 
3394
		tmp |= srbm_soft_reset;
-
 
3395
		dev_info(rdev->dev, "SRBM_SOFT_RESET=0x%08X\n", tmp);
-
 
3396
		WREG32(SRBM_SOFT_RESET, tmp);
-
 
3397
		tmp = RREG32(SRBM_SOFT_RESET);
-
 
3398
 
-
 
3399
		udelay(50);
-
 
3400
 
-
 
3401
		tmp &= ~srbm_soft_reset;
-
 
3402
		WREG32(SRBM_SOFT_RESET, tmp);
-
 
3403
		tmp = RREG32(SRBM_SOFT_RESET);
-
 
3404
	}
-
 
3405
 
-
 
3406
	/* Wait a little for things to settle down */
-
 
3407
	udelay(50);
-
 
3408
 
-
 
3409
	evergreen_mc_resume(rdev, &save);
-
 
3410
	udelay(50);
-
 
3411
 
-
 
3412
	evergreen_print_gpu_status_regs(rdev);
-
 
3413
}
-
 
3414
 
-
 
3415
int si_asic_reset(struct radeon_device *rdev)
-
 
3416
{
-
 
3417
	u32 reset_mask;
-
 
3418
 
-
 
3419
	reset_mask = si_gpu_check_soft_reset(rdev);
-
 
3420
 
2222
 
3421
	if (reset_mask)
2223
	dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_ADDR   0x%08X\n",
3422
		r600_set_bios_scratch_engine_hung(rdev, true);
2224
		 RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
3423
 
-
 
3424
	si_gpu_soft_reset(rdev, reset_mask);
-
 
3425
 
-
 
3426
	reset_mask = si_gpu_check_soft_reset(rdev);
-
 
3427
 
-
 
3428
	if (!reset_mask)
-
 
3429
		r600_set_bios_scratch_engine_hung(rdev, false);
-
 
3430
 
-
 
3431
	return 0;
-
 
3432
}
-
 
3433
 
-
 
3434
/**
-
 
3435
 * si_gfx_is_lockup - Check if the GFX engine is locked up
-
 
3436
 *
-
 
3437
 * @rdev: radeon_device pointer
-
 
3438
 * @ring: radeon_ring structure holding ring information
-
 
3439
 *
-
 
3440
 * Check if the GFX engine is locked up.
-
 
3441
 * Returns true if the engine appears to be locked up, false if not.
-
 
3442
 */
-
 
3443
bool si_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
-
 
3444
{
-
 
3445
	u32 reset_mask = si_gpu_check_soft_reset(rdev);
-
 
3446
 
-
 
3447
	if (!(reset_mask & (RADEON_RESET_GFX |
-
 
3448
					RADEON_RESET_COMPUTE |
-
 
3449
			    RADEON_RESET_CP))) {
-
 
3450
		radeon_ring_lockup_update(ring);
-
 
3451
		return false;
-
 
3452
	}
-
 
3453
	/* force CP activities */
-
 
3454
	radeon_ring_force_activity(rdev, ring);
-
 
3455
	return radeon_ring_test_lockup(rdev, ring);
-
 
3456
}
-
 
3457
 
2225
	dev_info(rdev->dev, "  VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
3458
/**
Line 2226... Line 3459...
2226
		 RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
3459
 * si_dma_is_lockup - Check if the DMA engine is locked up
2227
 
3460
 *
2228
	evergreen_mc_stop(rdev, &save);
3461
 * @rdev: radeon_device pointer
Line 2269... Line 3502...
2269
 
3502
 
2270
	evergreen_mc_stop(rdev, &save);
3503
	evergreen_mc_stop(rdev, &save);
2271
	if (radeon_mc_wait_for_idle(rdev)) {
3504
	if (radeon_mc_wait_for_idle(rdev)) {
2272
		dev_warn(rdev->dev, "Wait for MC idle timedout !\n");
3505
		dev_warn(rdev->dev, "Wait for MC idle timedout !\n");
-
 
3506
	}
2273
	}
3507
	if (!ASIC_IS_NODCE(rdev))
2274
	/* Lockout access through VGA aperture*/
3508
	/* Lockout access through VGA aperture*/
2275
	WREG32(VGA_HDP_CONTROL, VGA_MEMORY_DISABLE);
3509
	WREG32(VGA_HDP_CONTROL, VGA_MEMORY_DISABLE);
2276
	/* Update configuration */
3510
	/* Update configuration */
2277
	WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR,
3511
	WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR,
Line 2292... Line 3526...
2292
	WREG32(MC_VM_AGP_BOT, 0x0FFFFFFF);
3526
	WREG32(MC_VM_AGP_BOT, 0x0FFFFFFF);
2293
	if (radeon_mc_wait_for_idle(rdev)) {
3527
	if (radeon_mc_wait_for_idle(rdev)) {
2294
		dev_warn(rdev->dev, "Wait for MC idle timedout !\n");
3528
		dev_warn(rdev->dev, "Wait for MC idle timedout !\n");
2295
	}
3529
	}
2296
	evergreen_mc_resume(rdev, &save);
3530
	evergreen_mc_resume(rdev, &save);
-
 
3531
	if (!ASIC_IS_NODCE(rdev)) {
2297
	/* we need to own VRAM, so turn off the VGA renderer here
3532
	/* we need to own VRAM, so turn off the VGA renderer here
2298
	 * to stop it overwriting our objects */
3533
	 * to stop it overwriting our objects */
2299
	rv515_vga_render_disable(rdev);
3534
	rv515_vga_render_disable(rdev);
2300
}
3535
		}
2301
 
-
 
2302
/* SI MC address space is 40 bits */
-
 
2303
static void si_vram_location(struct radeon_device *rdev,
-
 
2304
			     struct radeon_mc *mc, u64 base)
-
 
2305
{
-
 
2306
	mc->vram_start = base;
-
 
2307
	if (mc->mc_vram_size > (0xFFFFFFFFFFULL - base + 1)) {
-
 
2308
		dev_warn(rdev->dev, "limiting VRAM to PCI aperture size\n");
-
 
2309
		mc->real_vram_size = mc->aper_size;
-
 
2310
		mc->mc_vram_size = mc->aper_size;
-
 
2311
	}
-
 
2312
	mc->vram_end = mc->vram_start + mc->mc_vram_size - 1;
-
 
2313
	dev_info(rdev->dev, "VRAM: %lluM 0x%016llX - 0x%016llX (%lluM used)\n",
-
 
2314
			mc->mc_vram_size >> 20, mc->vram_start,
-
 
2315
			mc->vram_end, mc->real_vram_size >> 20);
-
 
2316
}
-
 
2317
 
-
 
2318
static void si_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc)
-
 
2319
{
-
 
2320
	u64 size_af, size_bf;
-
 
2321
 
-
 
2322
	size_af = ((0xFFFFFFFFFFULL - mc->vram_end) + mc->gtt_base_align) & ~mc->gtt_base_align;
-
 
2323
	size_bf = mc->vram_start & ~mc->gtt_base_align;
-
 
2324
	if (size_bf > size_af) {
-
 
2325
		if (mc->gtt_size > size_bf) {
-
 
2326
			dev_warn(rdev->dev, "limiting GTT\n");
-
 
2327
			mc->gtt_size = size_bf;
-
 
2328
		}
-
 
2329
		mc->gtt_start = (mc->vram_start & ~mc->gtt_base_align) - mc->gtt_size;
-
 
2330
	} else {
-
 
2331
		if (mc->gtt_size > size_af) {
-
 
2332
			dev_warn(rdev->dev, "limiting GTT\n");
-
 
2333
			mc->gtt_size = size_af;
-
 
2334
		}
-
 
2335
		mc->gtt_start = (mc->vram_end + 1 + mc->gtt_base_align) & ~mc->gtt_base_align;
-
 
2336
	}
-
 
2337
	mc->gtt_end = mc->gtt_start + mc->gtt_size - 1;
-
 
2338
	dev_info(rdev->dev, "GTT: %lluM 0x%016llX - 0x%016llX\n",
-
 
2339
			mc->gtt_size >> 20, mc->gtt_start, mc->gtt_end);
-
 
2340
}
3536
}
Line 2341... Line 3537...
2341
 
3537
 
2342
static void si_vram_gtt_location(struct radeon_device *rdev,
3538
static void si_vram_gtt_location(struct radeon_device *rdev,
2343
				 struct radeon_mc *mc)
3539
				 struct radeon_mc *mc)
Line 2346... Line 3542...
2346
		/* leave room for at least 1024M GTT */
3542
		/* leave room for at least 1024M GTT */
2347
		dev_warn(rdev->dev, "limiting VRAM\n");
3543
		dev_warn(rdev->dev, "limiting VRAM\n");
2348
		mc->real_vram_size = 0xFFC0000000ULL;
3544
		mc->real_vram_size = 0xFFC0000000ULL;
2349
		mc->mc_vram_size = 0xFFC0000000ULL;
3545
		mc->mc_vram_size = 0xFFC0000000ULL;
2350
	}
3546
	}
2351
	si_vram_location(rdev, &rdev->mc, 0);
3547
	radeon_vram_location(rdev, &rdev->mc, 0);
2352
	rdev->mc.gtt_base_align = 0;
3548
	rdev->mc.gtt_base_align = 0;
2353
	si_gtt_location(rdev, mc);
3549
	radeon_gtt_location(rdev, mc);
2354
}
3550
}
Line 2355... Line 3551...
2355
 
3551
 
2356
static int si_mc_init(struct radeon_device *rdev)
3552
static int si_mc_init(struct radeon_device *rdev)
2357
{
3553
{
Line 2402... Line 3598...
2402
	rdev->mc.vram_width = numchan * chansize;
3598
	rdev->mc.vram_width = numchan * chansize;
2403
	/* Could aper size report 0 ? */
3599
	/* Could aper size report 0 ? */
2404
	rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
3600
	rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
2405
	rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
3601
	rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
2406
	/* size in MB on si */
3602
	/* size in MB on si */
2407
	rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024;
3603
	rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
2408
	rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024;
3604
	rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
2409
	rdev->mc.visible_vram_size = rdev->mc.aper_size;
3605
	rdev->mc.visible_vram_size = rdev->mc.aper_size;
2410
	si_vram_gtt_location(rdev, &rdev->mc);
3606
	si_vram_gtt_location(rdev, &rdev->mc);
2411
	radeon_update_bandwidth_info(rdev);
3607
	radeon_update_bandwidth_info(rdev);
Line 2412... Line 3608...
2412
 
3608
 
Line 2847... Line 4043...
2847
	u32 idx = 0;
4043
	u32 idx = 0;
2848
	struct radeon_cs_packet pkt;
4044
	struct radeon_cs_packet pkt;
Line 2849... Line 4045...
2849
 
4045
 
2850
	do {
4046
	do {
2851
		pkt.idx = idx;
4047
		pkt.idx = idx;
2852
		pkt.type = CP_PACKET_GET_TYPE(ib->ptr[idx]);
4048
		pkt.type = RADEON_CP_PACKET_GET_TYPE(ib->ptr[idx]);
2853
		pkt.count = CP_PACKET_GET_COUNT(ib->ptr[idx]);
4049
		pkt.count = RADEON_CP_PACKET_GET_COUNT(ib->ptr[idx]);
2854
		pkt.one_reg_wr = 0;
4050
		pkt.one_reg_wr = 0;
2855
		switch (pkt.type) {
4051
		switch (pkt.type) {
2856
		case PACKET_TYPE0:
4052
		case RADEON_PACKET_TYPE0:
2857
			dev_err(rdev->dev, "Packet0 not allowed!\n");
4053
			dev_err(rdev->dev, "Packet0 not allowed!\n");
2858
			ret = -EINVAL;
4054
			ret = -EINVAL;
2859
			break;
4055
			break;
2860
		case PACKET_TYPE2:
4056
		case RADEON_PACKET_TYPE2:
2861
			idx += 1;
4057
			idx += 1;
2862
			break;
4058
			break;
2863
		case PACKET_TYPE3:
4059
		case RADEON_PACKET_TYPE3:
2864
			pkt.opcode = CP_PACKET3_GET_OPCODE(ib->ptr[idx]);
4060
			pkt.opcode = RADEON_CP_PACKET3_GET_OPCODE(ib->ptr[idx]);
2865
			if (ib->is_const_ib)
4061
			if (ib->is_const_ib)
2866
				ret = si_vm_packet3_ce_check(rdev, ib->ptr, &pkt);
4062
				ret = si_vm_packet3_ce_check(rdev, ib->ptr, &pkt);
2867
			else {
4063
			else {
2868
				switch (ib->ring) {
4064
				switch (ib->ring) {
Line 2912... Line 4108...
2912
 
4108
 
2913
/**
4109
/**
2914
 * si_vm_set_page - update the page tables using the CP
4110
 * si_vm_set_page - update the page tables using the CP
2915
 *
4111
 *
-
 
4112
 * @rdev: radeon_device pointer
2916
 * @rdev: radeon_device pointer
4113
 * @ib: indirect buffer to fill with commands
2917
 * @pe: addr of the page entry
4114
 * @pe: addr of the page entry
2918
 * @addr: dst addr to write into pe
4115
 * @addr: dst addr to write into pe
2919
 * @count: number of page entries to update
4116
 * @count: number of page entries to update
2920
 * @incr: increase next addr by incr bytes
4117
 * @incr: increase next addr by incr bytes
2921
 * @flags: access flags
4118
 * @flags: access flags
2922
 *
4119
 *
2923
 * Update the page tables using the CP (cayman-si).
4120
 * Update the page tables using the CP (SI).
2924
 */
4121
 */
-
 
4122
void si_vm_set_page(struct radeon_device *rdev,
-
 
4123
		    struct radeon_ib *ib,
2925
void si_vm_set_page(struct radeon_device *rdev, uint64_t pe,
4124
		    uint64_t pe,
2926
		    uint64_t addr, unsigned count,
4125
		    uint64_t addr, unsigned count,
2927
		    uint32_t incr, uint32_t flags)
4126
		    uint32_t incr, uint32_t flags)
2928
{
-
 
2929
	struct radeon_ring *ring = &rdev->ring[rdev->asic->vm.pt_ring_index];
4127
{
2930
	uint32_t r600_flags = cayman_vm_page_flags(rdev, flags);
4128
	uint32_t r600_flags = cayman_vm_page_flags(rdev, flags);
2931
	uint64_t value;
4129
	uint64_t value;
Line 2932... Line 4130...
2932
	unsigned ndw;
4130
	unsigned ndw;
2933
 
4131
 
2934
	if (rdev->asic->vm.pt_ring_index == RADEON_RING_TYPE_GFX_INDEX) {
4132
	if (rdev->asic->vm.pt_ring_index == RADEON_RING_TYPE_GFX_INDEX) {
2935
	while (count) {
4133
	while (count) {
2936
			ndw = 2 + count * 2;
4134
			ndw = 2 + count * 2;
Line 2937... Line 4135...
2937
		if (ndw > 0x3FFE)
4135
		if (ndw > 0x3FFE)
2938
			ndw = 0x3FFE;
4136
			ndw = 0x3FFE;
2939
 
4137
 
2940
		radeon_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, ndw));
4138
			ib->ptr[ib->length_dw++] = PACKET3(PACKET3_WRITE_DATA, ndw);
2941
		radeon_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
4139
			ib->ptr[ib->length_dw++] = (WRITE_DATA_ENGINE_SEL(0) |
2942
					 WRITE_DATA_DST_SEL(1)));
4140
					WRITE_DATA_DST_SEL(1));
2943
		radeon_ring_write(ring, pe);
4141
			ib->ptr[ib->length_dw++] = pe;
2944
		radeon_ring_write(ring, upper_32_bits(pe));
4142
			ib->ptr[ib->length_dw++] = upper_32_bits(pe);
2945
		for (; ndw > 2; ndw -= 2, --count, pe += 8) {
4143
		for (; ndw > 2; ndw -= 2, --count, pe += 8) {
2946
			if (flags & RADEON_VM_PAGE_SYSTEM) {
4144
			if (flags & RADEON_VM_PAGE_SYSTEM) {
Line 2951... Line 4149...
2951
				} else {
4149
				} else {
2952
				value = 0;
4150
				value = 0;
2953
				}
4151
				}
2954
			addr += incr;
4152
				addr += incr;
2955
			value |= r600_flags;
4153
				value |= r600_flags;
2956
			radeon_ring_write(ring, value);
4154
				ib->ptr[ib->length_dw++] = value;
2957
			radeon_ring_write(ring, upper_32_bits(value));
4155
				ib->ptr[ib->length_dw++] = upper_32_bits(value);
2958
		}
4156
			}
2959
	}
4157
		}
2960
	} else {
4158
	} else {
2961
		/* DMA */
4159
		/* DMA */
2962
		if (flags & RADEON_VM_PAGE_SYSTEM) {
4160
		if (flags & RADEON_VM_PAGE_SYSTEM) {
Line 2964... Line 4162...
2964
				ndw = count * 2;
4162
				ndw = count * 2;
2965
				if (ndw > 0xFFFFE)
4163
				if (ndw > 0xFFFFE)
2966
					ndw = 0xFFFFE;
4164
					ndw = 0xFFFFE;
Line 2967... Line 4165...
2967
 
4165
 
2968
				/* for non-physically contiguous pages (system) */
4166
				/* for non-physically contiguous pages (system) */
2969
				radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 0, ndw));
4167
				ib->ptr[ib->length_dw++] = DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 0, ndw);
2970
				radeon_ring_write(ring, pe);
4168
				ib->ptr[ib->length_dw++] = pe;
2971
				radeon_ring_write(ring, upper_32_bits(pe) & 0xff);
4169
				ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff;
2972
				for (; ndw > 0; ndw -= 2, --count, pe += 8) {
4170
				for (; ndw > 0; ndw -= 2, --count, pe += 8) {
2973
					if (flags & RADEON_VM_PAGE_SYSTEM) {
4171
					if (flags & RADEON_VM_PAGE_SYSTEM) {
2974
						value = radeon_vm_map_gart(rdev, addr);
4172
						value = radeon_vm_map_gart(rdev, addr);
2975
						value &= 0xFFFFFFFFFFFFF000ULL;
4173
						value &= 0xFFFFFFFFFFFFF000ULL;
Line 2978... Line 4176...
2978
					} else {
4176
					} else {
2979
						value = 0;
4177
						value = 0;
2980
					}
4178
					}
2981
			addr += incr;
4179
			addr += incr;
2982
			value |= r600_flags;
4180
			value |= r600_flags;
2983
			radeon_ring_write(ring, value);
4181
					ib->ptr[ib->length_dw++] = value;
2984
			radeon_ring_write(ring, upper_32_bits(value));
4182
					ib->ptr[ib->length_dw++] = upper_32_bits(value);
2985
		}
4183
		}
2986
	}
4184
	}
2987
		} else {
4185
		} else {
2988
			while (count) {
4186
			while (count) {
2989
				ndw = count * 2;
4187
				ndw = count * 2;
Line 2993... Line 4191...
2993
				if (flags & RADEON_VM_PAGE_VALID)
4191
				if (flags & RADEON_VM_PAGE_VALID)
2994
					value = addr;
4192
					value = addr;
2995
				else
4193
				else
2996
					value = 0;
4194
					value = 0;
2997
				/* for physically contiguous pages (vram) */
4195
				/* for physically contiguous pages (vram) */
2998
				radeon_ring_write(ring, DMA_PTE_PDE_PACKET(ndw));
4196
				ib->ptr[ib->length_dw++] = DMA_PTE_PDE_PACKET(ndw);
2999
				radeon_ring_write(ring, pe); /* dst addr */
4197
				ib->ptr[ib->length_dw++] = pe; /* dst addr */
3000
				radeon_ring_write(ring, upper_32_bits(pe) & 0xff);
4198
				ib->ptr[ib->length_dw++] = upper_32_bits(pe) & 0xff;
3001
				radeon_ring_write(ring, r600_flags); /* mask */
4199
				ib->ptr[ib->length_dw++] = r600_flags; /* mask */
3002
				radeon_ring_write(ring, 0);
4200
				ib->ptr[ib->length_dw++] = 0;
3003
				radeon_ring_write(ring, value); /* value */
4201
				ib->ptr[ib->length_dw++] = value; /* value */
3004
				radeon_ring_write(ring, upper_32_bits(value));
4202
				ib->ptr[ib->length_dw++] = upper_32_bits(value);
3005
				radeon_ring_write(ring, incr); /* increment size */
4203
				ib->ptr[ib->length_dw++] = incr; /* increment size */
3006
				radeon_ring_write(ring, 0);
4204
				ib->ptr[ib->length_dw++] = 0;
3007
				pe += ndw * 4;
4205
				pe += ndw * 4;
3008
				addr += (ndw / 2) * incr;
4206
				addr += (ndw / 2) * incr;
3009
				count -= ndw / 2;
4207
				count -= ndw / 2;
3010
			}
4208
			}
3011
		}
4209
		}
-
 
4210
		while (ib->length_dw & 0x7)
-
 
4211
			ib->ptr[ib->length_dw++] = DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0, 0);
3012
	}
4212
	}
3013
}
4213
}
Line 3014... Line 4214...
3014
 
4214
 
3015
void si_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm)
4215
void si_vm_flush(struct radeon_device *rdev, int ridx, struct radeon_vm *vm)
Line 3252... Line 4452...
3252
	tmp = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
4452
	tmp = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
3253
	WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, tmp);
4453
	WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, tmp);
3254
	tmp = RREG32(DMA_CNTL + DMA1_REGISTER_OFFSET) & ~TRAP_ENABLE;
4454
	tmp = RREG32(DMA_CNTL + DMA1_REGISTER_OFFSET) & ~TRAP_ENABLE;
3255
	WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, tmp);
4455
	WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, tmp);
3256
	WREG32(GRBM_INT_CNTL, 0);
4456
	WREG32(GRBM_INT_CNTL, 0);
-
 
4457
	if (rdev->num_crtc >= 2) {
3257
	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
4458
	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
3258
	WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
4459
	WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
-
 
4460
	}
3259
	if (rdev->num_crtc >= 4) {
4461
	if (rdev->num_crtc >= 4) {
3260
		WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
4462
		WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
3261
		WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
4463
		WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
3262
	}
4464
	}
3263
	if (rdev->num_crtc >= 6) {
4465
	if (rdev->num_crtc >= 6) {
3264
		WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
4466
		WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
3265
		WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
4467
		WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
3266
	}
4468
	}
Line -... Line 4469...
-
 
4469
 
3267
 
4470
	if (rdev->num_crtc >= 2) {
3268
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
4471
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
-
 
4472
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
3269
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
4473
	}
3270
	if (rdev->num_crtc >= 4) {
4474
	if (rdev->num_crtc >= 4) {
3271
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
4475
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
3272
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
4476
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
3273
	}
4477
	}
3274
	if (rdev->num_crtc >= 6) {
4478
	if (rdev->num_crtc >= 6) {
3275
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
4479
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
3276
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
4480
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
Line -... Line 4481...
-
 
4481
	}
3277
	}
4482
 
Line 3278... Line 4483...
3278
 
4483
	if (!ASIC_IS_NODCE(rdev)) {
3279
	WREG32(DACA_AUTODETECT_INT_CONTROL, 0);
4484
	WREG32(DACA_AUTODETECT_INT_CONTROL, 0);
3280
 
4485
 
Line 3288... Line 4493...
3288
	WREG32(DC_HPD4_INT_CONTROL, tmp);
4493
	WREG32(DC_HPD4_INT_CONTROL, tmp);
3289
	tmp = RREG32(DC_HPD5_INT_CONTROL) & DC_HPDx_INT_POLARITY;
4494
	tmp = RREG32(DC_HPD5_INT_CONTROL) & DC_HPDx_INT_POLARITY;
3290
	WREG32(DC_HPD5_INT_CONTROL, tmp);
4495
	WREG32(DC_HPD5_INT_CONTROL, tmp);
3291
	tmp = RREG32(DC_HPD6_INT_CONTROL) & DC_HPDx_INT_POLARITY;
4496
	tmp = RREG32(DC_HPD6_INT_CONTROL) & DC_HPDx_INT_POLARITY;
3292
	WREG32(DC_HPD6_INT_CONTROL, tmp);
4497
	WREG32(DC_HPD6_INT_CONTROL, tmp);
3293
 
4498
	}
3294
}
4499
}
Line 3295... Line 4500...
3295
 
4500
 
3296
static int si_irq_init(struct radeon_device *rdev)
4501
static int si_irq_init(struct radeon_device *rdev)
3297
{
4502
{
Line 3367... Line 4572...
3367
int si_irq_set(struct radeon_device *rdev)
4572
int si_irq_set(struct radeon_device *rdev)
3368
{
4573
{
3369
	u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE;
4574
	u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE;
3370
	u32 cp_int_cntl1 = 0, cp_int_cntl2 = 0;
4575
	u32 cp_int_cntl1 = 0, cp_int_cntl2 = 0;
3371
	u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0;
4576
	u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0;
3372
	u32 hpd1, hpd2, hpd3, hpd4, hpd5, hpd6;
4577
	u32 hpd1 = 0, hpd2 = 0, hpd3 = 0, hpd4 = 0, hpd5 = 0, hpd6 = 0;
3373
	u32 grbm_int_cntl = 0;
4578
	u32 grbm_int_cntl = 0;
3374
	u32 grph1 = 0, grph2 = 0, grph3 = 0, grph4 = 0, grph5 = 0, grph6 = 0;
4579
	u32 grph1 = 0, grph2 = 0, grph3 = 0, grph4 = 0, grph5 = 0, grph6 = 0;
3375
	u32 dma_cntl, dma_cntl1;
4580
	u32 dma_cntl, dma_cntl1;
Line 3376... Line 4581...
3376
 
4581
 
Line 3384... Line 4589...
3384
		/* force the active interrupt state to all disabled */
4589
		/* force the active interrupt state to all disabled */
3385
		si_disable_interrupt_state(rdev);
4590
		si_disable_interrupt_state(rdev);
3386
		return 0;
4591
		return 0;
3387
	}
4592
	}
Line -... Line 4593...
-
 
4593
 
3388
 
4594
	if (!ASIC_IS_NODCE(rdev)) {
3389
	hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN;
4595
	hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN;
3390
	hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN;
4596
	hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN;
3391
	hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN;
4597
	hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN;
3392
	hpd4 = RREG32(DC_HPD4_INT_CONTROL) & ~DC_HPDx_INT_EN;
4598
	hpd4 = RREG32(DC_HPD4_INT_CONTROL) & ~DC_HPDx_INT_EN;
3393
	hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN;
4599
	hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN;
-
 
4600
	hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN;
Line 3394... Line 4601...
3394
	hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN;
4601
	}
3395
 
4602
 
Line 3396... Line 4603...
3396
	dma_cntl = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
4603
	dma_cntl = RREG32(DMA_CNTL + DMA0_REGISTER_OFFSET) & ~TRAP_ENABLE;
Line 3480... Line 4687...
3480
	WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, dma_cntl);
4687
	WREG32(DMA_CNTL + DMA0_REGISTER_OFFSET, dma_cntl);
3481
	WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, dma_cntl1);
4688
	WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, dma_cntl1);
Line 3482... Line 4689...
3482
 
4689
 
Line -... Line 4690...
-
 
4690
	WREG32(GRBM_INT_CNTL, grbm_int_cntl);
3483
	WREG32(GRBM_INT_CNTL, grbm_int_cntl);
4691
 
3484
 
4692
	if (rdev->num_crtc >= 2) {
-
 
4693
	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1);
3485
	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1);
4694
	WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, crtc2);
3486
	WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, crtc2);
4695
	}
3487
	if (rdev->num_crtc >= 4) {
4696
	if (rdev->num_crtc >= 4) {
3488
		WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, crtc3);
4697
		WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, crtc3);
3489
		WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, crtc4);
4698
		WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, crtc4);
3490
	}
4699
	}
3491
	if (rdev->num_crtc >= 6) {
4700
	if (rdev->num_crtc >= 6) {
3492
		WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, crtc5);
4701
		WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, crtc5);
Line -... Line 4702...
-
 
4702
		WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, crtc6);
3493
		WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, crtc6);
4703
	}
3494
	}
4704
 
-
 
4705
	if (rdev->num_crtc >= 2) {
3495
 
4706
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, grph1);
3496
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, grph1);
4707
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, grph2);
3497
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, grph2);
4708
	}
3498
	if (rdev->num_crtc >= 4) {
4709
	if (rdev->num_crtc >= 4) {
3499
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, grph3);
4710
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, grph3);
3500
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, grph4);
4711
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, grph4);
3501
	}
4712
	}
3502
	if (rdev->num_crtc >= 6) {
4713
	if (rdev->num_crtc >= 6) {
Line -... Line 4714...
-
 
4714
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, grph5);
3503
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, grph5);
4715
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, grph6);
3504
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, grph6);
4716
	}
3505
	}
4717
 
3506
 
4718
	if (!ASIC_IS_NODCE(rdev)) {
3507
	WREG32(DC_HPD1_INT_CONTROL, hpd1);
4719
	WREG32(DC_HPD1_INT_CONTROL, hpd1);
3508
	WREG32(DC_HPD2_INT_CONTROL, hpd2);
4720
	WREG32(DC_HPD2_INT_CONTROL, hpd2);
-
 
4721
	WREG32(DC_HPD3_INT_CONTROL, hpd3);
Line 3509... Line 4722...
3509
	WREG32(DC_HPD3_INT_CONTROL, hpd3);
4722
	WREG32(DC_HPD4_INT_CONTROL, hpd4);
3510
	WREG32(DC_HPD4_INT_CONTROL, hpd4);
4723
	WREG32(DC_HPD5_INT_CONTROL, hpd5);
Line 3511... Line 4724...
3511
	WREG32(DC_HPD5_INT_CONTROL, hpd5);
4724
	WREG32(DC_HPD6_INT_CONTROL, hpd6);
3512
	WREG32(DC_HPD6_INT_CONTROL, hpd6);
4725
	}
3513
 
4726
 
Line -... Line 4727...
-
 
4727
	return 0;
-
 
4728
}
-
 
4729
 
3514
	return 0;
4730
static inline void si_irq_ack(struct radeon_device *rdev)
3515
}
4731
{
3516
 
4732
	u32 tmp;
3517
static inline void si_irq_ack(struct radeon_device *rdev)
4733
 
3518
{
4734
	if (ASIC_IS_NODCE(rdev))
Line 4077... Line 5293...
4077
	r = si_pcie_gart_enable(rdev);
5293
	r = si_pcie_gart_enable(rdev);
4078
	if (r)
5294
	if (r)
4079
		return r;
5295
		return r;
4080
	si_gpu_init(rdev);
5296
	si_gpu_init(rdev);
Line 4081... Line -...
4081
 
-
 
4082
#if 0
-
 
4083
	r = evergreen_blit_init(rdev);
-
 
4084
	if (r) {
-
 
4085
		r600_blit_fini(rdev);
-
 
4086
		rdev->asic->copy = NULL;
-
 
4087
		dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r);
-
 
4088
	}
-
 
4089
#endif
5297
 
4090
	/* allocate rlc buffers */
5298
	/* allocate rlc buffers */
4091
	r = si_rlc_init(rdev);
5299
	r = si_rlc_init(rdev);
4092
	if (r) {
5300
	if (r) {
4093
		DRM_ERROR("Failed to init rlc BOs!\n");
5301
		DRM_ERROR("Failed to init rlc BOs!\n");
Line 4127... Line 5335...
4127
	if (r) {
5335
	if (r) {
4128
		dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r);
5336
		dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r);
4129
		return r;
5337
		return r;
4130
	}
5338
	}
Line -... Line 5339...
-
 
5339
 
4131
 
5340
 
-
 
5341
	/* Enable IRQ */
-
 
5342
	if (!rdev->irq.installed) {
-
 
5343
		r = radeon_irq_kms_init(rdev);
-
 
5344
		if (r)
-
 
5345
			return r;
-
 
5346
	}
4132
	/* Enable IRQ */
5347
 
4133
	r = si_irq_init(rdev);
5348
	r = si_irq_init(rdev);
4134
	if (r) {
5349
	if (r) {
4135
		DRM_ERROR("radeon: IH init failed (%d).\n", r);
5350
		DRM_ERROR("radeon: IH init failed (%d).\n", r);
4136
		radeon_irq_kms_fini(rdev);
5351
		radeon_irq_kms_fini(rdev);
Line 4184... Line 5399...
4184
 
5399
 
4185
	r = cayman_dma_resume(rdev);
5400
	r = cayman_dma_resume(rdev);
4186
	if (r)
5401
	if (r)
Line -... Line 5402...
-
 
5402
		return r;
4187
		return r;
5403
 
4188
 
5404
 
4189
	r = radeon_ib_pool_init(rdev);
5405
	r = radeon_ib_pool_init(rdev);
4190
	if (r) {
5406
	if (r) {
4191
		dev_err(rdev->dev, "IB initialization failed (%d).\n", r);
5407
		dev_err(rdev->dev, "IB initialization failed (%d).\n", r);
Line 4192... Line 5408...
4192
		return r;
5408
		return r;
4193
	}
5409
	}
4194
 
5410
 
4195
//   r = radeon_vm_manager_init(rdev);
5411
	r = radeon_vm_manager_init(rdev);
4196
//   if (r) {
5412
	if (r) {
Line 4197... Line 5413...
4197
//       dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r);
5413
		dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r);
4198
//       return r;
5414
		return r;
Line 4238... Line 5454...
4238
			return -EINVAL;
5454
			return -EINVAL;
4239
		}
5455
		}
4240
		DRM_INFO("GPU not posted. posting now...\n");
5456
		DRM_INFO("GPU not posted. posting now...\n");
4241
		atom_asic_init(rdev->mode_info.atom_context);
5457
		atom_asic_init(rdev->mode_info.atom_context);
4242
	}
5458
	}
-
 
5459
	/* init golden registers */
-
 
5460
	si_init_golden_registers(rdev);
4243
	/* Initialize scratch registers */
5461
	/* Initialize scratch registers */
4244
	si_scratch_init(rdev);
5462
	si_scratch_init(rdev);
4245
	/* Initialize surface registers */
5463
	/* Initialize surface registers */
4246
	radeon_surface_init(rdev);
5464
	radeon_surface_init(rdev);
4247
	/* Initialize clocks */
5465
	/* Initialize clocks */
Line 4259... Line 5477...
4259
	/* Memory manager */
5477
	/* Memory manager */
4260
	r = radeon_bo_init(rdev);
5478
	r = radeon_bo_init(rdev);
4261
	if (r)
5479
	if (r)
4262
		return r;
5480
		return r;
Line 4263... Line -...
4263
 
-
 
4264
	r = radeon_irq_kms_init(rdev);
-
 
4265
	if (r)
-
 
4266
		return r;
-
 
4267
 
5481
 
4268
	ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
5482
	ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
4269
	ring->ring_obj = NULL;
5483
	ring->ring_obj = NULL;
Line 4270... Line 5484...
4270
	r600_ring_init(rdev, ring, 1024 * 1024);
5484
	r600_ring_init(rdev, ring, 1024 * 1024);
Line 4319... Line 5533...
4319
 
5533
 
4320
	return 0;
5534
	return 0;
Line 4321... Line 5535...
4321
}
5535
}
4322
 
5536
 
4323
/**
5537
/**
4324
 * si_get_gpu_clock - return GPU clock counter snapshot
5538
 * si_get_gpu_clock_counter - return GPU clock counter snapshot
4325
 *
5539
 *
4326
 * @rdev: radeon_device pointer
5540
 * @rdev: radeon_device pointer
4327
 *
5541
 *
4328
 * Fetches a GPU clock counter snapshot (SI).
5542
 * Fetches a GPU clock counter snapshot (SI).
4329
 * Returns the 64 bit clock counter snapshot.
5543
 * Returns the 64 bit clock counter snapshot.
4330
 */
5544
 */
4331
uint64_t si_get_gpu_clock(struct radeon_device *rdev)
5545
uint64_t si_get_gpu_clock_counter(struct radeon_device *rdev)
Line 4332... Line 5546...
4332
{
5546
{
4333
	uint64_t clock;
5547
	uint64_t clock;
4334
 
5548
 
4335
	mutex_lock(&rdev->gpu_clock_mutex);
5549
	mutex_lock(&rdev->gpu_clock_mutex);
4336
	WREG32(RLC_CAPTURE_GPU_CLOCK_COUNT, 1);
5550
	WREG32(RLC_CAPTURE_GPU_CLOCK_COUNT, 1);
4337
	clock = (uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_LSB) |
5551
	clock = (uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_LSB) |
4338
	        ((uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_MSB) << 32ULL);
5552
	        ((uint64_t)RREG32(RLC_GPU_CLOCK_COUNT_MSB) << 32ULL);
-
 
5553
	mutex_unlock(&rdev->gpu_clock_mutex);
-
 
5554
	return clock;
-
 
5555
}
-
 
5556
 
-
 
5557
#if 0
-
 
5558
int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)
-
 
5559
{
-
 
5560
	unsigned fb_div = 0, vclk_div = 0, dclk_div = 0;
-
 
5561
	int r;
-
 
5562
 
-
 
5563
	/* bypass vclk and dclk with bclk */
-
 
5564
	WREG32_P(CG_UPLL_FUNC_CNTL_2,
-
 
5565
		VCLK_SRC_SEL(1) | DCLK_SRC_SEL(1),
-
 
5566
		~(VCLK_SRC_SEL_MASK | DCLK_SRC_SEL_MASK));
-
 
5567
 
-
 
5568
	/* put PLL in bypass mode */
-
 
5569
	WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_BYPASS_EN_MASK, ~UPLL_BYPASS_EN_MASK);
-
 
5570
 
-
 
5571
	if (!vclk || !dclk) {
-
 
5572
		/* keep the Bypass mode, put PLL to sleep */
-
 
5573
		WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK);
-
 
5574
		return 0;
-
 
5575
	}
-
 
5576
 
-
 
5577
	r = radeon_uvd_calc_upll_dividers(rdev, vclk, dclk, 125000, 250000,
-
 
5578
					  16384, 0x03FFFFFF, 0, 128, 5,
-
 
5579
					  &fb_div, &vclk_div, &dclk_div);
-
 
5580
	if (r)
-
 
5581
		return r;
-
 
5582
 
-
 
5583
	/* set RESET_ANTI_MUX to 0 */
-
 
5584
	WREG32_P(CG_UPLL_FUNC_CNTL_5, 0, ~RESET_ANTI_MUX_MASK);
-
 
5585
 
-
 
5586
	/* set VCO_MODE to 1 */
-
 
5587
	WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_VCO_MODE_MASK, ~UPLL_VCO_MODE_MASK);
-
 
5588
 
-
 
5589
	/* toggle UPLL_SLEEP to 1 then back to 0 */
-
 
5590
	WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK);
-
 
5591
	WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_SLEEP_MASK);
-
 
5592
 
-
 
5593
	/* deassert UPLL_RESET */
-
 
5594
	WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_RESET_MASK);
-
 
5595
 
-
 
5596
	mdelay(1);
-
 
5597
 
-
 
5598
	r = radeon_uvd_send_upll_ctlreq(rdev, CG_UPLL_FUNC_CNTL);
-
 
5599
	if (r)
-
 
5600
		return r;
-
 
5601
 
-
 
5602
	/* assert UPLL_RESET again */
-
 
5603
	WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_RESET_MASK, ~UPLL_RESET_MASK);
-
 
5604
 
-
 
5605
	/* disable spread spectrum. */
-
 
5606
	WREG32_P(CG_UPLL_SPREAD_SPECTRUM, 0, ~SSEN_MASK);
-
 
5607
 
-
 
5608
	/* set feedback divider */
-
 
5609
	WREG32_P(CG_UPLL_FUNC_CNTL_3, UPLL_FB_DIV(fb_div), ~UPLL_FB_DIV_MASK);
-
 
5610
 
-
 
5611
	/* set ref divider to 0 */
-
 
5612
	WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_REF_DIV_MASK);
-
 
5613
 
-
 
5614
	if (fb_div < 307200)
-
 
5615
		WREG32_P(CG_UPLL_FUNC_CNTL_4, 0, ~UPLL_SPARE_ISPARE9);
-
 
5616
	else
-
 
5617
		WREG32_P(CG_UPLL_FUNC_CNTL_4, UPLL_SPARE_ISPARE9, ~UPLL_SPARE_ISPARE9);
-
 
5618
 
-
 
5619
	/* set PDIV_A and PDIV_B */
-
 
5620
	WREG32_P(CG_UPLL_FUNC_CNTL_2,
-
 
5621
		UPLL_PDIV_A(vclk_div) | UPLL_PDIV_B(dclk_div),
-
 
5622
		~(UPLL_PDIV_A_MASK | UPLL_PDIV_B_MASK));
-
 
5623
 
-
 
5624
	/* give the PLL some time to settle */
-
 
5625
	mdelay(15);
-
 
5626
 
-
 
5627
	/* deassert PLL_RESET */
-
 
5628
	WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_RESET_MASK);
-
 
5629
 
-
 
5630
	mdelay(15);
-
 
5631
 
-
 
5632
	/* switch from bypass mode to normal mode */
-
 
5633
	WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_BYPASS_EN_MASK);
-
 
5634
 
-
 
5635
	r = radeon_uvd_send_upll_ctlreq(rdev, CG_UPLL_FUNC_CNTL);
-
 
5636
	if (r)
-
 
5637
		return r;
-
 
5638
 
-
 
5639
	/* switch VCLK and DCLK selection */
-
 
5640
	WREG32_P(CG_UPLL_FUNC_CNTL_2,
-
 
5641
		VCLK_SRC_SEL(2) | DCLK_SRC_SEL(2),
-
 
5642
		~(VCLK_SRC_SEL_MASK | DCLK_SRC_SEL_MASK));
-
 
5643
 
-
 
5644
	mdelay(100);
-
 
5645