diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-03-06 18:48:05 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-06-27 19:16:31 -0400 |
commit | 6d8cf0005db30655d54be65633885e7bef847d3c (patch) | |
tree | 537f1e5bb735a7b4d7f4b3cde8f89b3a8f98bcfb /drivers/gpu/drm/radeon/si.c | |
parent | 93656cdd3c82a0b9ee1f6755bfdecd30d2541870 (diff) |
drm/radeon: initialize save/restore buffer for pg on verde
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/si.c')
-rw-r--r-- | drivers/gpu/drm/radeon/si.c | 243 |
1 files changed, 241 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index 84ed3325a0d9..386bbdc65cfa 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
@@ -77,6 +77,228 @@ extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev); | |||
77 | extern void evergreen_print_gpu_status_regs(struct radeon_device *rdev); | 77 | extern void evergreen_print_gpu_status_regs(struct radeon_device *rdev); |
78 | extern bool evergreen_is_display_hung(struct radeon_device *rdev); | 78 | extern bool evergreen_is_display_hung(struct radeon_device *rdev); |
79 | 79 | ||
80 | static const u32 verde_rlc_save_restore_register_list[] = | ||
81 | { | ||
82 | (0x8000 << 16) | (0x98f4 >> 2), | ||
83 | 0x00000000, | ||
84 | (0x8040 << 16) | (0x98f4 >> 2), | ||
85 | 0x00000000, | ||
86 | (0x8000 << 16) | (0xe80 >> 2), | ||
87 | 0x00000000, | ||
88 | (0x8040 << 16) | (0xe80 >> 2), | ||
89 | 0x00000000, | ||
90 | (0x8000 << 16) | (0x89bc >> 2), | ||
91 | 0x00000000, | ||
92 | (0x8040 << 16) | (0x89bc >> 2), | ||
93 | 0x00000000, | ||
94 | (0x8000 << 16) | (0x8c1c >> 2), | ||
95 | 0x00000000, | ||
96 | (0x8040 << 16) | (0x8c1c >> 2), | ||
97 | 0x00000000, | ||
98 | (0x9c00 << 16) | (0x98f0 >> 2), | ||
99 | 0x00000000, | ||
100 | (0x9c00 << 16) | (0xe7c >> 2), | ||
101 | 0x00000000, | ||
102 | (0x8000 << 16) | (0x9148 >> 2), | ||
103 | 0x00000000, | ||
104 | (0x8040 << 16) | (0x9148 >> 2), | ||
105 | 0x00000000, | ||
106 | (0x9c00 << 16) | (0x9150 >> 2), | ||
107 | 0x00000000, | ||
108 | (0x9c00 << 16) | (0x897c >> 2), | ||
109 | 0x00000000, | ||
110 | (0x9c00 << 16) | (0x8d8c >> 2), | ||
111 | 0x00000000, | ||
112 | (0x9c00 << 16) | (0xac54 >> 2), | ||
113 | 0X00000000, | ||
114 | 0x3, | ||
115 | (0x9c00 << 16) | (0x98f8 >> 2), | ||
116 | 0x00000000, | ||
117 | (0x9c00 << 16) | (0x9910 >> 2), | ||
118 | 0x00000000, | ||
119 | (0x9c00 << 16) | (0x9914 >> 2), | ||
120 | 0x00000000, | ||
121 | (0x9c00 << 16) | (0x9918 >> 2), | ||
122 | 0x00000000, | ||
123 | (0x9c00 << 16) | (0x991c >> 2), | ||
124 | 0x00000000, | ||
125 | (0x9c00 << 16) | (0x9920 >> 2), | ||
126 | 0x00000000, | ||
127 | (0x9c00 << 16) | (0x9924 >> 2), | ||
128 | 0x00000000, | ||
129 | (0x9c00 << 16) | (0x9928 >> 2), | ||
130 | 0x00000000, | ||
131 | (0x9c00 << 16) | (0x992c >> 2), | ||
132 | 0x00000000, | ||
133 | (0x9c00 << 16) | (0x9930 >> 2), | ||
134 | 0x00000000, | ||
135 | (0x9c00 << 16) | (0x9934 >> 2), | ||
136 | 0x00000000, | ||
137 | (0x9c00 << 16) | (0x9938 >> 2), | ||
138 | 0x00000000, | ||
139 | (0x9c00 << 16) | (0x993c >> 2), | ||
140 | 0x00000000, | ||
141 | (0x9c00 << 16) | (0x9940 >> 2), | ||
142 | 0x00000000, | ||
143 | (0x9c00 << 16) | (0x9944 >> 2), | ||
144 | 0x00000000, | ||
145 | (0x9c00 << 16) | (0x9948 >> 2), | ||
146 | 0x00000000, | ||
147 | (0x9c00 << 16) | (0x994c >> 2), | ||
148 | 0x00000000, | ||
149 | (0x9c00 << 16) | (0x9950 >> 2), | ||
150 | 0x00000000, | ||
151 | (0x9c00 << 16) | (0x9954 >> 2), | ||
152 | 0x00000000, | ||
153 | (0x9c00 << 16) | (0x9958 >> 2), | ||
154 | 0x00000000, | ||
155 | (0x9c00 << 16) | (0x995c >> 2), | ||
156 | 0x00000000, | ||
157 | (0x9c00 << 16) | (0x9960 >> 2), | ||
158 | 0x00000000, | ||
159 | (0x9c00 << 16) | (0x9964 >> 2), | ||
160 | 0x00000000, | ||
161 | (0x9c00 << 16) | (0x9968 >> 2), | ||
162 | 0x00000000, | ||
163 | (0x9c00 << 16) | (0x996c >> 2), | ||
164 | 0x00000000, | ||
165 | (0x9c00 << 16) | (0x9970 >> 2), | ||
166 | 0x00000000, | ||
167 | (0x9c00 << 16) | (0x9974 >> 2), | ||
168 | 0x00000000, | ||
169 | (0x9c00 << 16) | (0x9978 >> 2), | ||
170 | 0x00000000, | ||
171 | (0x9c00 << 16) | (0x997c >> 2), | ||
172 | 0x00000000, | ||
173 | (0x9c00 << 16) | (0x9980 >> 2), | ||
174 | 0x00000000, | ||
175 | (0x9c00 << 16) | (0x9984 >> 2), | ||
176 | 0x00000000, | ||
177 | (0x9c00 << 16) | (0x9988 >> 2), | ||
178 | 0x00000000, | ||
179 | (0x9c00 << 16) | (0x998c >> 2), | ||
180 | 0x00000000, | ||
181 | (0x9c00 << 16) | (0x8c00 >> 2), | ||
182 | 0x00000000, | ||
183 | (0x9c00 << 16) | (0x8c14 >> 2), | ||
184 | 0x00000000, | ||
185 | (0x9c00 << 16) | (0x8c04 >> 2), | ||
186 | 0x00000000, | ||
187 | (0x9c00 << 16) | (0x8c08 >> 2), | ||
188 | 0x00000000, | ||
189 | (0x8000 << 16) | (0x9b7c >> 2), | ||
190 | 0x00000000, | ||
191 | (0x8040 << 16) | (0x9b7c >> 2), | ||
192 | 0x00000000, | ||
193 | (0x8000 << 16) | (0xe84 >> 2), | ||
194 | 0x00000000, | ||
195 | (0x8040 << 16) | (0xe84 >> 2), | ||
196 | 0x00000000, | ||
197 | (0x8000 << 16) | (0x89c0 >> 2), | ||
198 | 0x00000000, | ||
199 | (0x8040 << 16) | (0x89c0 >> 2), | ||
200 | 0x00000000, | ||
201 | (0x8000 << 16) | (0x914c >> 2), | ||
202 | 0x00000000, | ||
203 | (0x8040 << 16) | (0x914c >> 2), | ||
204 | 0x00000000, | ||
205 | (0x8000 << 16) | (0x8c20 >> 2), | ||
206 | 0x00000000, | ||
207 | (0x8040 << 16) | (0x8c20 >> 2), | ||
208 | 0x00000000, | ||
209 | (0x8000 << 16) | (0x9354 >> 2), | ||
210 | 0x00000000, | ||
211 | (0x8040 << 16) | (0x9354 >> 2), | ||
212 | 0x00000000, | ||
213 | (0x9c00 << 16) | (0x9060 >> 2), | ||
214 | 0x00000000, | ||
215 | (0x9c00 << 16) | (0x9364 >> 2), | ||
216 | 0x00000000, | ||
217 | (0x9c00 << 16) | (0x9100 >> 2), | ||
218 | 0x00000000, | ||
219 | (0x9c00 << 16) | (0x913c >> 2), | ||
220 | 0x00000000, | ||
221 | (0x8000 << 16) | (0x90e0 >> 2), | ||
222 | 0x00000000, | ||
223 | (0x8000 << 16) | (0x90e4 >> 2), | ||
224 | 0x00000000, | ||
225 | (0x8000 << 16) | (0x90e8 >> 2), | ||
226 | 0x00000000, | ||
227 | (0x8040 << 16) | (0x90e0 >> 2), | ||
228 | 0x00000000, | ||
229 | (0x8040 << 16) | (0x90e4 >> 2), | ||
230 | 0x00000000, | ||
231 | (0x8040 << 16) | (0x90e8 >> 2), | ||
232 | 0x00000000, | ||
233 | (0x9c00 << 16) | (0x8bcc >> 2), | ||
234 | 0x00000000, | ||
235 | (0x9c00 << 16) | (0x8b24 >> 2), | ||
236 | 0x00000000, | ||
237 | (0x9c00 << 16) | (0x88c4 >> 2), | ||
238 | 0x00000000, | ||
239 | (0x9c00 << 16) | (0x8e50 >> 2), | ||
240 | 0x00000000, | ||
241 | (0x9c00 << 16) | (0x8c0c >> 2), | ||
242 | 0x00000000, | ||
243 | (0x9c00 << 16) | (0x8e58 >> 2), | ||
244 | 0x00000000, | ||
245 | (0x9c00 << 16) | (0x8e5c >> 2), | ||
246 | 0x00000000, | ||
247 | (0x9c00 << 16) | (0x9508 >> 2), | ||
248 | 0x00000000, | ||
249 | (0x9c00 << 16) | (0x950c >> 2), | ||
250 | 0x00000000, | ||
251 | (0x9c00 << 16) | (0x9494 >> 2), | ||
252 | 0x00000000, | ||
253 | (0x9c00 << 16) | (0xac0c >> 2), | ||
254 | 0x00000000, | ||
255 | (0x9c00 << 16) | (0xac10 >> 2), | ||
256 | 0x00000000, | ||
257 | (0x9c00 << 16) | (0xac14 >> 2), | ||
258 | 0x00000000, | ||
259 | (0x9c00 << 16) | (0xae00 >> 2), | ||
260 | 0x00000000, | ||
261 | (0x9c00 << 16) | (0xac08 >> 2), | ||
262 | 0x00000000, | ||
263 | (0x9c00 << 16) | (0x88d4 >> 2), | ||
264 | 0x00000000, | ||
265 | (0x9c00 << 16) | (0x88c8 >> 2), | ||
266 | 0x00000000, | ||
267 | (0x9c00 << 16) | (0x88cc >> 2), | ||
268 | 0x00000000, | ||
269 | (0x9c00 << 16) | (0x89b0 >> 2), | ||
270 | 0x00000000, | ||
271 | (0x9c00 << 16) | (0x8b10 >> 2), | ||
272 | 0x00000000, | ||
273 | (0x9c00 << 16) | (0x8a14 >> 2), | ||
274 | 0x00000000, | ||
275 | (0x9c00 << 16) | (0x9830 >> 2), | ||
276 | 0x00000000, | ||
277 | (0x9c00 << 16) | (0x9834 >> 2), | ||
278 | 0x00000000, | ||
279 | (0x9c00 << 16) | (0x9838 >> 2), | ||
280 | 0x00000000, | ||
281 | (0x9c00 << 16) | (0x9a10 >> 2), | ||
282 | 0x00000000, | ||
283 | (0x8000 << 16) | (0x9870 >> 2), | ||
284 | 0x00000000, | ||
285 | (0x8000 << 16) | (0x9874 >> 2), | ||
286 | 0x00000000, | ||
287 | (0x8001 << 16) | (0x9870 >> 2), | ||
288 | 0x00000000, | ||
289 | (0x8001 << 16) | (0x9874 >> 2), | ||
290 | 0x00000000, | ||
291 | (0x8040 << 16) | (0x9870 >> 2), | ||
292 | 0x00000000, | ||
293 | (0x8040 << 16) | (0x9874 >> 2), | ||
294 | 0x00000000, | ||
295 | (0x8041 << 16) | (0x9870 >> 2), | ||
296 | 0x00000000, | ||
297 | (0x8041 << 16) | (0x9874 >> 2), | ||
298 | 0x00000000, | ||
299 | 0x00000000 | ||
300 | }; | ||
301 | |||
80 | static const u32 tahiti_golden_rlc_registers[] = | 302 | static const u32 tahiti_golden_rlc_registers[] = |
81 | { | 303 | { |
82 | 0xc424, 0xffffffff, 0x00601005, | 304 | 0xc424, 0xffffffff, 0x00601005, |
@@ -4363,7 +4585,8 @@ void si_rlc_fini(struct radeon_device *rdev) | |||
4363 | 4585 | ||
4364 | int si_rlc_init(struct radeon_device *rdev) | 4586 | int si_rlc_init(struct radeon_device *rdev) |
4365 | { | 4587 | { |
4366 | int r; | 4588 | int r, i; |
4589 | volatile u32 *dst_ptr; | ||
4367 | 4590 | ||
4368 | /* save restore block */ | 4591 | /* save restore block */ |
4369 | if (rdev->rlc.save_restore_obj == NULL) { | 4592 | if (rdev->rlc.save_restore_obj == NULL) { |
@@ -4383,13 +4606,29 @@ int si_rlc_init(struct radeon_device *rdev) | |||
4383 | } | 4606 | } |
4384 | r = radeon_bo_pin(rdev->rlc.save_restore_obj, RADEON_GEM_DOMAIN_VRAM, | 4607 | r = radeon_bo_pin(rdev->rlc.save_restore_obj, RADEON_GEM_DOMAIN_VRAM, |
4385 | &rdev->rlc.save_restore_gpu_addr); | 4608 | &rdev->rlc.save_restore_gpu_addr); |
4386 | radeon_bo_unreserve(rdev->rlc.save_restore_obj); | ||
4387 | if (r) { | 4609 | if (r) { |
4610 | radeon_bo_unreserve(rdev->rlc.save_restore_obj); | ||
4388 | dev_warn(rdev->dev, "(%d) pin RLC sr bo failed\n", r); | 4611 | dev_warn(rdev->dev, "(%d) pin RLC sr bo failed\n", r); |
4389 | si_rlc_fini(rdev); | 4612 | si_rlc_fini(rdev); |
4390 | return r; | 4613 | return r; |
4391 | } | 4614 | } |
4392 | 4615 | ||
4616 | if (rdev->family == CHIP_VERDE) { | ||
4617 | r = radeon_bo_kmap(rdev->rlc.save_restore_obj, (void **)&rdev->rlc.sr_ptr); | ||
4618 | if (r) { | ||
4619 | dev_warn(rdev->dev, "(%d) map RLC sr bo failed\n", r); | ||
4620 | si_rlc_fini(rdev); | ||
4621 | return r; | ||
4622 | } | ||
4623 | /* write the sr buffer */ | ||
4624 | dst_ptr = rdev->rlc.sr_ptr; | ||
4625 | for (i = 0; i < ARRAY_SIZE(verde_rlc_save_restore_register_list); i++) { | ||
4626 | dst_ptr[i] = verde_rlc_save_restore_register_list[i]; | ||
4627 | } | ||
4628 | radeon_bo_kunmap(rdev->rlc.save_restore_obj); | ||
4629 | } | ||
4630 | radeon_bo_unreserve(rdev->rlc.save_restore_obj); | ||
4631 | |||
4393 | /* clear state block */ | 4632 | /* clear state block */ |
4394 | if (rdev->rlc.clear_state_obj == NULL) { | 4633 | if (rdev->rlc.clear_state_obj == NULL) { |
4395 | r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, PAGE_SIZE, true, | 4634 | r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, PAGE_SIZE, true, |