2 * Copyright 2008 Advanced Micro Devices, Inc.
3 * Copyright 2008 Red Hat Inc.
4 * Copyright 2009 Jerome Glisse.
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 * OTHER DEALINGS IN THE SOFTWARE.
24 * Authors: Dave Airlie
28 * $FreeBSD: head/sys/dev/drm2/radeon/radeon_asic.c 254885 2013-08-25 19:37:15Z dumbbell $
32 #include <drm/drm_crtc_helper.h>
33 #include <uapi_drm/radeon_drm.h>
34 #include "radeon_reg.h"
36 #include "radeon_asic.h"
40 * Registers accessors functions.
43 * radeon_invalid_rreg - dummy reg read function
45 * @rdev: radeon device pointer
46 * @reg: offset of register
48 * Dummy register read function. Used for register blocks
49 * that certain asics don't have (all asics).
50 * Returns the value in the register.
52 static uint32_t radeon_invalid_rreg(struct radeon_device *rdev, uint32_t reg)
54 panic("Invalid callback to read register 0x%04X\n", reg);
59 * radeon_invalid_wreg - dummy reg write function
61 * @rdev: radeon device pointer
62 * @reg: offset of register
63 * @v: value to write to the register
65 * Dummy register read function. Used for register blocks
66 * that certain asics don't have (all asics).
68 static void radeon_invalid_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
70 panic("Invalid callback to write register 0x%04X with 0x%08X\n",
75 * radeon_register_accessor_init - sets up the register accessor callbacks
77 * @rdev: radeon device pointer
79 * Sets up the register accessor callbacks for various register
80 * apertures. Not all asics have all apertures (all asics).
82 static void radeon_register_accessor_init(struct radeon_device *rdev)
84 rdev->mc_rreg = &radeon_invalid_rreg;
85 rdev->mc_wreg = &radeon_invalid_wreg;
86 rdev->pll_rreg = &radeon_invalid_rreg;
87 rdev->pll_wreg = &radeon_invalid_wreg;
88 rdev->pciep_rreg = &radeon_invalid_rreg;
89 rdev->pciep_wreg = &radeon_invalid_wreg;
91 /* Don't change order as we are overridding accessor. */
92 if (rdev->family < CHIP_RV515) {
93 rdev->pcie_reg_mask = 0xff;
95 rdev->pcie_reg_mask = 0x7ff;
97 /* FIXME: not sure here */
98 if (rdev->family <= CHIP_R580) {
99 rdev->pll_rreg = &r100_pll_rreg;
100 rdev->pll_wreg = &r100_pll_wreg;
102 if (rdev->family >= CHIP_R420) {
103 rdev->mc_rreg = &r420_mc_rreg;
104 rdev->mc_wreg = &r420_mc_wreg;
106 if (rdev->family >= CHIP_RV515) {
107 rdev->mc_rreg = &rv515_mc_rreg;
108 rdev->mc_wreg = &rv515_mc_wreg;
110 if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) {
111 rdev->mc_rreg = &rs400_mc_rreg;
112 rdev->mc_wreg = &rs400_mc_wreg;
114 if (rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) {
115 rdev->mc_rreg = &rs690_mc_rreg;
116 rdev->mc_wreg = &rs690_mc_wreg;
118 if (rdev->family == CHIP_RS600) {
119 rdev->mc_rreg = &rs600_mc_rreg;
120 rdev->mc_wreg = &rs600_mc_wreg;
122 if (rdev->family == CHIP_RS780 || rdev->family == CHIP_RS880) {
123 rdev->mc_rreg = &rs780_mc_rreg;
124 rdev->mc_wreg = &rs780_mc_wreg;
126 if (rdev->family >= CHIP_R600) {
127 rdev->pciep_rreg = &r600_pciep_rreg;
128 rdev->pciep_wreg = &r600_pciep_wreg;
133 /* helper to disable agp */
135 * radeon_agp_disable - AGP disable helper function
137 * @rdev: radeon device pointer
139 * Removes AGP flags and changes the gart callbacks on AGP
140 * cards when using the internal gart rather than AGP (all asics).
142 void radeon_agp_disable(struct radeon_device *rdev)
144 rdev->flags &= ~RADEON_IS_AGP;
145 if (rdev->family >= CHIP_R600) {
146 DRM_INFO("Forcing AGP to PCIE mode\n");
147 rdev->flags |= RADEON_IS_PCIE;
148 } else if (rdev->family >= CHIP_RV515 ||
149 rdev->family == CHIP_RV380 ||
150 rdev->family == CHIP_RV410 ||
151 rdev->family == CHIP_R423) {
152 DRM_INFO("Forcing AGP to PCIE mode\n");
153 rdev->flags |= RADEON_IS_PCIE;
154 rdev->asic->gart.tlb_flush = &rv370_pcie_gart_tlb_flush;
155 rdev->asic->gart.set_page = &rv370_pcie_gart_set_page;
157 DRM_INFO("Forcing AGP to PCI mode\n");
158 rdev->flags |= RADEON_IS_PCI;
159 rdev->asic->gart.tlb_flush = &r100_pci_gart_tlb_flush;
160 rdev->asic->gart.set_page = &r100_pci_gart_set_page;
162 rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
168 static struct radeon_asic r100_asic = {
171 .suspend = &r100_suspend,
172 .resume = &r100_resume,
173 .vga_set_state = &r100_vga_set_state,
174 .asic_reset = &r100_asic_reset,
175 .ioctl_wait_idle = NULL,
176 .gui_idle = &r100_gui_idle,
177 .mc_wait_for_idle = &r100_mc_wait_for_idle,
179 .tlb_flush = &r100_pci_gart_tlb_flush,
180 .set_page = &r100_pci_gart_set_page,
183 [RADEON_RING_TYPE_GFX_INDEX] = {
184 .ib_execute = &r100_ring_ib_execute,
185 .emit_fence = &r100_fence_ring_emit,
186 .emit_semaphore = &r100_semaphore_ring_emit,
187 .cs_parse = &r100_cs_parse,
188 .ring_start = &r100_ring_start,
189 .ring_test = &r100_ring_test,
190 .ib_test = &r100_ib_test,
191 .is_lockup = &r100_gpu_is_lockup,
195 .set = &r100_irq_set,
196 .process = &r100_irq_process,
199 .bandwidth_update = &r100_bandwidth_update,
200 .get_vblank_counter = &r100_get_vblank_counter,
201 .wait_for_vblank = &r100_wait_for_vblank,
202 .set_backlight_level = &radeon_legacy_set_backlight_level,
203 .get_backlight_level = &radeon_legacy_get_backlight_level,
206 .blit = &r100_copy_blit,
207 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
209 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
210 .copy = &r100_copy_blit,
211 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
214 .set_reg = r100_set_surface_reg,
215 .clear_reg = r100_clear_surface_reg,
218 .init = &r100_hpd_init,
219 .fini = &r100_hpd_fini,
220 .sense = &r100_hpd_sense,
221 .set_polarity = &r100_hpd_set_polarity,
224 .misc = &r100_pm_misc,
225 .prepare = &r100_pm_prepare,
226 .finish = &r100_pm_finish,
227 .init_profile = &r100_pm_init_profile,
228 .get_dynpm_state = &r100_pm_get_dynpm_state,
229 .get_engine_clock = &radeon_legacy_get_engine_clock,
230 .set_engine_clock = &radeon_legacy_set_engine_clock,
231 .get_memory_clock = &radeon_legacy_get_memory_clock,
232 .set_memory_clock = NULL,
233 .get_pcie_lanes = NULL,
234 .set_pcie_lanes = NULL,
235 .set_clock_gating = &radeon_legacy_set_clock_gating,
238 .pre_page_flip = &r100_pre_page_flip,
239 .page_flip = &r100_page_flip,
240 .post_page_flip = &r100_post_page_flip,
244 static struct radeon_asic r200_asic = {
247 .suspend = &r100_suspend,
248 .resume = &r100_resume,
249 .vga_set_state = &r100_vga_set_state,
250 .asic_reset = &r100_asic_reset,
251 .ioctl_wait_idle = NULL,
252 .gui_idle = &r100_gui_idle,
253 .mc_wait_for_idle = &r100_mc_wait_for_idle,
255 .tlb_flush = &r100_pci_gart_tlb_flush,
256 .set_page = &r100_pci_gart_set_page,
259 [RADEON_RING_TYPE_GFX_INDEX] = {
260 .ib_execute = &r100_ring_ib_execute,
261 .emit_fence = &r100_fence_ring_emit,
262 .emit_semaphore = &r100_semaphore_ring_emit,
263 .cs_parse = &r100_cs_parse,
264 .ring_start = &r100_ring_start,
265 .ring_test = &r100_ring_test,
266 .ib_test = &r100_ib_test,
267 .is_lockup = &r100_gpu_is_lockup,
271 .set = &r100_irq_set,
272 .process = &r100_irq_process,
275 .bandwidth_update = &r100_bandwidth_update,
276 .get_vblank_counter = &r100_get_vblank_counter,
277 .wait_for_vblank = &r100_wait_for_vblank,
278 .set_backlight_level = &radeon_legacy_set_backlight_level,
279 .get_backlight_level = &radeon_legacy_get_backlight_level,
282 .blit = &r100_copy_blit,
283 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
284 .dma = &r200_copy_dma,
285 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
286 .copy = &r100_copy_blit,
287 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
290 .set_reg = r100_set_surface_reg,
291 .clear_reg = r100_clear_surface_reg,
294 .init = &r100_hpd_init,
295 .fini = &r100_hpd_fini,
296 .sense = &r100_hpd_sense,
297 .set_polarity = &r100_hpd_set_polarity,
300 .misc = &r100_pm_misc,
301 .prepare = &r100_pm_prepare,
302 .finish = &r100_pm_finish,
303 .init_profile = &r100_pm_init_profile,
304 .get_dynpm_state = &r100_pm_get_dynpm_state,
305 .get_engine_clock = &radeon_legacy_get_engine_clock,
306 .set_engine_clock = &radeon_legacy_set_engine_clock,
307 .get_memory_clock = &radeon_legacy_get_memory_clock,
308 .set_memory_clock = NULL,
309 .get_pcie_lanes = NULL,
310 .set_pcie_lanes = NULL,
311 .set_clock_gating = &radeon_legacy_set_clock_gating,
314 .pre_page_flip = &r100_pre_page_flip,
315 .page_flip = &r100_page_flip,
316 .post_page_flip = &r100_post_page_flip,
320 static struct radeon_asic r300_asic = {
323 .suspend = &r300_suspend,
324 .resume = &r300_resume,
325 .vga_set_state = &r100_vga_set_state,
326 .asic_reset = &r300_asic_reset,
327 .ioctl_wait_idle = NULL,
328 .gui_idle = &r100_gui_idle,
329 .mc_wait_for_idle = &r300_mc_wait_for_idle,
331 .tlb_flush = &r100_pci_gart_tlb_flush,
332 .set_page = &r100_pci_gart_set_page,
335 [RADEON_RING_TYPE_GFX_INDEX] = {
336 .ib_execute = &r100_ring_ib_execute,
337 .emit_fence = &r300_fence_ring_emit,
338 .emit_semaphore = &r100_semaphore_ring_emit,
339 .cs_parse = &r300_cs_parse,
340 .ring_start = &r300_ring_start,
341 .ring_test = &r100_ring_test,
342 .ib_test = &r100_ib_test,
343 .is_lockup = &r100_gpu_is_lockup,
347 .set = &r100_irq_set,
348 .process = &r100_irq_process,
351 .bandwidth_update = &r100_bandwidth_update,
352 .get_vblank_counter = &r100_get_vblank_counter,
353 .wait_for_vblank = &r100_wait_for_vblank,
354 .set_backlight_level = &radeon_legacy_set_backlight_level,
355 .get_backlight_level = &radeon_legacy_get_backlight_level,
358 .blit = &r100_copy_blit,
359 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
360 .dma = &r200_copy_dma,
361 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
362 .copy = &r100_copy_blit,
363 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
366 .set_reg = r100_set_surface_reg,
367 .clear_reg = r100_clear_surface_reg,
370 .init = &r100_hpd_init,
371 .fini = &r100_hpd_fini,
372 .sense = &r100_hpd_sense,
373 .set_polarity = &r100_hpd_set_polarity,
376 .misc = &r100_pm_misc,
377 .prepare = &r100_pm_prepare,
378 .finish = &r100_pm_finish,
379 .init_profile = &r100_pm_init_profile,
380 .get_dynpm_state = &r100_pm_get_dynpm_state,
381 .get_engine_clock = &radeon_legacy_get_engine_clock,
382 .set_engine_clock = &radeon_legacy_set_engine_clock,
383 .get_memory_clock = &radeon_legacy_get_memory_clock,
384 .set_memory_clock = NULL,
385 .get_pcie_lanes = &rv370_get_pcie_lanes,
386 .set_pcie_lanes = &rv370_set_pcie_lanes,
387 .set_clock_gating = &radeon_legacy_set_clock_gating,
390 .pre_page_flip = &r100_pre_page_flip,
391 .page_flip = &r100_page_flip,
392 .post_page_flip = &r100_post_page_flip,
396 static struct radeon_asic r300_asic_pcie = {
399 .suspend = &r300_suspend,
400 .resume = &r300_resume,
401 .vga_set_state = &r100_vga_set_state,
402 .asic_reset = &r300_asic_reset,
403 .ioctl_wait_idle = NULL,
404 .gui_idle = &r100_gui_idle,
405 .mc_wait_for_idle = &r300_mc_wait_for_idle,
407 .tlb_flush = &rv370_pcie_gart_tlb_flush,
408 .set_page = &rv370_pcie_gart_set_page,
411 [RADEON_RING_TYPE_GFX_INDEX] = {
412 .ib_execute = &r100_ring_ib_execute,
413 .emit_fence = &r300_fence_ring_emit,
414 .emit_semaphore = &r100_semaphore_ring_emit,
415 .cs_parse = &r300_cs_parse,
416 .ring_start = &r300_ring_start,
417 .ring_test = &r100_ring_test,
418 .ib_test = &r100_ib_test,
419 .is_lockup = &r100_gpu_is_lockup,
423 .set = &r100_irq_set,
424 .process = &r100_irq_process,
427 .bandwidth_update = &r100_bandwidth_update,
428 .get_vblank_counter = &r100_get_vblank_counter,
429 .wait_for_vblank = &r100_wait_for_vblank,
430 .set_backlight_level = &radeon_legacy_set_backlight_level,
431 .get_backlight_level = &radeon_legacy_get_backlight_level,
434 .blit = &r100_copy_blit,
435 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
436 .dma = &r200_copy_dma,
437 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
438 .copy = &r100_copy_blit,
439 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
442 .set_reg = r100_set_surface_reg,
443 .clear_reg = r100_clear_surface_reg,
446 .init = &r100_hpd_init,
447 .fini = &r100_hpd_fini,
448 .sense = &r100_hpd_sense,
449 .set_polarity = &r100_hpd_set_polarity,
452 .misc = &r100_pm_misc,
453 .prepare = &r100_pm_prepare,
454 .finish = &r100_pm_finish,
455 .init_profile = &r100_pm_init_profile,
456 .get_dynpm_state = &r100_pm_get_dynpm_state,
457 .get_engine_clock = &radeon_legacy_get_engine_clock,
458 .set_engine_clock = &radeon_legacy_set_engine_clock,
459 .get_memory_clock = &radeon_legacy_get_memory_clock,
460 .set_memory_clock = NULL,
461 .get_pcie_lanes = &rv370_get_pcie_lanes,
462 .set_pcie_lanes = &rv370_set_pcie_lanes,
463 .set_clock_gating = &radeon_legacy_set_clock_gating,
466 .pre_page_flip = &r100_pre_page_flip,
467 .page_flip = &r100_page_flip,
468 .post_page_flip = &r100_post_page_flip,
472 static struct radeon_asic r420_asic = {
475 .suspend = &r420_suspend,
476 .resume = &r420_resume,
477 .vga_set_state = &r100_vga_set_state,
478 .asic_reset = &r300_asic_reset,
479 .ioctl_wait_idle = NULL,
480 .gui_idle = &r100_gui_idle,
481 .mc_wait_for_idle = &r300_mc_wait_for_idle,
483 .tlb_flush = &rv370_pcie_gart_tlb_flush,
484 .set_page = &rv370_pcie_gart_set_page,
487 [RADEON_RING_TYPE_GFX_INDEX] = {
488 .ib_execute = &r100_ring_ib_execute,
489 .emit_fence = &r300_fence_ring_emit,
490 .emit_semaphore = &r100_semaphore_ring_emit,
491 .cs_parse = &r300_cs_parse,
492 .ring_start = &r300_ring_start,
493 .ring_test = &r100_ring_test,
494 .ib_test = &r100_ib_test,
495 .is_lockup = &r100_gpu_is_lockup,
499 .set = &r100_irq_set,
500 .process = &r100_irq_process,
503 .bandwidth_update = &r100_bandwidth_update,
504 .get_vblank_counter = &r100_get_vblank_counter,
505 .wait_for_vblank = &r100_wait_for_vblank,
506 .set_backlight_level = &atombios_set_backlight_level,
507 .get_backlight_level = &atombios_get_backlight_level,
510 .blit = &r100_copy_blit,
511 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
512 .dma = &r200_copy_dma,
513 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
514 .copy = &r100_copy_blit,
515 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
518 .set_reg = r100_set_surface_reg,
519 .clear_reg = r100_clear_surface_reg,
522 .init = &r100_hpd_init,
523 .fini = &r100_hpd_fini,
524 .sense = &r100_hpd_sense,
525 .set_polarity = &r100_hpd_set_polarity,
528 .misc = &r100_pm_misc,
529 .prepare = &r100_pm_prepare,
530 .finish = &r100_pm_finish,
531 .init_profile = &r420_pm_init_profile,
532 .get_dynpm_state = &r100_pm_get_dynpm_state,
533 .get_engine_clock = &radeon_atom_get_engine_clock,
534 .set_engine_clock = &radeon_atom_set_engine_clock,
535 .get_memory_clock = &radeon_atom_get_memory_clock,
536 .set_memory_clock = &radeon_atom_set_memory_clock,
537 .get_pcie_lanes = &rv370_get_pcie_lanes,
538 .set_pcie_lanes = &rv370_set_pcie_lanes,
539 .set_clock_gating = &radeon_atom_set_clock_gating,
542 .pre_page_flip = &r100_pre_page_flip,
543 .page_flip = &r100_page_flip,
544 .post_page_flip = &r100_post_page_flip,
548 static struct radeon_asic rs400_asic = {
551 .suspend = &rs400_suspend,
552 .resume = &rs400_resume,
553 .vga_set_state = &r100_vga_set_state,
554 .asic_reset = &r300_asic_reset,
555 .ioctl_wait_idle = NULL,
556 .gui_idle = &r100_gui_idle,
557 .mc_wait_for_idle = &rs400_mc_wait_for_idle,
559 .tlb_flush = &rs400_gart_tlb_flush,
560 .set_page = &rs400_gart_set_page,
563 [RADEON_RING_TYPE_GFX_INDEX] = {
564 .ib_execute = &r100_ring_ib_execute,
565 .emit_fence = &r300_fence_ring_emit,
566 .emit_semaphore = &r100_semaphore_ring_emit,
567 .cs_parse = &r300_cs_parse,
568 .ring_start = &r300_ring_start,
569 .ring_test = &r100_ring_test,
570 .ib_test = &r100_ib_test,
571 .is_lockup = &r100_gpu_is_lockup,
575 .set = &r100_irq_set,
576 .process = &r100_irq_process,
579 .bandwidth_update = &r100_bandwidth_update,
580 .get_vblank_counter = &r100_get_vblank_counter,
581 .wait_for_vblank = &r100_wait_for_vblank,
582 .set_backlight_level = &radeon_legacy_set_backlight_level,
583 .get_backlight_level = &radeon_legacy_get_backlight_level,
586 .blit = &r100_copy_blit,
587 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
588 .dma = &r200_copy_dma,
589 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
590 .copy = &r100_copy_blit,
591 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
594 .set_reg = r100_set_surface_reg,
595 .clear_reg = r100_clear_surface_reg,
598 .init = &r100_hpd_init,
599 .fini = &r100_hpd_fini,
600 .sense = &r100_hpd_sense,
601 .set_polarity = &r100_hpd_set_polarity,
604 .misc = &r100_pm_misc,
605 .prepare = &r100_pm_prepare,
606 .finish = &r100_pm_finish,
607 .init_profile = &r100_pm_init_profile,
608 .get_dynpm_state = &r100_pm_get_dynpm_state,
609 .get_engine_clock = &radeon_legacy_get_engine_clock,
610 .set_engine_clock = &radeon_legacy_set_engine_clock,
611 .get_memory_clock = &radeon_legacy_get_memory_clock,
612 .set_memory_clock = NULL,
613 .get_pcie_lanes = NULL,
614 .set_pcie_lanes = NULL,
615 .set_clock_gating = &radeon_legacy_set_clock_gating,
618 .pre_page_flip = &r100_pre_page_flip,
619 .page_flip = &r100_page_flip,
620 .post_page_flip = &r100_post_page_flip,
624 static struct radeon_asic rs600_asic = {
627 .suspend = &rs600_suspend,
628 .resume = &rs600_resume,
629 .vga_set_state = &r100_vga_set_state,
630 .asic_reset = &rs600_asic_reset,
631 .ioctl_wait_idle = NULL,
632 .gui_idle = &r100_gui_idle,
633 .mc_wait_for_idle = &rs600_mc_wait_for_idle,
635 .tlb_flush = &rs600_gart_tlb_flush,
636 .set_page = &rs600_gart_set_page,
639 [RADEON_RING_TYPE_GFX_INDEX] = {
640 .ib_execute = &r100_ring_ib_execute,
641 .emit_fence = &r300_fence_ring_emit,
642 .emit_semaphore = &r100_semaphore_ring_emit,
643 .cs_parse = &r300_cs_parse,
644 .ring_start = &r300_ring_start,
645 .ring_test = &r100_ring_test,
646 .ib_test = &r100_ib_test,
647 .is_lockup = &r100_gpu_is_lockup,
651 .set = &rs600_irq_set,
652 .process = &rs600_irq_process,
655 .bandwidth_update = &rs600_bandwidth_update,
656 .get_vblank_counter = &rs600_get_vblank_counter,
657 .wait_for_vblank = &avivo_wait_for_vblank,
658 .set_backlight_level = &atombios_set_backlight_level,
659 .get_backlight_level = &atombios_get_backlight_level,
660 .hdmi_enable = &r600_hdmi_enable,
661 .hdmi_setmode = &r600_hdmi_setmode,
664 .blit = &r100_copy_blit,
665 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
666 .dma = &r200_copy_dma,
667 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
668 .copy = &r100_copy_blit,
669 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
672 .set_reg = r100_set_surface_reg,
673 .clear_reg = r100_clear_surface_reg,
676 .init = &rs600_hpd_init,
677 .fini = &rs600_hpd_fini,
678 .sense = &rs600_hpd_sense,
679 .set_polarity = &rs600_hpd_set_polarity,
682 .misc = &rs600_pm_misc,
683 .prepare = &rs600_pm_prepare,
684 .finish = &rs600_pm_finish,
685 .init_profile = &r420_pm_init_profile,
686 .get_dynpm_state = &r100_pm_get_dynpm_state,
687 .get_engine_clock = &radeon_atom_get_engine_clock,
688 .set_engine_clock = &radeon_atom_set_engine_clock,
689 .get_memory_clock = &radeon_atom_get_memory_clock,
690 .set_memory_clock = &radeon_atom_set_memory_clock,
691 .get_pcie_lanes = NULL,
692 .set_pcie_lanes = NULL,
693 .set_clock_gating = &radeon_atom_set_clock_gating,
696 .pre_page_flip = &rs600_pre_page_flip,
697 .page_flip = &rs600_page_flip,
698 .post_page_flip = &rs600_post_page_flip,
702 static struct radeon_asic rs690_asic = {
705 .suspend = &rs690_suspend,
706 .resume = &rs690_resume,
707 .vga_set_state = &r100_vga_set_state,
708 .asic_reset = &rs600_asic_reset,
709 .ioctl_wait_idle = NULL,
710 .gui_idle = &r100_gui_idle,
711 .mc_wait_for_idle = &rs690_mc_wait_for_idle,
713 .tlb_flush = &rs400_gart_tlb_flush,
714 .set_page = &rs400_gart_set_page,
717 [RADEON_RING_TYPE_GFX_INDEX] = {
718 .ib_execute = &r100_ring_ib_execute,
719 .emit_fence = &r300_fence_ring_emit,
720 .emit_semaphore = &r100_semaphore_ring_emit,
721 .cs_parse = &r300_cs_parse,
722 .ring_start = &r300_ring_start,
723 .ring_test = &r100_ring_test,
724 .ib_test = &r100_ib_test,
725 .is_lockup = &r100_gpu_is_lockup,
729 .set = &rs600_irq_set,
730 .process = &rs600_irq_process,
733 .get_vblank_counter = &rs600_get_vblank_counter,
734 .bandwidth_update = &rs690_bandwidth_update,
735 .wait_for_vblank = &avivo_wait_for_vblank,
736 .set_backlight_level = &atombios_set_backlight_level,
737 .get_backlight_level = &atombios_get_backlight_level,
738 .hdmi_enable = &r600_hdmi_enable,
739 .hdmi_setmode = &r600_hdmi_setmode,
742 .blit = &r100_copy_blit,
743 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
744 .dma = &r200_copy_dma,
745 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
746 .copy = &r200_copy_dma,
747 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
750 .set_reg = r100_set_surface_reg,
751 .clear_reg = r100_clear_surface_reg,
754 .init = &rs600_hpd_init,
755 .fini = &rs600_hpd_fini,
756 .sense = &rs600_hpd_sense,
757 .set_polarity = &rs600_hpd_set_polarity,
760 .misc = &rs600_pm_misc,
761 .prepare = &rs600_pm_prepare,
762 .finish = &rs600_pm_finish,
763 .init_profile = &r420_pm_init_profile,
764 .get_dynpm_state = &r100_pm_get_dynpm_state,
765 .get_engine_clock = &radeon_atom_get_engine_clock,
766 .set_engine_clock = &radeon_atom_set_engine_clock,
767 .get_memory_clock = &radeon_atom_get_memory_clock,
768 .set_memory_clock = &radeon_atom_set_memory_clock,
769 .get_pcie_lanes = NULL,
770 .set_pcie_lanes = NULL,
771 .set_clock_gating = &radeon_atom_set_clock_gating,
774 .pre_page_flip = &rs600_pre_page_flip,
775 .page_flip = &rs600_page_flip,
776 .post_page_flip = &rs600_post_page_flip,
780 static struct radeon_asic rv515_asic = {
783 .suspend = &rv515_suspend,
784 .resume = &rv515_resume,
785 .vga_set_state = &r100_vga_set_state,
786 .asic_reset = &rs600_asic_reset,
787 .ioctl_wait_idle = NULL,
788 .gui_idle = &r100_gui_idle,
789 .mc_wait_for_idle = &rv515_mc_wait_for_idle,
791 .tlb_flush = &rv370_pcie_gart_tlb_flush,
792 .set_page = &rv370_pcie_gart_set_page,
795 [RADEON_RING_TYPE_GFX_INDEX] = {
796 .ib_execute = &r100_ring_ib_execute,
797 .emit_fence = &r300_fence_ring_emit,
798 .emit_semaphore = &r100_semaphore_ring_emit,
799 .cs_parse = &r300_cs_parse,
800 .ring_start = &rv515_ring_start,
801 .ring_test = &r100_ring_test,
802 .ib_test = &r100_ib_test,
803 .is_lockup = &r100_gpu_is_lockup,
807 .set = &rs600_irq_set,
808 .process = &rs600_irq_process,
811 .get_vblank_counter = &rs600_get_vblank_counter,
812 .bandwidth_update = &rv515_bandwidth_update,
813 .wait_for_vblank = &avivo_wait_for_vblank,
814 .set_backlight_level = &atombios_set_backlight_level,
815 .get_backlight_level = &atombios_get_backlight_level,
818 .blit = &r100_copy_blit,
819 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
820 .dma = &r200_copy_dma,
821 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
822 .copy = &r100_copy_blit,
823 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
826 .set_reg = r100_set_surface_reg,
827 .clear_reg = r100_clear_surface_reg,
830 .init = &rs600_hpd_init,
831 .fini = &rs600_hpd_fini,
832 .sense = &rs600_hpd_sense,
833 .set_polarity = &rs600_hpd_set_polarity,
836 .misc = &rs600_pm_misc,
837 .prepare = &rs600_pm_prepare,
838 .finish = &rs600_pm_finish,
839 .init_profile = &r420_pm_init_profile,
840 .get_dynpm_state = &r100_pm_get_dynpm_state,
841 .get_engine_clock = &radeon_atom_get_engine_clock,
842 .set_engine_clock = &radeon_atom_set_engine_clock,
843 .get_memory_clock = &radeon_atom_get_memory_clock,
844 .set_memory_clock = &radeon_atom_set_memory_clock,
845 .get_pcie_lanes = &rv370_get_pcie_lanes,
846 .set_pcie_lanes = &rv370_set_pcie_lanes,
847 .set_clock_gating = &radeon_atom_set_clock_gating,
850 .pre_page_flip = &rs600_pre_page_flip,
851 .page_flip = &rs600_page_flip,
852 .post_page_flip = &rs600_post_page_flip,
856 static struct radeon_asic r520_asic = {
859 .suspend = &rv515_suspend,
860 .resume = &r520_resume,
861 .vga_set_state = &r100_vga_set_state,
862 .asic_reset = &rs600_asic_reset,
863 .ioctl_wait_idle = NULL,
864 .gui_idle = &r100_gui_idle,
865 .mc_wait_for_idle = &r520_mc_wait_for_idle,
867 .tlb_flush = &rv370_pcie_gart_tlb_flush,
868 .set_page = &rv370_pcie_gart_set_page,
871 [RADEON_RING_TYPE_GFX_INDEX] = {
872 .ib_execute = &r100_ring_ib_execute,
873 .emit_fence = &r300_fence_ring_emit,
874 .emit_semaphore = &r100_semaphore_ring_emit,
875 .cs_parse = &r300_cs_parse,
876 .ring_start = &rv515_ring_start,
877 .ring_test = &r100_ring_test,
878 .ib_test = &r100_ib_test,
879 .is_lockup = &r100_gpu_is_lockup,
883 .set = &rs600_irq_set,
884 .process = &rs600_irq_process,
887 .bandwidth_update = &rv515_bandwidth_update,
888 .get_vblank_counter = &rs600_get_vblank_counter,
889 .wait_for_vblank = &avivo_wait_for_vblank,
890 .set_backlight_level = &atombios_set_backlight_level,
891 .get_backlight_level = &atombios_get_backlight_level,
894 .blit = &r100_copy_blit,
895 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
896 .dma = &r200_copy_dma,
897 .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX,
898 .copy = &r100_copy_blit,
899 .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
902 .set_reg = r100_set_surface_reg,
903 .clear_reg = r100_clear_surface_reg,
906 .init = &rs600_hpd_init,
907 .fini = &rs600_hpd_fini,
908 .sense = &rs600_hpd_sense,
909 .set_polarity = &rs600_hpd_set_polarity,
912 .misc = &rs600_pm_misc,
913 .prepare = &rs600_pm_prepare,
914 .finish = &rs600_pm_finish,
915 .init_profile = &r420_pm_init_profile,
916 .get_dynpm_state = &r100_pm_get_dynpm_state,
917 .get_engine_clock = &radeon_atom_get_engine_clock,
918 .set_engine_clock = &radeon_atom_set_engine_clock,
919 .get_memory_clock = &radeon_atom_get_memory_clock,
920 .set_memory_clock = &radeon_atom_set_memory_clock,
921 .get_pcie_lanes = &rv370_get_pcie_lanes,
922 .set_pcie_lanes = &rv370_set_pcie_lanes,
923 .set_clock_gating = &radeon_atom_set_clock_gating,
926 .pre_page_flip = &rs600_pre_page_flip,
927 .page_flip = &rs600_page_flip,
928 .post_page_flip = &rs600_post_page_flip,
932 static struct radeon_asic r600_asic = {
935 .suspend = &r600_suspend,
936 .resume = &r600_resume,
937 .vga_set_state = &r600_vga_set_state,
938 .asic_reset = &r600_asic_reset,
939 .ioctl_wait_idle = r600_ioctl_wait_idle,
940 .gui_idle = &r600_gui_idle,
941 .mc_wait_for_idle = &r600_mc_wait_for_idle,
942 .get_xclk = &r600_get_xclk,
943 .get_gpu_clock_counter = &r600_get_gpu_clock_counter,
945 .tlb_flush = &r600_pcie_gart_tlb_flush,
946 .set_page = &rs600_gart_set_page,
949 [RADEON_RING_TYPE_GFX_INDEX] = {
950 .ib_execute = &r600_ring_ib_execute,
951 .emit_fence = &r600_fence_ring_emit,
952 .emit_semaphore = &r600_semaphore_ring_emit,
953 .cs_parse = &r600_cs_parse,
954 .ring_test = &r600_ring_test,
955 .ib_test = &r600_ib_test,
956 .is_lockup = &r600_gfx_is_lockup,
958 [R600_RING_TYPE_DMA_INDEX] = {
959 .ib_execute = &r600_dma_ring_ib_execute,
960 .emit_fence = &r600_dma_fence_ring_emit,
961 .emit_semaphore = &r600_dma_semaphore_ring_emit,
962 .cs_parse = &r600_dma_cs_parse,
963 .ring_test = &r600_dma_ring_test,
964 .ib_test = &r600_dma_ib_test,
965 .is_lockup = &r600_dma_is_lockup,
969 .set = &r600_irq_set,
970 .process = &r600_irq_process,
973 .bandwidth_update = &rv515_bandwidth_update,
974 .get_vblank_counter = &rs600_get_vblank_counter,
975 .wait_for_vblank = &avivo_wait_for_vblank,
976 .set_backlight_level = &atombios_set_backlight_level,
977 .get_backlight_level = &atombios_get_backlight_level,
978 .hdmi_enable = &r600_hdmi_enable,
979 .hdmi_setmode = &r600_hdmi_setmode,
982 .blit = &r600_copy_blit,
983 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
984 .dma = &r600_copy_dma,
985 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
986 .copy = &r600_copy_dma,
987 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
990 .set_reg = r600_set_surface_reg,
991 .clear_reg = r600_clear_surface_reg,
994 .init = &r600_hpd_init,
995 .fini = &r600_hpd_fini,
996 .sense = &r600_hpd_sense,
997 .set_polarity = &r600_hpd_set_polarity,
1000 .misc = &r600_pm_misc,
1001 .prepare = &rs600_pm_prepare,
1002 .finish = &rs600_pm_finish,
1003 .init_profile = &r600_pm_init_profile,
1004 .get_dynpm_state = &r600_pm_get_dynpm_state,
1005 .get_engine_clock = &radeon_atom_get_engine_clock,
1006 .set_engine_clock = &radeon_atom_set_engine_clock,
1007 .get_memory_clock = &radeon_atom_get_memory_clock,
1008 .set_memory_clock = &radeon_atom_set_memory_clock,
1009 .get_pcie_lanes = &r600_get_pcie_lanes,
1010 .set_pcie_lanes = &r600_set_pcie_lanes,
1011 .set_clock_gating = NULL,
1014 .pre_page_flip = &rs600_pre_page_flip,
1015 .page_flip = &rs600_page_flip,
1016 .post_page_flip = &rs600_post_page_flip,
1020 static struct radeon_asic rs780_asic = {
1023 .suspend = &r600_suspend,
1024 .resume = &r600_resume,
1025 .vga_set_state = &r600_vga_set_state,
1026 .asic_reset = &r600_asic_reset,
1027 .ioctl_wait_idle = r600_ioctl_wait_idle,
1028 .gui_idle = &r600_gui_idle,
1029 .mc_wait_for_idle = &r600_mc_wait_for_idle,
1030 .get_xclk = &r600_get_xclk,
1031 .get_gpu_clock_counter = &r600_get_gpu_clock_counter,
1033 .tlb_flush = &r600_pcie_gart_tlb_flush,
1034 .set_page = &rs600_gart_set_page,
1037 [RADEON_RING_TYPE_GFX_INDEX] = {
1038 .ib_execute = &r600_ring_ib_execute,
1039 .emit_fence = &r600_fence_ring_emit,
1040 .emit_semaphore = &r600_semaphore_ring_emit,
1041 .cs_parse = &r600_cs_parse,
1042 .ring_test = &r600_ring_test,
1043 .ib_test = &r600_ib_test,
1044 .is_lockup = &r600_gfx_is_lockup,
1046 [R600_RING_TYPE_DMA_INDEX] = {
1047 .ib_execute = &r600_dma_ring_ib_execute,
1048 .emit_fence = &r600_dma_fence_ring_emit,
1049 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1050 .cs_parse = &r600_dma_cs_parse,
1051 .ring_test = &r600_dma_ring_test,
1052 .ib_test = &r600_dma_ib_test,
1053 .is_lockup = &r600_dma_is_lockup,
1057 .set = &r600_irq_set,
1058 .process = &r600_irq_process,
1061 .bandwidth_update = &rs690_bandwidth_update,
1062 .get_vblank_counter = &rs600_get_vblank_counter,
1063 .wait_for_vblank = &avivo_wait_for_vblank,
1064 .set_backlight_level = &atombios_set_backlight_level,
1065 .get_backlight_level = &atombios_get_backlight_level,
1066 .hdmi_enable = &r600_hdmi_enable,
1067 .hdmi_setmode = &r600_hdmi_setmode,
1070 .blit = &r600_copy_blit,
1071 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
1072 .dma = &r600_copy_dma,
1073 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
1074 .copy = &r600_copy_dma,
1075 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
1078 .set_reg = r600_set_surface_reg,
1079 .clear_reg = r600_clear_surface_reg,
1082 .init = &r600_hpd_init,
1083 .fini = &r600_hpd_fini,
1084 .sense = &r600_hpd_sense,
1085 .set_polarity = &r600_hpd_set_polarity,
1088 .misc = &r600_pm_misc,
1089 .prepare = &rs600_pm_prepare,
1090 .finish = &rs600_pm_finish,
1091 .init_profile = &rs780_pm_init_profile,
1092 .get_dynpm_state = &r600_pm_get_dynpm_state,
1093 .get_engine_clock = &radeon_atom_get_engine_clock,
1094 .set_engine_clock = &radeon_atom_set_engine_clock,
1095 .get_memory_clock = NULL,
1096 .set_memory_clock = NULL,
1097 .get_pcie_lanes = NULL,
1098 .set_pcie_lanes = NULL,
1099 .set_clock_gating = NULL,
1102 .pre_page_flip = &rs600_pre_page_flip,
1103 .page_flip = &rs600_page_flip,
1104 .post_page_flip = &rs600_post_page_flip,
1108 static struct radeon_asic rv770_asic = {
1109 .init = &rv770_init,
1110 .fini = &rv770_fini,
1111 .suspend = &rv770_suspend,
1112 .resume = &rv770_resume,
1113 .asic_reset = &r600_asic_reset,
1114 .vga_set_state = &r600_vga_set_state,
1115 .ioctl_wait_idle = r600_ioctl_wait_idle,
1116 .gui_idle = &r600_gui_idle,
1117 .mc_wait_for_idle = &r600_mc_wait_for_idle,
1118 .get_xclk = &rv770_get_xclk,
1119 .get_gpu_clock_counter = &r600_get_gpu_clock_counter,
1121 .tlb_flush = &r600_pcie_gart_tlb_flush,
1122 .set_page = &rs600_gart_set_page,
1125 [RADEON_RING_TYPE_GFX_INDEX] = {
1126 .ib_execute = &r600_ring_ib_execute,
1127 .emit_fence = &r600_fence_ring_emit,
1128 .emit_semaphore = &r600_semaphore_ring_emit,
1129 .cs_parse = &r600_cs_parse,
1130 .ring_test = &r600_ring_test,
1131 .ib_test = &r600_ib_test,
1132 .is_lockup = &r600_gfx_is_lockup,
1134 [R600_RING_TYPE_DMA_INDEX] = {
1135 .ib_execute = &r600_dma_ring_ib_execute,
1136 .emit_fence = &r600_dma_fence_ring_emit,
1137 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1138 .cs_parse = &r600_dma_cs_parse,
1139 .ring_test = &r600_dma_ring_test,
1140 .ib_test = &r600_dma_ib_test,
1141 .is_lockup = &r600_dma_is_lockup,
1143 [R600_RING_TYPE_UVD_INDEX] = {
1144 .ib_execute = &r600_uvd_ib_execute,
1145 .emit_fence = &r600_uvd_fence_emit,
1146 .emit_semaphore = &r600_uvd_semaphore_emit,
1147 .cs_parse = &radeon_uvd_cs_parse,
1148 .ring_test = &r600_uvd_ring_test,
1149 .ib_test = &r600_uvd_ib_test,
1150 .is_lockup = &radeon_ring_test_lockup,
1154 .set = &r600_irq_set,
1155 .process = &r600_irq_process,
1158 .bandwidth_update = &rv515_bandwidth_update,
1159 .get_vblank_counter = &rs600_get_vblank_counter,
1160 .wait_for_vblank = &avivo_wait_for_vblank,
1161 .set_backlight_level = &atombios_set_backlight_level,
1162 .get_backlight_level = &atombios_get_backlight_level,
1163 .hdmi_enable = &r600_hdmi_enable,
1164 .hdmi_setmode = &r600_hdmi_setmode,
1167 .blit = &r600_copy_blit,
1168 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
1169 .dma = &rv770_copy_dma,
1170 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
1171 .copy = &rv770_copy_dma,
1172 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
1175 .set_reg = r600_set_surface_reg,
1176 .clear_reg = r600_clear_surface_reg,
1179 .init = &r600_hpd_init,
1180 .fini = &r600_hpd_fini,
1181 .sense = &r600_hpd_sense,
1182 .set_polarity = &r600_hpd_set_polarity,
1185 .misc = &rv770_pm_misc,
1186 .prepare = &rs600_pm_prepare,
1187 .finish = &rs600_pm_finish,
1188 .init_profile = &r600_pm_init_profile,
1189 .get_dynpm_state = &r600_pm_get_dynpm_state,
1190 .get_engine_clock = &radeon_atom_get_engine_clock,
1191 .set_engine_clock = &radeon_atom_set_engine_clock,
1192 .get_memory_clock = &radeon_atom_get_memory_clock,
1193 .set_memory_clock = &radeon_atom_set_memory_clock,
1194 .get_pcie_lanes = &r600_get_pcie_lanes,
1195 .set_pcie_lanes = &r600_set_pcie_lanes,
1196 .set_clock_gating = &radeon_atom_set_clock_gating,
1197 .set_uvd_clocks = &rv770_set_uvd_clocks,
1200 .pre_page_flip = &rs600_pre_page_flip,
1201 .page_flip = &rv770_page_flip,
1202 .post_page_flip = &rs600_post_page_flip,
1206 static struct radeon_asic evergreen_asic = {
1207 .init = &evergreen_init,
1208 .fini = &evergreen_fini,
1209 .suspend = &evergreen_suspend,
1210 .resume = &evergreen_resume,
1211 .asic_reset = &evergreen_asic_reset,
1212 .vga_set_state = &r600_vga_set_state,
1213 .ioctl_wait_idle = r600_ioctl_wait_idle,
1214 .gui_idle = &r600_gui_idle,
1215 .mc_wait_for_idle = &evergreen_mc_wait_for_idle,
1216 .get_xclk = &rv770_get_xclk,
1217 .get_gpu_clock_counter = &r600_get_gpu_clock_counter,
1219 .tlb_flush = &evergreen_pcie_gart_tlb_flush,
1220 .set_page = &rs600_gart_set_page,
1223 [RADEON_RING_TYPE_GFX_INDEX] = {
1224 .ib_execute = &evergreen_ring_ib_execute,
1225 .emit_fence = &r600_fence_ring_emit,
1226 .emit_semaphore = &r600_semaphore_ring_emit,
1227 .cs_parse = &evergreen_cs_parse,
1228 .ring_test = &r600_ring_test,
1229 .ib_test = &r600_ib_test,
1230 .is_lockup = &evergreen_gfx_is_lockup,
1232 [R600_RING_TYPE_DMA_INDEX] = {
1233 .ib_execute = &evergreen_dma_ring_ib_execute,
1234 .emit_fence = &evergreen_dma_fence_ring_emit,
1235 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1236 .cs_parse = &evergreen_dma_cs_parse,
1237 .ring_test = &r600_dma_ring_test,
1238 .ib_test = &r600_dma_ib_test,
1239 .is_lockup = &evergreen_dma_is_lockup,
1241 [R600_RING_TYPE_UVD_INDEX] = {
1242 .ib_execute = &r600_uvd_ib_execute,
1243 .emit_fence = &r600_uvd_fence_emit,
1244 .emit_semaphore = &r600_uvd_semaphore_emit,
1245 .cs_parse = &radeon_uvd_cs_parse,
1246 .ring_test = &r600_uvd_ring_test,
1247 .ib_test = &r600_uvd_ib_test,
1248 .is_lockup = &radeon_ring_test_lockup,
1252 .set = &evergreen_irq_set,
1253 .process = &evergreen_irq_process,
1256 .bandwidth_update = &evergreen_bandwidth_update,
1257 .get_vblank_counter = &evergreen_get_vblank_counter,
1258 .wait_for_vblank = &dce4_wait_for_vblank,
1259 .set_backlight_level = &atombios_set_backlight_level,
1260 .get_backlight_level = &atombios_get_backlight_level,
1261 .hdmi_enable = &evergreen_hdmi_enable,
1262 .hdmi_setmode = &evergreen_hdmi_setmode,
1265 .blit = &r600_copy_blit,
1266 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
1267 .dma = &evergreen_copy_dma,
1268 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
1269 .copy = &evergreen_copy_dma,
1270 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
1273 .set_reg = r600_set_surface_reg,
1274 .clear_reg = r600_clear_surface_reg,
1277 .init = &evergreen_hpd_init,
1278 .fini = &evergreen_hpd_fini,
1279 .sense = &evergreen_hpd_sense,
1280 .set_polarity = &evergreen_hpd_set_polarity,
1283 .misc = &evergreen_pm_misc,
1284 .prepare = &evergreen_pm_prepare,
1285 .finish = &evergreen_pm_finish,
1286 .init_profile = &r600_pm_init_profile,
1287 .get_dynpm_state = &r600_pm_get_dynpm_state,
1288 .get_engine_clock = &radeon_atom_get_engine_clock,
1289 .set_engine_clock = &radeon_atom_set_engine_clock,
1290 .get_memory_clock = &radeon_atom_get_memory_clock,
1291 .set_memory_clock = &radeon_atom_set_memory_clock,
1292 .get_pcie_lanes = &r600_get_pcie_lanes,
1293 .set_pcie_lanes = &r600_set_pcie_lanes,
1294 .set_clock_gating = NULL,
1295 .set_uvd_clocks = &evergreen_set_uvd_clocks,
1298 .pre_page_flip = &evergreen_pre_page_flip,
1299 .page_flip = &evergreen_page_flip,
1300 .post_page_flip = &evergreen_post_page_flip,
1304 static struct radeon_asic sumo_asic = {
1305 .init = &evergreen_init,
1306 .fini = &evergreen_fini,
1307 .suspend = &evergreen_suspend,
1308 .resume = &evergreen_resume,
1309 .asic_reset = &evergreen_asic_reset,
1310 .vga_set_state = &r600_vga_set_state,
1311 .ioctl_wait_idle = r600_ioctl_wait_idle,
1312 .gui_idle = &r600_gui_idle,
1313 .mc_wait_for_idle = &evergreen_mc_wait_for_idle,
1314 .get_xclk = &r600_get_xclk,
1315 .get_gpu_clock_counter = &r600_get_gpu_clock_counter,
1317 .tlb_flush = &evergreen_pcie_gart_tlb_flush,
1318 .set_page = &rs600_gart_set_page,
1321 [RADEON_RING_TYPE_GFX_INDEX] = {
1322 .ib_execute = &evergreen_ring_ib_execute,
1323 .emit_fence = &r600_fence_ring_emit,
1324 .emit_semaphore = &r600_semaphore_ring_emit,
1325 .cs_parse = &evergreen_cs_parse,
1326 .ring_test = &r600_ring_test,
1327 .ib_test = &r600_ib_test,
1328 .is_lockup = &evergreen_gfx_is_lockup,
1330 [R600_RING_TYPE_DMA_INDEX] = {
1331 .ib_execute = &evergreen_dma_ring_ib_execute,
1332 .emit_fence = &evergreen_dma_fence_ring_emit,
1333 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1334 .cs_parse = &evergreen_dma_cs_parse,
1335 .ring_test = &r600_dma_ring_test,
1336 .ib_test = &r600_dma_ib_test,
1337 .is_lockup = &evergreen_dma_is_lockup,
1339 [R600_RING_TYPE_UVD_INDEX] = {
1340 .ib_execute = &r600_uvd_ib_execute,
1341 .emit_fence = &r600_uvd_fence_emit,
1342 .emit_semaphore = &r600_uvd_semaphore_emit,
1343 .cs_parse = &radeon_uvd_cs_parse,
1344 .ring_test = &r600_uvd_ring_test,
1345 .ib_test = &r600_uvd_ib_test,
1346 .is_lockup = &radeon_ring_test_lockup,
1350 .set = &evergreen_irq_set,
1351 .process = &evergreen_irq_process,
1354 .bandwidth_update = &evergreen_bandwidth_update,
1355 .get_vblank_counter = &evergreen_get_vblank_counter,
1356 .wait_for_vblank = &dce4_wait_for_vblank,
1357 .set_backlight_level = &atombios_set_backlight_level,
1358 .get_backlight_level = &atombios_get_backlight_level,
1359 .hdmi_enable = &evergreen_hdmi_enable,
1360 .hdmi_setmode = &evergreen_hdmi_setmode,
1363 .blit = &r600_copy_blit,
1364 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
1365 .dma = &evergreen_copy_dma,
1366 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
1367 .copy = &evergreen_copy_dma,
1368 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
1371 .set_reg = r600_set_surface_reg,
1372 .clear_reg = r600_clear_surface_reg,
1375 .init = &evergreen_hpd_init,
1376 .fini = &evergreen_hpd_fini,
1377 .sense = &evergreen_hpd_sense,
1378 .set_polarity = &evergreen_hpd_set_polarity,
1381 .misc = &evergreen_pm_misc,
1382 .prepare = &evergreen_pm_prepare,
1383 .finish = &evergreen_pm_finish,
1384 .init_profile = &sumo_pm_init_profile,
1385 .get_dynpm_state = &r600_pm_get_dynpm_state,
1386 .get_engine_clock = &radeon_atom_get_engine_clock,
1387 .set_engine_clock = &radeon_atom_set_engine_clock,
1388 .get_memory_clock = NULL,
1389 .set_memory_clock = NULL,
1390 .get_pcie_lanes = NULL,
1391 .set_pcie_lanes = NULL,
1392 .set_clock_gating = NULL,
1393 .set_uvd_clocks = &sumo_set_uvd_clocks,
1396 .pre_page_flip = &evergreen_pre_page_flip,
1397 .page_flip = &evergreen_page_flip,
1398 .post_page_flip = &evergreen_post_page_flip,
1402 static struct radeon_asic btc_asic = {
1403 .init = &evergreen_init,
1404 .fini = &evergreen_fini,
1405 .suspend = &evergreen_suspend,
1406 .resume = &evergreen_resume,
1407 .asic_reset = &evergreen_asic_reset,
1408 .vga_set_state = &r600_vga_set_state,
1409 .ioctl_wait_idle = r600_ioctl_wait_idle,
1410 .gui_idle = &r600_gui_idle,
1411 .mc_wait_for_idle = &evergreen_mc_wait_for_idle,
1412 .get_xclk = &rv770_get_xclk,
1413 .get_gpu_clock_counter = &r600_get_gpu_clock_counter,
1415 .tlb_flush = &evergreen_pcie_gart_tlb_flush,
1416 .set_page = &rs600_gart_set_page,
1419 [RADEON_RING_TYPE_GFX_INDEX] = {
1420 .ib_execute = &evergreen_ring_ib_execute,
1421 .emit_fence = &r600_fence_ring_emit,
1422 .emit_semaphore = &r600_semaphore_ring_emit,
1423 .cs_parse = &evergreen_cs_parse,
1424 .ring_test = &r600_ring_test,
1425 .ib_test = &r600_ib_test,
1426 .is_lockup = &evergreen_gfx_is_lockup,
1428 [R600_RING_TYPE_DMA_INDEX] = {
1429 .ib_execute = &evergreen_dma_ring_ib_execute,
1430 .emit_fence = &evergreen_dma_fence_ring_emit,
1431 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1432 .cs_parse = &evergreen_dma_cs_parse,
1433 .ring_test = &r600_dma_ring_test,
1434 .ib_test = &r600_dma_ib_test,
1435 .is_lockup = &evergreen_dma_is_lockup,
1437 [R600_RING_TYPE_UVD_INDEX] = {
1438 .ib_execute = &r600_uvd_ib_execute,
1439 .emit_fence = &r600_uvd_fence_emit,
1440 .emit_semaphore = &r600_uvd_semaphore_emit,
1441 .cs_parse = &radeon_uvd_cs_parse,
1442 .ring_test = &r600_uvd_ring_test,
1443 .ib_test = &r600_uvd_ib_test,
1444 .is_lockup = &radeon_ring_test_lockup,
1448 .set = &evergreen_irq_set,
1449 .process = &evergreen_irq_process,
1452 .bandwidth_update = &evergreen_bandwidth_update,
1453 .get_vblank_counter = &evergreen_get_vblank_counter,
1454 .wait_for_vblank = &dce4_wait_for_vblank,
1455 .set_backlight_level = &atombios_set_backlight_level,
1456 .get_backlight_level = &atombios_get_backlight_level,
1457 .hdmi_enable = &evergreen_hdmi_enable,
1458 .hdmi_setmode = &evergreen_hdmi_setmode,
1461 .blit = &r600_copy_blit,
1462 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
1463 .dma = &evergreen_copy_dma,
1464 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
1465 .copy = &evergreen_copy_dma,
1466 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
1469 .set_reg = r600_set_surface_reg,
1470 .clear_reg = r600_clear_surface_reg,
1473 .init = &evergreen_hpd_init,
1474 .fini = &evergreen_hpd_fini,
1475 .sense = &evergreen_hpd_sense,
1476 .set_polarity = &evergreen_hpd_set_polarity,
1479 .misc = &evergreen_pm_misc,
1480 .prepare = &evergreen_pm_prepare,
1481 .finish = &evergreen_pm_finish,
1482 .init_profile = &btc_pm_init_profile,
1483 .get_dynpm_state = &r600_pm_get_dynpm_state,
1484 .get_engine_clock = &radeon_atom_get_engine_clock,
1485 .set_engine_clock = &radeon_atom_set_engine_clock,
1486 .get_memory_clock = &radeon_atom_get_memory_clock,
1487 .set_memory_clock = &radeon_atom_set_memory_clock,
1488 .get_pcie_lanes = &r600_get_pcie_lanes,
1489 .set_pcie_lanes = &r600_set_pcie_lanes,
1490 .set_clock_gating = NULL,
1491 .set_uvd_clocks = &evergreen_set_uvd_clocks,
1494 .pre_page_flip = &evergreen_pre_page_flip,
1495 .page_flip = &evergreen_page_flip,
1496 .post_page_flip = &evergreen_post_page_flip,
1500 static struct radeon_asic cayman_asic = {
1501 .init = &cayman_init,
1502 .fini = &cayman_fini,
1503 .suspend = &cayman_suspend,
1504 .resume = &cayman_resume,
1505 .asic_reset = &cayman_asic_reset,
1506 .vga_set_state = &r600_vga_set_state,
1507 .ioctl_wait_idle = r600_ioctl_wait_idle,
1508 .gui_idle = &r600_gui_idle,
1509 .mc_wait_for_idle = &evergreen_mc_wait_for_idle,
1510 .get_xclk = &rv770_get_xclk,
1511 .get_gpu_clock_counter = &r600_get_gpu_clock_counter,
1513 .tlb_flush = &cayman_pcie_gart_tlb_flush,
1514 .set_page = &rs600_gart_set_page,
1517 .init = &cayman_vm_init,
1518 .fini = &cayman_vm_fini,
1519 .pt_ring_index = R600_RING_TYPE_DMA_INDEX,
1520 .set_page = &cayman_vm_set_page,
1523 [RADEON_RING_TYPE_GFX_INDEX] = {
1524 .ib_execute = &cayman_ring_ib_execute,
1525 .ib_parse = &evergreen_ib_parse,
1526 .emit_fence = &cayman_fence_ring_emit,
1527 .emit_semaphore = &r600_semaphore_ring_emit,
1528 .cs_parse = &evergreen_cs_parse,
1529 .ring_test = &r600_ring_test,
1530 .ib_test = &r600_ib_test,
1531 .is_lockup = &cayman_gfx_is_lockup,
1532 .vm_flush = &cayman_vm_flush,
1534 [CAYMAN_RING_TYPE_CP1_INDEX] = {
1535 .ib_execute = &cayman_ring_ib_execute,
1536 .ib_parse = &evergreen_ib_parse,
1537 .emit_fence = &cayman_fence_ring_emit,
1538 .emit_semaphore = &r600_semaphore_ring_emit,
1539 .cs_parse = &evergreen_cs_parse,
1540 .ring_test = &r600_ring_test,
1541 .ib_test = &r600_ib_test,
1542 .is_lockup = &cayman_gfx_is_lockup,
1543 .vm_flush = &cayman_vm_flush,
1545 [CAYMAN_RING_TYPE_CP2_INDEX] = {
1546 .ib_execute = &cayman_ring_ib_execute,
1547 .ib_parse = &evergreen_ib_parse,
1548 .emit_fence = &cayman_fence_ring_emit,
1549 .emit_semaphore = &r600_semaphore_ring_emit,
1550 .cs_parse = &evergreen_cs_parse,
1551 .ring_test = &r600_ring_test,
1552 .ib_test = &r600_ib_test,
1553 .is_lockup = &cayman_gfx_is_lockup,
1554 .vm_flush = &cayman_vm_flush,
1556 [R600_RING_TYPE_DMA_INDEX] = {
1557 .ib_execute = &cayman_dma_ring_ib_execute,
1558 .ib_parse = &evergreen_dma_ib_parse,
1559 .emit_fence = &evergreen_dma_fence_ring_emit,
1560 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1561 .cs_parse = &evergreen_dma_cs_parse,
1562 .ring_test = &r600_dma_ring_test,
1563 .ib_test = &r600_dma_ib_test,
1564 .is_lockup = &cayman_dma_is_lockup,
1565 .vm_flush = &cayman_dma_vm_flush,
1567 [CAYMAN_RING_TYPE_DMA1_INDEX] = {
1568 .ib_execute = &cayman_dma_ring_ib_execute,
1569 .ib_parse = &evergreen_dma_ib_parse,
1570 .emit_fence = &evergreen_dma_fence_ring_emit,
1571 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1572 .cs_parse = &evergreen_dma_cs_parse,
1573 .ring_test = &r600_dma_ring_test,
1574 .ib_test = &r600_dma_ib_test,
1575 .is_lockup = &cayman_dma_is_lockup,
1576 .vm_flush = &cayman_dma_vm_flush,
1578 [R600_RING_TYPE_UVD_INDEX] = {
1579 .ib_execute = &r600_uvd_ib_execute,
1580 .emit_fence = &r600_uvd_fence_emit,
1581 .emit_semaphore = &cayman_uvd_semaphore_emit,
1582 .cs_parse = &radeon_uvd_cs_parse,
1583 .ring_test = &r600_uvd_ring_test,
1584 .ib_test = &r600_uvd_ib_test,
1585 .is_lockup = &radeon_ring_test_lockup,
1589 .set = &evergreen_irq_set,
1590 .process = &evergreen_irq_process,
1593 .bandwidth_update = &evergreen_bandwidth_update,
1594 .get_vblank_counter = &evergreen_get_vblank_counter,
1595 .wait_for_vblank = &dce4_wait_for_vblank,
1596 .set_backlight_level = &atombios_set_backlight_level,
1597 .get_backlight_level = &atombios_get_backlight_level,
1598 .hdmi_enable = &evergreen_hdmi_enable,
1599 .hdmi_setmode = &evergreen_hdmi_setmode,
1602 .blit = &r600_copy_blit,
1603 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
1604 .dma = &evergreen_copy_dma,
1605 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
1606 .copy = &evergreen_copy_dma,
1607 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
1610 .set_reg = r600_set_surface_reg,
1611 .clear_reg = r600_clear_surface_reg,
1614 .init = &evergreen_hpd_init,
1615 .fini = &evergreen_hpd_fini,
1616 .sense = &evergreen_hpd_sense,
1617 .set_polarity = &evergreen_hpd_set_polarity,
1620 .misc = &evergreen_pm_misc,
1621 .prepare = &evergreen_pm_prepare,
1622 .finish = &evergreen_pm_finish,
1623 .init_profile = &btc_pm_init_profile,
1624 .get_dynpm_state = &r600_pm_get_dynpm_state,
1625 .get_engine_clock = &radeon_atom_get_engine_clock,
1626 .set_engine_clock = &radeon_atom_set_engine_clock,
1627 .get_memory_clock = &radeon_atom_get_memory_clock,
1628 .set_memory_clock = &radeon_atom_set_memory_clock,
1629 .get_pcie_lanes = &r600_get_pcie_lanes,
1630 .set_pcie_lanes = &r600_set_pcie_lanes,
1631 .set_clock_gating = NULL,
1632 .set_uvd_clocks = &evergreen_set_uvd_clocks,
1635 .pre_page_flip = &evergreen_pre_page_flip,
1636 .page_flip = &evergreen_page_flip,
1637 .post_page_flip = &evergreen_post_page_flip,
1641 static struct radeon_asic trinity_asic = {
1642 .init = &cayman_init,
1643 .fini = &cayman_fini,
1644 .suspend = &cayman_suspend,
1645 .resume = &cayman_resume,
1646 .asic_reset = &cayman_asic_reset,
1647 .vga_set_state = &r600_vga_set_state,
1648 .ioctl_wait_idle = r600_ioctl_wait_idle,
1649 .gui_idle = &r600_gui_idle,
1650 .mc_wait_for_idle = &evergreen_mc_wait_for_idle,
1651 .get_xclk = &r600_get_xclk,
1652 .get_gpu_clock_counter = &r600_get_gpu_clock_counter,
1654 .tlb_flush = &cayman_pcie_gart_tlb_flush,
1655 .set_page = &rs600_gart_set_page,
1658 .init = &cayman_vm_init,
1659 .fini = &cayman_vm_fini,
1660 .pt_ring_index = R600_RING_TYPE_DMA_INDEX,
1661 .set_page = &cayman_vm_set_page,
1664 [RADEON_RING_TYPE_GFX_INDEX] = {
1665 .ib_execute = &cayman_ring_ib_execute,
1666 .ib_parse = &evergreen_ib_parse,
1667 .emit_fence = &cayman_fence_ring_emit,
1668 .emit_semaphore = &r600_semaphore_ring_emit,
1669 .cs_parse = &evergreen_cs_parse,
1670 .ring_test = &r600_ring_test,
1671 .ib_test = &r600_ib_test,
1672 .is_lockup = &cayman_gfx_is_lockup,
1673 .vm_flush = &cayman_vm_flush,
1675 [CAYMAN_RING_TYPE_CP1_INDEX] = {
1676 .ib_execute = &cayman_ring_ib_execute,
1677 .ib_parse = &evergreen_ib_parse,
1678 .emit_fence = &cayman_fence_ring_emit,
1679 .emit_semaphore = &r600_semaphore_ring_emit,
1680 .cs_parse = &evergreen_cs_parse,
1681 .ring_test = &r600_ring_test,
1682 .ib_test = &r600_ib_test,
1683 .is_lockup = &cayman_gfx_is_lockup,
1684 .vm_flush = &cayman_vm_flush,
1686 [CAYMAN_RING_TYPE_CP2_INDEX] = {
1687 .ib_execute = &cayman_ring_ib_execute,
1688 .ib_parse = &evergreen_ib_parse,
1689 .emit_fence = &cayman_fence_ring_emit,
1690 .emit_semaphore = &r600_semaphore_ring_emit,
1691 .cs_parse = &evergreen_cs_parse,
1692 .ring_test = &r600_ring_test,
1693 .ib_test = &r600_ib_test,
1694 .is_lockup = &cayman_gfx_is_lockup,
1695 .vm_flush = &cayman_vm_flush,
1697 [R600_RING_TYPE_DMA_INDEX] = {
1698 .ib_execute = &cayman_dma_ring_ib_execute,
1699 .ib_parse = &evergreen_dma_ib_parse,
1700 .emit_fence = &evergreen_dma_fence_ring_emit,
1701 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1702 .cs_parse = &evergreen_dma_cs_parse,
1703 .ring_test = &r600_dma_ring_test,
1704 .ib_test = &r600_dma_ib_test,
1705 .is_lockup = &cayman_dma_is_lockup,
1706 .vm_flush = &cayman_dma_vm_flush,
1708 [CAYMAN_RING_TYPE_DMA1_INDEX] = {
1709 .ib_execute = &cayman_dma_ring_ib_execute,
1710 .ib_parse = &evergreen_dma_ib_parse,
1711 .emit_fence = &evergreen_dma_fence_ring_emit,
1712 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1713 .cs_parse = &evergreen_dma_cs_parse,
1714 .ring_test = &r600_dma_ring_test,
1715 .ib_test = &r600_dma_ib_test,
1716 .is_lockup = &cayman_dma_is_lockup,
1717 .vm_flush = &cayman_dma_vm_flush,
1719 [R600_RING_TYPE_UVD_INDEX] = {
1720 .ib_execute = &r600_uvd_ib_execute,
1721 .emit_fence = &r600_uvd_fence_emit,
1722 .emit_semaphore = &cayman_uvd_semaphore_emit,
1723 .cs_parse = &radeon_uvd_cs_parse,
1724 .ring_test = &r600_uvd_ring_test,
1725 .ib_test = &r600_uvd_ib_test,
1726 .is_lockup = &radeon_ring_test_lockup,
1730 .set = &evergreen_irq_set,
1731 .process = &evergreen_irq_process,
1734 .bandwidth_update = &dce6_bandwidth_update,
1735 .get_vblank_counter = &evergreen_get_vblank_counter,
1736 .wait_for_vblank = &dce4_wait_for_vblank,
1737 .set_backlight_level = &atombios_set_backlight_level,
1738 .get_backlight_level = &atombios_get_backlight_level,
1741 .blit = &r600_copy_blit,
1742 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
1743 .dma = &evergreen_copy_dma,
1744 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
1745 .copy = &evergreen_copy_dma,
1746 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
1749 .set_reg = r600_set_surface_reg,
1750 .clear_reg = r600_clear_surface_reg,
1753 .init = &evergreen_hpd_init,
1754 .fini = &evergreen_hpd_fini,
1755 .sense = &evergreen_hpd_sense,
1756 .set_polarity = &evergreen_hpd_set_polarity,
1759 .misc = &evergreen_pm_misc,
1760 .prepare = &evergreen_pm_prepare,
1761 .finish = &evergreen_pm_finish,
1762 .init_profile = &sumo_pm_init_profile,
1763 .get_dynpm_state = &r600_pm_get_dynpm_state,
1764 .get_engine_clock = &radeon_atom_get_engine_clock,
1765 .set_engine_clock = &radeon_atom_set_engine_clock,
1766 .get_memory_clock = NULL,
1767 .set_memory_clock = NULL,
1768 .get_pcie_lanes = NULL,
1769 .set_pcie_lanes = NULL,
1770 .set_clock_gating = NULL,
1771 .set_uvd_clocks = &sumo_set_uvd_clocks,
1774 .pre_page_flip = &evergreen_pre_page_flip,
1775 .page_flip = &evergreen_page_flip,
1776 .post_page_flip = &evergreen_post_page_flip,
1780 static struct radeon_asic si_asic = {
1783 .suspend = &si_suspend,
1784 .resume = &si_resume,
1785 .asic_reset = &si_asic_reset,
1786 .vga_set_state = &r600_vga_set_state,
1787 .ioctl_wait_idle = r600_ioctl_wait_idle,
1788 .gui_idle = &r600_gui_idle,
1789 .mc_wait_for_idle = &evergreen_mc_wait_for_idle,
1790 .get_xclk = &si_get_xclk,
1791 .get_gpu_clock_counter = &si_get_gpu_clock_counter,
1793 .tlb_flush = &si_pcie_gart_tlb_flush,
1794 .set_page = &rs600_gart_set_page,
1797 .init = &si_vm_init,
1798 .fini = &si_vm_fini,
1799 .pt_ring_index = R600_RING_TYPE_DMA_INDEX,
1800 .set_page = &si_vm_set_page,
1803 [RADEON_RING_TYPE_GFX_INDEX] = {
1804 .ib_execute = &si_ring_ib_execute,
1805 .ib_parse = &si_ib_parse,
1806 .emit_fence = &si_fence_ring_emit,
1807 .emit_semaphore = &r600_semaphore_ring_emit,
1809 .ring_test = &r600_ring_test,
1810 .ib_test = &r600_ib_test,
1811 .is_lockup = &si_gfx_is_lockup,
1812 .vm_flush = &si_vm_flush,
1814 [CAYMAN_RING_TYPE_CP1_INDEX] = {
1815 .ib_execute = &si_ring_ib_execute,
1816 .ib_parse = &si_ib_parse,
1817 .emit_fence = &si_fence_ring_emit,
1818 .emit_semaphore = &r600_semaphore_ring_emit,
1820 .ring_test = &r600_ring_test,
1821 .ib_test = &r600_ib_test,
1822 .is_lockup = &si_gfx_is_lockup,
1823 .vm_flush = &si_vm_flush,
1825 [CAYMAN_RING_TYPE_CP2_INDEX] = {
1826 .ib_execute = &si_ring_ib_execute,
1827 .ib_parse = &si_ib_parse,
1828 .emit_fence = &si_fence_ring_emit,
1829 .emit_semaphore = &r600_semaphore_ring_emit,
1831 .ring_test = &r600_ring_test,
1832 .ib_test = &r600_ib_test,
1833 .is_lockup = &si_gfx_is_lockup,
1834 .vm_flush = &si_vm_flush,
1836 [R600_RING_TYPE_DMA_INDEX] = {
1837 .ib_execute = &cayman_dma_ring_ib_execute,
1838 .ib_parse = &evergreen_dma_ib_parse,
1839 .emit_fence = &evergreen_dma_fence_ring_emit,
1840 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1842 .ring_test = &r600_dma_ring_test,
1843 .ib_test = &r600_dma_ib_test,
1844 .is_lockup = &si_dma_is_lockup,
1845 .vm_flush = &si_dma_vm_flush,
1847 [CAYMAN_RING_TYPE_DMA1_INDEX] = {
1848 .ib_execute = &cayman_dma_ring_ib_execute,
1849 .ib_parse = &evergreen_dma_ib_parse,
1850 .emit_fence = &evergreen_dma_fence_ring_emit,
1851 .emit_semaphore = &r600_dma_semaphore_ring_emit,
1853 .ring_test = &r600_dma_ring_test,
1854 .ib_test = &r600_dma_ib_test,
1855 .is_lockup = &si_dma_is_lockup,
1856 .vm_flush = &si_dma_vm_flush,
1858 [R600_RING_TYPE_UVD_INDEX] = {
1859 .ib_execute = &r600_uvd_ib_execute,
1860 .emit_fence = &r600_uvd_fence_emit,
1861 .emit_semaphore = &cayman_uvd_semaphore_emit,
1862 .cs_parse = &radeon_uvd_cs_parse,
1863 .ring_test = &r600_uvd_ring_test,
1864 .ib_test = &r600_uvd_ib_test,
1865 .is_lockup = &radeon_ring_test_lockup,
1870 .process = &si_irq_process,
1873 .bandwidth_update = &dce6_bandwidth_update,
1874 .get_vblank_counter = &evergreen_get_vblank_counter,
1875 .wait_for_vblank = &dce4_wait_for_vblank,
1876 .set_backlight_level = &atombios_set_backlight_level,
1877 .get_backlight_level = &atombios_get_backlight_level,
1881 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
1882 .dma = &si_copy_dma,
1883 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
1884 .copy = &si_copy_dma,
1885 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
1888 .set_reg = r600_set_surface_reg,
1889 .clear_reg = r600_clear_surface_reg,
1892 .init = &evergreen_hpd_init,
1893 .fini = &evergreen_hpd_fini,
1894 .sense = &evergreen_hpd_sense,
1895 .set_polarity = &evergreen_hpd_set_polarity,
1898 .misc = &evergreen_pm_misc,
1899 .prepare = &evergreen_pm_prepare,
1900 .finish = &evergreen_pm_finish,
1901 .init_profile = &sumo_pm_init_profile,
1902 .get_dynpm_state = &r600_pm_get_dynpm_state,
1903 .get_engine_clock = &radeon_atom_get_engine_clock,
1904 .set_engine_clock = &radeon_atom_set_engine_clock,
1905 .get_memory_clock = &radeon_atom_get_memory_clock,
1906 .set_memory_clock = &radeon_atom_set_memory_clock,
1907 .get_pcie_lanes = &r600_get_pcie_lanes,
1908 .set_pcie_lanes = &r600_set_pcie_lanes,
1909 .set_clock_gating = NULL,
1910 .set_uvd_clocks = &si_set_uvd_clocks,
1913 .pre_page_flip = &evergreen_pre_page_flip,
1914 .page_flip = &evergreen_page_flip,
1915 .post_page_flip = &evergreen_post_page_flip,
1920 * radeon_asic_init - register asic specific callbacks
1922 * @rdev: radeon device pointer
1924 * Registers the appropriate asic specific callbacks for each
1925 * chip family. Also sets other asics specific info like the number
1926 * of crtcs and the register aperture accessors (all asics).
1927 * Returns 0 for success.
1929 int radeon_asic_init(struct radeon_device *rdev)
1931 radeon_register_accessor_init(rdev);
1933 /* set the number of crtcs */
1934 if (rdev->flags & RADEON_SINGLE_CRTC)
1939 rdev->has_uvd = false;
1941 switch (rdev->family) {
1947 rdev->asic = &r100_asic;
1953 rdev->asic = &r200_asic;
1959 if (rdev->flags & RADEON_IS_PCIE)
1960 rdev->asic = &r300_asic_pcie;
1962 rdev->asic = &r300_asic;
1967 rdev->asic = &r420_asic;
1969 if (rdev->bios == NULL) {
1970 rdev->asic->pm.get_engine_clock = &radeon_legacy_get_engine_clock;
1971 rdev->asic->pm.set_engine_clock = &radeon_legacy_set_engine_clock;
1972 rdev->asic->pm.get_memory_clock = &radeon_legacy_get_memory_clock;
1973 rdev->asic->pm.set_memory_clock = NULL;
1974 rdev->asic->display.set_backlight_level = &radeon_legacy_set_backlight_level;
1979 rdev->asic = &rs400_asic;
1982 rdev->asic = &rs600_asic;
1986 rdev->asic = &rs690_asic;
1989 rdev->asic = &rv515_asic;
1996 rdev->asic = &r520_asic;
2004 rdev->asic = &r600_asic;
2005 if (rdev->family == CHIP_R600)
2006 rdev->has_uvd = false;
2008 rdev->has_uvd = true;
2012 rdev->asic = &rs780_asic;
2013 rdev->has_uvd = true;
2019 rdev->asic = &rv770_asic;
2020 rdev->has_uvd = true;
2028 if (rdev->family == CHIP_CEDAR)
2032 rdev->asic = &evergreen_asic;
2033 rdev->has_uvd = true;
2038 rdev->asic = &sumo_asic;
2039 rdev->has_uvd = true;
2045 if (rdev->family == CHIP_CAICOS)
2049 rdev->asic = &btc_asic;
2050 rdev->has_uvd = true;
2053 rdev->asic = &cayman_asic;
2056 rdev->has_uvd = true;
2059 rdev->asic = &trinity_asic;
2062 rdev->has_uvd = true;
2069 rdev->asic = &si_asic;
2071 if (rdev->family == CHIP_HAINAN)
2073 else if (rdev->family == CHIP_OLAND)
2077 if (rdev->family == CHIP_HAINAN)
2078 rdev->has_uvd = false;
2080 rdev->has_uvd = true;
2083 /* FIXME: not supported yet */
2087 if (rdev->flags & RADEON_IS_IGP) {
2088 rdev->asic->pm.get_memory_clock = NULL;
2089 rdev->asic->pm.set_memory_clock = NULL;