diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-02-28 17:58:36 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-04-23 18:03:57 -0400 |
commit | a2c96a2112a32b332aa7bf9622b122a18caf2dfc (patch) | |
tree | b873397630000db707846e92bee9481ec459fc4e | |
parent | d4788db30a1a66255b592dd12613dda80c1443f7 (diff) |
drm/radeon/cayman,TN: add support for golden register init (v2)
v2: add richland support
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index fd03f318cc1c..7436b91699d0 100644 --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c | |||
@@ -78,6 +78,282 @@ MODULE_FIRMWARE("radeon/ARUBA_pfp.bin"); | |||
78 | MODULE_FIRMWARE("radeon/ARUBA_me.bin"); | 78 | MODULE_FIRMWARE("radeon/ARUBA_me.bin"); |
79 | MODULE_FIRMWARE("radeon/ARUBA_rlc.bin"); | 79 | MODULE_FIRMWARE("radeon/ARUBA_rlc.bin"); |
80 | 80 | ||
81 | |||
82 | static const u32 cayman_golden_registers2[] = | ||
83 | { | ||
84 | 0x3e5c, 0xffffffff, 0x00000000, | ||
85 | 0x3e48, 0xffffffff, 0x00000000, | ||
86 | 0x3e4c, 0xffffffff, 0x00000000, | ||
87 | 0x3e64, 0xffffffff, 0x00000000, | ||
88 | 0x3e50, 0xffffffff, 0x00000000, | ||
89 | 0x3e60, 0xffffffff, 0x00000000 | ||
90 | }; | ||
91 | |||
92 | static const u32 cayman_golden_registers[] = | ||
93 | { | ||
94 | 0x5eb4, 0xffffffff, 0x00000002, | ||
95 | 0x5e78, 0x8f311ff1, 0x001000f0, | ||
96 | 0x3f90, 0xffff0000, 0xff000000, | ||
97 | 0x9148, 0xffff0000, 0xff000000, | ||
98 | 0x3f94, 0xffff0000, 0xff000000, | ||
99 | 0x914c, 0xffff0000, 0xff000000, | ||
100 | 0xc78, 0x00000080, 0x00000080, | ||
101 | 0xbd4, 0x70073777, 0x00011003, | ||
102 | 0xd02c, 0xbfffff1f, 0x08421000, | ||
103 | 0xd0b8, 0x73773777, 0x02011003, | ||
104 | 0x5bc0, 0x00200000, 0x50100000, | ||
105 | 0x98f8, 0x33773777, 0x02011003, | ||
106 | 0x98fc, 0xffffffff, 0x76541032, | ||
107 | 0x7030, 0x31000311, 0x00000011, | ||
108 | 0x2f48, 0x33773777, 0x42010001, | ||
109 | 0x6b28, 0x00000010, 0x00000012, | ||
110 | 0x7728, 0x00000010, 0x00000012, | ||
111 | 0x10328, 0x00000010, 0x00000012, | ||
112 | 0x10f28, 0x00000010, 0x00000012, | ||
113 | 0x11b28, 0x00000010, 0x00000012, | ||
114 | 0x12728, 0x00000010, 0x00000012, | ||
115 | 0x240c, 0x000007ff, 0x00000000, | ||
116 | 0x8a14, 0xf000001f, 0x00000007, | ||
117 | 0x8b24, 0x3fff3fff, 0x00ff0fff, | ||
118 | 0x8b10, 0x0000ff0f, 0x00000000, | ||
119 | 0x28a4c, 0x07ffffff, 0x06000000, | ||
120 | 0x10c, 0x00000001, 0x00010003, | ||
121 | 0xa02c, 0xffffffff, 0x0000009b, | ||
122 | 0x913c, 0x0000010f, 0x01000100, | ||
123 | 0x8c04, 0xf8ff00ff, 0x40600060, | ||
124 | 0x28350, 0x00000f01, 0x00000000, | ||
125 | 0x9508, 0x3700001f, 0x00000002, | ||
126 | 0x960c, 0xffffffff, 0x54763210, | ||
127 | 0x88c4, 0x001f3ae3, 0x00000082, | ||
128 | 0x88d0, 0xffffffff, 0x0f40df40, | ||
129 | 0x88d4, 0x0000001f, 0x00000010, | ||
130 | 0x8974, 0xffffffff, 0x00000000 | ||
131 | }; | ||
132 | |||
133 | static const u32 dvst_golden_registers2[] = | ||
134 | { | ||
135 | 0x8f8, 0xffffffff, 0, | ||
136 | 0x8fc, 0x00380000, 0, | ||
137 | 0x8f8, 0xffffffff, 1, | ||
138 | 0x8fc, 0x0e000000, 0 | ||
139 | }; | ||
140 | |||
141 | static const u32 dvst_golden_registers[] = | ||
142 | { | ||
143 | 0x690, 0x3fff3fff, 0x20c00033, | ||
144 | 0x918c, 0x0fff0fff, 0x00010006, | ||
145 | 0x91a8, 0x0fff0fff, 0x00010006, | ||
146 | 0x9150, 0xffffdfff, 0x6e944040, | ||
147 | 0x917c, 0x0fff0fff, 0x00030002, | ||
148 | 0x9198, 0x0fff0fff, 0x00030002, | ||
149 | 0x915c, 0x0fff0fff, 0x00010000, | ||
150 | 0x3f90, 0xffff0001, 0xff000000, | ||
151 | 0x9178, 0x0fff0fff, 0x00070000, | ||
152 | 0x9194, 0x0fff0fff, 0x00070000, | ||
153 | 0x9148, 0xffff0001, 0xff000000, | ||
154 | 0x9190, 0x0fff0fff, 0x00090008, | ||
155 | 0x91ac, 0x0fff0fff, 0x00090008, | ||
156 | 0x3f94, 0xffff0000, 0xff000000, | ||
157 | 0x914c, 0xffff0000, 0xff000000, | ||
158 | 0x929c, 0x00000fff, 0x00000001, | ||
159 | 0x55e4, 0xff607fff, 0xfc000100, | ||
160 | 0x8a18, 0xff000fff, 0x00000100, | ||
161 | 0x8b28, 0xff000fff, 0x00000100, | ||
162 | 0x9144, 0xfffc0fff, 0x00000100, | ||
163 | 0x6ed8, 0x00010101, 0x00010000, | ||
164 | 0x9830, 0xffffffff, 0x00000000, | ||
165 | 0x9834, 0xf00fffff, 0x00000400, | ||
166 | 0x9838, 0xfffffffe, 0x00000000, | ||
167 | 0xd0c0, 0xff000fff, 0x00000100, | ||
168 | 0xd02c, 0xbfffff1f, 0x08421000, | ||
169 | 0xd0b8, 0x73773777, 0x12010001, | ||
170 | 0x5bb0, 0x000000f0, 0x00000070, | ||
171 | 0x98f8, 0x73773777, 0x12010001, | ||
172 | 0x98fc, 0xffffffff, 0x00000010, | ||
173 | 0x9b7c, 0x00ff0000, 0x00fc0000, | ||
174 | 0x8030, 0x00001f0f, 0x0000100a, | ||
175 | 0x2f48, 0x73773777, 0x12010001, | ||
176 | 0x2408, 0x00030000, 0x000c007f, | ||
177 | 0x8a14, 0xf000003f, 0x00000007, | ||
178 | 0x8b24, 0x3fff3fff, 0x00ff0fff, | ||
179 | 0x8b10, 0x0000ff0f, 0x00000000, | ||
180 | 0x28a4c, 0x07ffffff, 0x06000000, | ||
181 | 0x4d8, 0x00000fff, 0x00000100, | ||
182 | 0xa008, 0xffffffff, 0x00010000, | ||
183 | 0x913c, 0xffff03ff, 0x01000100, | ||
184 | 0x8c00, 0x000000ff, 0x00000003, | ||
185 | 0x8c04, 0xf8ff00ff, 0x40600060, | ||
186 | 0x8cf0, 0x1fff1fff, 0x08e00410, | ||
187 | 0x28350, 0x00000f01, 0x00000000, | ||
188 | 0x9508, 0xf700071f, 0x00000002, | ||
189 | 0x960c, 0xffffffff, 0x54763210, | ||
190 | 0x20ef8, 0x01ff01ff, 0x00000002, | ||
191 | 0x20e98, 0xfffffbff, 0x00200000, | ||
192 | 0x2015c, 0xffffffff, 0x00000f40, | ||
193 | 0x88c4, 0x001f3ae3, 0x00000082, | ||
194 | 0x8978, 0x3fffffff, 0x04050140, | ||
195 | 0x88d4, 0x0000001f, 0x00000010, | ||
196 | 0x8974, 0xffffffff, 0x00000000 | ||
197 | }; | ||
198 | |||
199 | static const u32 scrapper_golden_registers[] = | ||
200 | { | ||
201 | 0x690, 0x3fff3fff, 0x20c00033, | ||
202 | 0x918c, 0x0fff0fff, 0x00010006, | ||
203 | 0x918c, 0x0fff0fff, 0x00010006, | ||
204 | 0x91a8, 0x0fff0fff, 0x00010006, | ||
205 | 0x91a8, 0x0fff0fff, 0x00010006, | ||
206 | 0x9150, 0xffffdfff, 0x6e944040, | ||
207 | 0x9150, 0xffffdfff, 0x6e944040, | ||
208 | 0x917c, 0x0fff0fff, 0x00030002, | ||
209 | 0x917c, 0x0fff0fff, 0x00030002, | ||
210 | 0x9198, 0x0fff0fff, 0x00030002, | ||
211 | 0x9198, 0x0fff0fff, 0x00030002, | ||
212 | 0x915c, 0x0fff0fff, 0x00010000, | ||
213 | 0x915c, 0x0fff0fff, 0x00010000, | ||
214 | 0x3f90, 0xffff0001, 0xff000000, | ||
215 | 0x3f90, 0xffff0001, 0xff000000, | ||
216 | 0x9178, 0x0fff0fff, 0x00070000, | ||
217 | 0x9178, 0x0fff0fff, 0x00070000, | ||
218 | 0x9194, 0x0fff0fff, 0x00070000, | ||
219 | 0x9194, 0x0fff0fff, 0x00070000, | ||
220 | 0x9148, 0xffff0001, 0xff000000, | ||
221 | 0x9148, 0xffff0001, 0xff000000, | ||
222 | 0x9190, 0x0fff0fff, 0x00090008, | ||
223 | 0x9190, 0x0fff0fff, 0x00090008, | ||
224 | 0x91ac, 0x0fff0fff, 0x00090008, | ||
225 | 0x91ac, 0x0fff0fff, 0x00090008, | ||
226 | 0x3f94, 0xffff0000, 0xff000000, | ||
227 | 0x3f94, 0xffff0000, 0xff000000, | ||
228 | 0x914c, 0xffff0000, 0xff000000, | ||
229 | 0x914c, 0xffff0000, 0xff000000, | ||
230 | 0x929c, 0x00000fff, 0x00000001, | ||
231 | 0x929c, 0x00000fff, 0x00000001, | ||
232 | 0x55e4, 0xff607fff, 0xfc000100, | ||
233 | 0x8a18, 0xff000fff, 0x00000100, | ||
234 | 0x8a18, 0xff000fff, 0x00000100, | ||
235 | 0x8b28, 0xff000fff, 0x00000100, | ||
236 | 0x8b28, 0xff000fff, 0x00000100, | ||
237 | 0x9144, 0xfffc0fff, 0x00000100, | ||
238 | 0x9144, 0xfffc0fff, 0x00000100, | ||
239 | 0x6ed8, 0x00010101, 0x00010000, | ||
240 | 0x9830, 0xffffffff, 0x00000000, | ||
241 | 0x9830, 0xffffffff, 0x00000000, | ||
242 | 0x9834, 0xf00fffff, 0x00000400, | ||
243 | 0x9834, 0xf00fffff, 0x00000400, | ||
244 | 0x9838, 0xfffffffe, 0x00000000, | ||
245 | 0x9838, 0xfffffffe, 0x00000000, | ||
246 | 0xd0c0, 0xff000fff, 0x00000100, | ||
247 | 0xd02c, 0xbfffff1f, 0x08421000, | ||
248 | 0xd02c, 0xbfffff1f, 0x08421000, | ||
249 | 0xd0b8, 0x73773777, 0x12010001, | ||
250 | 0xd0b8, 0x73773777, 0x12010001, | ||
251 | 0x5bb0, 0x000000f0, 0x00000070, | ||
252 | 0x98f8, 0x73773777, 0x12010001, | ||
253 | 0x98f8, 0x73773777, 0x12010001, | ||
254 | 0x98fc, 0xffffffff, 0x00000010, | ||
255 | 0x98fc, 0xffffffff, 0x00000010, | ||
256 | 0x9b7c, 0x00ff0000, 0x00fc0000, | ||
257 | 0x9b7c, 0x00ff0000, 0x00fc0000, | ||
258 | 0x8030, 0x00001f0f, 0x0000100a, | ||
259 | 0x8030, 0x00001f0f, 0x0000100a, | ||
260 | 0x2f48, 0x73773777, 0x12010001, | ||
261 | 0x2f48, 0x73773777, 0x12010001, | ||
262 | 0x2408, 0x00030000, 0x000c007f, | ||
263 | 0x8a14, 0xf000003f, 0x00000007, | ||
264 | 0x8a14, 0xf000003f, 0x00000007, | ||
265 | 0x8b24, 0x3fff3fff, 0x00ff0fff, | ||
266 | 0x8b24, 0x3fff3fff, 0x00ff0fff, | ||
267 | 0x8b10, 0x0000ff0f, 0x00000000, | ||
268 | 0x8b10, 0x0000ff0f, 0x00000000, | ||
269 | 0x28a4c, 0x07ffffff, 0x06000000, | ||
270 | 0x28a4c, 0x07ffffff, 0x06000000, | ||
271 | 0x4d8, 0x00000fff, 0x00000100, | ||
272 | 0x4d8, 0x00000fff, 0x00000100, | ||
273 | 0xa008, 0xffffffff, 0x00010000, | ||
274 | 0xa008, 0xffffffff, 0x00010000, | ||
275 | 0x913c, 0xffff03ff, 0x01000100, | ||
276 | 0x913c, 0xffff03ff, 0x01000100, | ||
277 | 0x90e8, 0x001fffff, 0x010400c0, | ||
278 | 0x8c00, 0x000000ff, 0x00000003, | ||
279 | 0x8c00, 0x000000ff, 0x00000003, | ||
280 | 0x8c04, 0xf8ff00ff, 0x40600060, | ||
281 | 0x8c04, 0xf8ff00ff, 0x40600060, | ||
282 | 0x8c30, 0x0000000f, 0x00040005, | ||
283 | 0x8cf0, 0x1fff1fff, 0x08e00410, | ||
284 | 0x8cf0, 0x1fff1fff, 0x08e00410, | ||
285 | 0x900c, 0x00ffffff, 0x0017071f, | ||
286 | 0x28350, 0x00000f01, 0x00000000, | ||
287 | 0x28350, 0x00000f01, 0x00000000, | ||
288 | 0x9508, 0xf700071f, 0x00000002, | ||
289 | 0x9508, 0xf700071f, 0x00000002, | ||
290 | 0x9688, 0x00300000, 0x0017000f, | ||
291 | 0x960c, 0xffffffff, 0x54763210, | ||
292 | 0x960c, 0xffffffff, 0x54763210, | ||
293 | 0x20ef8, 0x01ff01ff, 0x00000002, | ||
294 | 0x20e98, 0xfffffbff, 0x00200000, | ||
295 | 0x2015c, 0xffffffff, 0x00000f40, | ||
296 | 0x88c4, 0x001f3ae3, 0x00000082, | ||
297 | 0x88c4, 0x001f3ae3, 0x00000082, | ||
298 | 0x8978, 0x3fffffff, 0x04050140, | ||
299 | 0x8978, 0x3fffffff, 0x04050140, | ||
300 | 0x88d4, 0x0000001f, 0x00000010, | ||
301 | 0x88d4, 0x0000001f, 0x00000010, | ||
302 | 0x8974, 0xffffffff, 0x00000000, | ||
303 | 0x8974, 0xffffffff, 0x00000000 | ||
304 | }; | ||
305 | |||
306 | static void ni_init_golden_registers(struct radeon_device *rdev) | ||
307 | { | ||
308 | switch (rdev->family) { | ||
309 | case CHIP_CAYMAN: | ||
310 | radeon_program_register_sequence(rdev, | ||
311 | cayman_golden_registers, | ||
312 | (const u32)ARRAY_SIZE(cayman_golden_registers)); | ||
313 | radeon_program_register_sequence(rdev, | ||
314 | cayman_golden_registers2, | ||
315 | (const u32)ARRAY_SIZE(cayman_golden_registers2)); | ||
316 | break; | ||
317 | case CHIP_ARUBA: | ||
318 | if ((rdev->pdev->device == 0x9900) || | ||
319 | (rdev->pdev->device == 0x9901) || | ||
320 | (rdev->pdev->device == 0x9903) || | ||
321 | (rdev->pdev->device == 0x9904) || | ||
322 | (rdev->pdev->device == 0x9905) || | ||
323 | (rdev->pdev->device == 0x9906) || | ||
324 | (rdev->pdev->device == 0x9907) || | ||
325 | (rdev->pdev->device == 0x9908) || | ||
326 | (rdev->pdev->device == 0x9909) || | ||
327 | (rdev->pdev->device == 0x990A) || | ||
328 | (rdev->pdev->device == 0x990B) || | ||
329 | (rdev->pdev->device == 0x990C) || | ||
330 | (rdev->pdev->device == 0x990D) || | ||
331 | (rdev->pdev->device == 0x990E) || | ||
332 | (rdev->pdev->device == 0x990F) || | ||
333 | (rdev->pdev->device == 0x9910) || | ||
334 | (rdev->pdev->device == 0x9913) || | ||
335 | (rdev->pdev->device == 0x9917) || | ||
336 | (rdev->pdev->device == 0x9918)) { | ||
337 | radeon_program_register_sequence(rdev, | ||
338 | dvst_golden_registers, | ||
339 | (const u32)ARRAY_SIZE(dvst_golden_registers)); | ||
340 | radeon_program_register_sequence(rdev, | ||
341 | dvst_golden_registers2, | ||
342 | (const u32)ARRAY_SIZE(dvst_golden_registers2)); | ||
343 | } else { | ||
344 | radeon_program_register_sequence(rdev, | ||
345 | scrapper_golden_registers, | ||
346 | (const u32)ARRAY_SIZE(scrapper_golden_registers)); | ||
347 | radeon_program_register_sequence(rdev, | ||
348 | dvst_golden_registers2, | ||
349 | (const u32)ARRAY_SIZE(dvst_golden_registers2)); | ||
350 | } | ||
351 | break; | ||
352 | default: | ||
353 | break; | ||
354 | } | ||
355 | } | ||
356 | |||
81 | #define BTC_IO_MC_REGS_SIZE 29 | 357 | #define BTC_IO_MC_REGS_SIZE 29 |
82 | 358 | ||
83 | static const u32 barts_io_mc_regs[BTC_IO_MC_REGS_SIZE][2] = { | 359 | static const u32 barts_io_mc_regs[BTC_IO_MC_REGS_SIZE][2] = { |
@@ -1830,6 +2106,9 @@ int cayman_resume(struct radeon_device *rdev) | |||
1830 | /* post card */ | 2106 | /* post card */ |
1831 | atom_asic_init(rdev->mode_info.atom_context); | 2107 | atom_asic_init(rdev->mode_info.atom_context); |
1832 | 2108 | ||
2109 | /* init golden registers */ | ||
2110 | ni_init_golden_registers(rdev); | ||
2111 | |||
1833 | rdev->accel_working = true; | 2112 | rdev->accel_working = true; |
1834 | r = cayman_startup(rdev); | 2113 | r = cayman_startup(rdev); |
1835 | if (r) { | 2114 | if (r) { |
@@ -1888,6 +2167,8 @@ int cayman_init(struct radeon_device *rdev) | |||
1888 | DRM_INFO("GPU not posted. posting now...\n"); | 2167 | DRM_INFO("GPU not posted. posting now...\n"); |
1889 | atom_asic_init(rdev->mode_info.atom_context); | 2168 | atom_asic_init(rdev->mode_info.atom_context); |
1890 | } | 2169 | } |
2170 | /* init golden registers */ | ||
2171 | ni_init_golden_registers(rdev); | ||
1891 | /* Initialize scratch registers */ | 2172 | /* Initialize scratch registers */ |
1892 | r600_scratch_init(rdev); | 2173 | r600_scratch_init(rdev); |
1893 | /* Initialize surface registers */ | 2174 | /* Initialize surface registers */ |