aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_asic.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-01-10 14:04:36 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2012-01-10 14:04:36 -0500
commit1a464cbb3d483f2f195b614cffa4aa1b910a0440 (patch)
treeaf57dee6436532dbb546b8670e9e1f6910d489b5 /drivers/gpu/drm/radeon/radeon_asic.c
parentdbe950f201a8edd353b0bd9079e8d536ee4ce37c (diff)
parent095f979a539245a46b9e5d600ec9c720b4d928e5 (diff)
Merge branch 'drm-core-next' of git://people.freedesktop.org/~airlied/linux
* 'drm-core-next' of git://people.freedesktop.org/~airlied/linux: (307 commits) drm/nouveau/pm: fix build with HWMON off gma500: silence gcc warnings in mid_get_vbt_data() drm/ttm: fix condition (and vs or) drm/radeon: double lock typo in radeon_vm_bo_rmv() drm/radeon: use after free in radeon_vm_bo_add() drm/sis|via: don't return stack garbage from free_mem ioctl drm/radeon/kms: remove pointless CS flags priority struct drm/radeon/kms: check if vm is supported in VA ioctl drm: introduce drm_can_sleep and use in intel/radeon drivers. (v2) radeon: Fix disabling PCI bus mastering on big endian hosts. ttm: fix agp since ttm tt rework agp: Fix multi-line warning message whitespace drm/ttm/dma: Fix accounting error when calling ttm_mem_global_free_page and don't try to free freed pages. drm/ttm/dma: Only call set_pages_array_wb when the page is not in WB pool. drm/radeon/kms: sync across multiple rings when doing bo moves v3 drm/radeon/kms: Add support for multi-ring sync in CS ioctl (v2) drm/radeon: GPU virtual memory support v22 drm: make DRM_UNLOCKED ioctls with their own mutex drm: no need to hold global mutex for static data drm/radeon/benchmark: common modes sweep ignores 640x480@32 ... Fix up trivial conflicts in radeon/evergreen.c and vmwgfx/vmwgfx_kms.c
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_asic.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.c197
1 files changed, 146 insertions, 51 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
index a2e1eae114ef..36a6192ce862 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.c
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
@@ -138,14 +138,18 @@ static struct radeon_asic r100_asic = {
138 .asic_reset = &r100_asic_reset, 138 .asic_reset = &r100_asic_reset,
139 .gart_tlb_flush = &r100_pci_gart_tlb_flush, 139 .gart_tlb_flush = &r100_pci_gart_tlb_flush,
140 .gart_set_page = &r100_pci_gart_set_page, 140 .gart_set_page = &r100_pci_gart_set_page,
141 .cp_commit = &r100_cp_commit,
142 .ring_start = &r100_ring_start, 141 .ring_start = &r100_ring_start,
143 .ring_test = &r100_ring_test, 142 .ring_test = &r100_ring_test,
144 .ring_ib_execute = &r100_ring_ib_execute, 143 .ring = {
144 [RADEON_RING_TYPE_GFX_INDEX] = {
145 .ib_execute = &r100_ring_ib_execute,
146 .emit_fence = &r100_fence_ring_emit,
147 .emit_semaphore = &r100_semaphore_ring_emit,
148 }
149 },
145 .irq_set = &r100_irq_set, 150 .irq_set = &r100_irq_set,
146 .irq_process = &r100_irq_process, 151 .irq_process = &r100_irq_process,
147 .get_vblank_counter = &r100_get_vblank_counter, 152 .get_vblank_counter = &r100_get_vblank_counter,
148 .fence_ring_emit = &r100_fence_ring_emit,
149 .cs_parse = &r100_cs_parse, 153 .cs_parse = &r100_cs_parse,
150 .copy_blit = &r100_copy_blit, 154 .copy_blit = &r100_copy_blit,
151 .copy_dma = NULL, 155 .copy_dma = NULL,
@@ -186,14 +190,18 @@ static struct radeon_asic r200_asic = {
186 .asic_reset = &r100_asic_reset, 190 .asic_reset = &r100_asic_reset,
187 .gart_tlb_flush = &r100_pci_gart_tlb_flush, 191 .gart_tlb_flush = &r100_pci_gart_tlb_flush,
188 .gart_set_page = &r100_pci_gart_set_page, 192 .gart_set_page = &r100_pci_gart_set_page,
189 .cp_commit = &r100_cp_commit,
190 .ring_start = &r100_ring_start, 193 .ring_start = &r100_ring_start,
191 .ring_test = &r100_ring_test, 194 .ring_test = &r100_ring_test,
192 .ring_ib_execute = &r100_ring_ib_execute, 195 .ring = {
196 [RADEON_RING_TYPE_GFX_INDEX] = {
197 .ib_execute = &r100_ring_ib_execute,
198 .emit_fence = &r100_fence_ring_emit,
199 .emit_semaphore = &r100_semaphore_ring_emit,
200 }
201 },
193 .irq_set = &r100_irq_set, 202 .irq_set = &r100_irq_set,
194 .irq_process = &r100_irq_process, 203 .irq_process = &r100_irq_process,
195 .get_vblank_counter = &r100_get_vblank_counter, 204 .get_vblank_counter = &r100_get_vblank_counter,
196 .fence_ring_emit = &r100_fence_ring_emit,
197 .cs_parse = &r100_cs_parse, 205 .cs_parse = &r100_cs_parse,
198 .copy_blit = &r100_copy_blit, 206 .copy_blit = &r100_copy_blit,
199 .copy_dma = &r200_copy_dma, 207 .copy_dma = &r200_copy_dma,
@@ -233,14 +241,18 @@ static struct radeon_asic r300_asic = {
233 .asic_reset = &r300_asic_reset, 241 .asic_reset = &r300_asic_reset,
234 .gart_tlb_flush = &r100_pci_gart_tlb_flush, 242 .gart_tlb_flush = &r100_pci_gart_tlb_flush,
235 .gart_set_page = &r100_pci_gart_set_page, 243 .gart_set_page = &r100_pci_gart_set_page,
236 .cp_commit = &r100_cp_commit,
237 .ring_start = &r300_ring_start, 244 .ring_start = &r300_ring_start,
238 .ring_test = &r100_ring_test, 245 .ring_test = &r100_ring_test,
239 .ring_ib_execute = &r100_ring_ib_execute, 246 .ring = {
247 [RADEON_RING_TYPE_GFX_INDEX] = {
248 .ib_execute = &r100_ring_ib_execute,
249 .emit_fence = &r300_fence_ring_emit,
250 .emit_semaphore = &r100_semaphore_ring_emit,
251 }
252 },
240 .irq_set = &r100_irq_set, 253 .irq_set = &r100_irq_set,
241 .irq_process = &r100_irq_process, 254 .irq_process = &r100_irq_process,
242 .get_vblank_counter = &r100_get_vblank_counter, 255 .get_vblank_counter = &r100_get_vblank_counter,
243 .fence_ring_emit = &r300_fence_ring_emit,
244 .cs_parse = &r300_cs_parse, 256 .cs_parse = &r300_cs_parse,
245 .copy_blit = &r100_copy_blit, 257 .copy_blit = &r100_copy_blit,
246 .copy_dma = &r200_copy_dma, 258 .copy_dma = &r200_copy_dma,
@@ -281,14 +293,18 @@ static struct radeon_asic r300_asic_pcie = {
281 .asic_reset = &r300_asic_reset, 293 .asic_reset = &r300_asic_reset,
282 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush, 294 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
283 .gart_set_page = &rv370_pcie_gart_set_page, 295 .gart_set_page = &rv370_pcie_gart_set_page,
284 .cp_commit = &r100_cp_commit,
285 .ring_start = &r300_ring_start, 296 .ring_start = &r300_ring_start,
286 .ring_test = &r100_ring_test, 297 .ring_test = &r100_ring_test,
287 .ring_ib_execute = &r100_ring_ib_execute, 298 .ring = {
299 [RADEON_RING_TYPE_GFX_INDEX] = {
300 .ib_execute = &r100_ring_ib_execute,
301 .emit_fence = &r300_fence_ring_emit,
302 .emit_semaphore = &r100_semaphore_ring_emit,
303 }
304 },
288 .irq_set = &r100_irq_set, 305 .irq_set = &r100_irq_set,
289 .irq_process = &r100_irq_process, 306 .irq_process = &r100_irq_process,
290 .get_vblank_counter = &r100_get_vblank_counter, 307 .get_vblank_counter = &r100_get_vblank_counter,
291 .fence_ring_emit = &r300_fence_ring_emit,
292 .cs_parse = &r300_cs_parse, 308 .cs_parse = &r300_cs_parse,
293 .copy_blit = &r100_copy_blit, 309 .copy_blit = &r100_copy_blit,
294 .copy_dma = &r200_copy_dma, 310 .copy_dma = &r200_copy_dma,
@@ -328,14 +344,18 @@ static struct radeon_asic r420_asic = {
328 .asic_reset = &r300_asic_reset, 344 .asic_reset = &r300_asic_reset,
329 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush, 345 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
330 .gart_set_page = &rv370_pcie_gart_set_page, 346 .gart_set_page = &rv370_pcie_gart_set_page,
331 .cp_commit = &r100_cp_commit,
332 .ring_start = &r300_ring_start, 347 .ring_start = &r300_ring_start,
333 .ring_test = &r100_ring_test, 348 .ring_test = &r100_ring_test,
334 .ring_ib_execute = &r100_ring_ib_execute, 349 .ring = {
350 [RADEON_RING_TYPE_GFX_INDEX] = {
351 .ib_execute = &r100_ring_ib_execute,
352 .emit_fence = &r300_fence_ring_emit,
353 .emit_semaphore = &r100_semaphore_ring_emit,
354 }
355 },
335 .irq_set = &r100_irq_set, 356 .irq_set = &r100_irq_set,
336 .irq_process = &r100_irq_process, 357 .irq_process = &r100_irq_process,
337 .get_vblank_counter = &r100_get_vblank_counter, 358 .get_vblank_counter = &r100_get_vblank_counter,
338 .fence_ring_emit = &r300_fence_ring_emit,
339 .cs_parse = &r300_cs_parse, 359 .cs_parse = &r300_cs_parse,
340 .copy_blit = &r100_copy_blit, 360 .copy_blit = &r100_copy_blit,
341 .copy_dma = &r200_copy_dma, 361 .copy_dma = &r200_copy_dma,
@@ -376,14 +396,18 @@ static struct radeon_asic rs400_asic = {
376 .asic_reset = &r300_asic_reset, 396 .asic_reset = &r300_asic_reset,
377 .gart_tlb_flush = &rs400_gart_tlb_flush, 397 .gart_tlb_flush = &rs400_gart_tlb_flush,
378 .gart_set_page = &rs400_gart_set_page, 398 .gart_set_page = &rs400_gart_set_page,
379 .cp_commit = &r100_cp_commit,
380 .ring_start = &r300_ring_start, 399 .ring_start = &r300_ring_start,
381 .ring_test = &r100_ring_test, 400 .ring_test = &r100_ring_test,
382 .ring_ib_execute = &r100_ring_ib_execute, 401 .ring = {
402 [RADEON_RING_TYPE_GFX_INDEX] = {
403 .ib_execute = &r100_ring_ib_execute,
404 .emit_fence = &r300_fence_ring_emit,
405 .emit_semaphore = &r100_semaphore_ring_emit,
406 }
407 },
383 .irq_set = &r100_irq_set, 408 .irq_set = &r100_irq_set,
384 .irq_process = &r100_irq_process, 409 .irq_process = &r100_irq_process,
385 .get_vblank_counter = &r100_get_vblank_counter, 410 .get_vblank_counter = &r100_get_vblank_counter,
386 .fence_ring_emit = &r300_fence_ring_emit,
387 .cs_parse = &r300_cs_parse, 411 .cs_parse = &r300_cs_parse,
388 .copy_blit = &r100_copy_blit, 412 .copy_blit = &r100_copy_blit,
389 .copy_dma = &r200_copy_dma, 413 .copy_dma = &r200_copy_dma,
@@ -424,14 +448,18 @@ static struct radeon_asic rs600_asic = {
424 .asic_reset = &rs600_asic_reset, 448 .asic_reset = &rs600_asic_reset,
425 .gart_tlb_flush = &rs600_gart_tlb_flush, 449 .gart_tlb_flush = &rs600_gart_tlb_flush,
426 .gart_set_page = &rs600_gart_set_page, 450 .gart_set_page = &rs600_gart_set_page,
427 .cp_commit = &r100_cp_commit,
428 .ring_start = &r300_ring_start, 451 .ring_start = &r300_ring_start,
429 .ring_test = &r100_ring_test, 452 .ring_test = &r100_ring_test,
430 .ring_ib_execute = &r100_ring_ib_execute, 453 .ring = {
454 [RADEON_RING_TYPE_GFX_INDEX] = {
455 .ib_execute = &r100_ring_ib_execute,
456 .emit_fence = &r300_fence_ring_emit,
457 .emit_semaphore = &r100_semaphore_ring_emit,
458 }
459 },
431 .irq_set = &rs600_irq_set, 460 .irq_set = &rs600_irq_set,
432 .irq_process = &rs600_irq_process, 461 .irq_process = &rs600_irq_process,
433 .get_vblank_counter = &rs600_get_vblank_counter, 462 .get_vblank_counter = &rs600_get_vblank_counter,
434 .fence_ring_emit = &r300_fence_ring_emit,
435 .cs_parse = &r300_cs_parse, 463 .cs_parse = &r300_cs_parse,
436 .copy_blit = &r100_copy_blit, 464 .copy_blit = &r100_copy_blit,
437 .copy_dma = &r200_copy_dma, 465 .copy_dma = &r200_copy_dma,
@@ -472,14 +500,18 @@ static struct radeon_asic rs690_asic = {
472 .asic_reset = &rs600_asic_reset, 500 .asic_reset = &rs600_asic_reset,
473 .gart_tlb_flush = &rs400_gart_tlb_flush, 501 .gart_tlb_flush = &rs400_gart_tlb_flush,
474 .gart_set_page = &rs400_gart_set_page, 502 .gart_set_page = &rs400_gart_set_page,
475 .cp_commit = &r100_cp_commit,
476 .ring_start = &r300_ring_start, 503 .ring_start = &r300_ring_start,
477 .ring_test = &r100_ring_test, 504 .ring_test = &r100_ring_test,
478 .ring_ib_execute = &r100_ring_ib_execute, 505 .ring = {
506 [RADEON_RING_TYPE_GFX_INDEX] = {
507 .ib_execute = &r100_ring_ib_execute,
508 .emit_fence = &r300_fence_ring_emit,
509 .emit_semaphore = &r100_semaphore_ring_emit,
510 }
511 },
479 .irq_set = &rs600_irq_set, 512 .irq_set = &rs600_irq_set,
480 .irq_process = &rs600_irq_process, 513 .irq_process = &rs600_irq_process,
481 .get_vblank_counter = &rs600_get_vblank_counter, 514 .get_vblank_counter = &rs600_get_vblank_counter,
482 .fence_ring_emit = &r300_fence_ring_emit,
483 .cs_parse = &r300_cs_parse, 515 .cs_parse = &r300_cs_parse,
484 .copy_blit = &r100_copy_blit, 516 .copy_blit = &r100_copy_blit,
485 .copy_dma = &r200_copy_dma, 517 .copy_dma = &r200_copy_dma,
@@ -520,14 +552,18 @@ static struct radeon_asic rv515_asic = {
520 .asic_reset = &rs600_asic_reset, 552 .asic_reset = &rs600_asic_reset,
521 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush, 553 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
522 .gart_set_page = &rv370_pcie_gart_set_page, 554 .gart_set_page = &rv370_pcie_gart_set_page,
523 .cp_commit = &r100_cp_commit,
524 .ring_start = &rv515_ring_start, 555 .ring_start = &rv515_ring_start,
525 .ring_test = &r100_ring_test, 556 .ring_test = &r100_ring_test,
526 .ring_ib_execute = &r100_ring_ib_execute, 557 .ring = {
558 [RADEON_RING_TYPE_GFX_INDEX] = {
559 .ib_execute = &r100_ring_ib_execute,
560 .emit_fence = &r300_fence_ring_emit,
561 .emit_semaphore = &r100_semaphore_ring_emit,
562 }
563 },
527 .irq_set = &rs600_irq_set, 564 .irq_set = &rs600_irq_set,
528 .irq_process = &rs600_irq_process, 565 .irq_process = &rs600_irq_process,
529 .get_vblank_counter = &rs600_get_vblank_counter, 566 .get_vblank_counter = &rs600_get_vblank_counter,
530 .fence_ring_emit = &r300_fence_ring_emit,
531 .cs_parse = &r300_cs_parse, 567 .cs_parse = &r300_cs_parse,
532 .copy_blit = &r100_copy_blit, 568 .copy_blit = &r100_copy_blit,
533 .copy_dma = &r200_copy_dma, 569 .copy_dma = &r200_copy_dma,
@@ -568,14 +604,18 @@ static struct radeon_asic r520_asic = {
568 .asic_reset = &rs600_asic_reset, 604 .asic_reset = &rs600_asic_reset,
569 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush, 605 .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
570 .gart_set_page = &rv370_pcie_gart_set_page, 606 .gart_set_page = &rv370_pcie_gart_set_page,
571 .cp_commit = &r100_cp_commit,
572 .ring_start = &rv515_ring_start, 607 .ring_start = &rv515_ring_start,
573 .ring_test = &r100_ring_test, 608 .ring_test = &r100_ring_test,
574 .ring_ib_execute = &r100_ring_ib_execute, 609 .ring = {
610 [RADEON_RING_TYPE_GFX_INDEX] = {
611 .ib_execute = &r100_ring_ib_execute,
612 .emit_fence = &r300_fence_ring_emit,
613 .emit_semaphore = &r100_semaphore_ring_emit,
614 }
615 },
575 .irq_set = &rs600_irq_set, 616 .irq_set = &rs600_irq_set,
576 .irq_process = &rs600_irq_process, 617 .irq_process = &rs600_irq_process,
577 .get_vblank_counter = &rs600_get_vblank_counter, 618 .get_vblank_counter = &rs600_get_vblank_counter,
578 .fence_ring_emit = &r300_fence_ring_emit,
579 .cs_parse = &r300_cs_parse, 619 .cs_parse = &r300_cs_parse,
580 .copy_blit = &r100_copy_blit, 620 .copy_blit = &r100_copy_blit,
581 .copy_dma = &r200_copy_dma, 621 .copy_dma = &r200_copy_dma,
@@ -611,18 +651,22 @@ static struct radeon_asic r600_asic = {
611 .fini = &r600_fini, 651 .fini = &r600_fini,
612 .suspend = &r600_suspend, 652 .suspend = &r600_suspend,
613 .resume = &r600_resume, 653 .resume = &r600_resume,
614 .cp_commit = &r600_cp_commit,
615 .vga_set_state = &r600_vga_set_state, 654 .vga_set_state = &r600_vga_set_state,
616 .gpu_is_lockup = &r600_gpu_is_lockup, 655 .gpu_is_lockup = &r600_gpu_is_lockup,
617 .asic_reset = &r600_asic_reset, 656 .asic_reset = &r600_asic_reset,
618 .gart_tlb_flush = &r600_pcie_gart_tlb_flush, 657 .gart_tlb_flush = &r600_pcie_gart_tlb_flush,
619 .gart_set_page = &rs600_gart_set_page, 658 .gart_set_page = &rs600_gart_set_page,
620 .ring_test = &r600_ring_test, 659 .ring_test = &r600_ring_test,
621 .ring_ib_execute = &r600_ring_ib_execute, 660 .ring = {
661 [RADEON_RING_TYPE_GFX_INDEX] = {
662 .ib_execute = &r600_ring_ib_execute,
663 .emit_fence = &r600_fence_ring_emit,
664 .emit_semaphore = &r600_semaphore_ring_emit,
665 }
666 },
622 .irq_set = &r600_irq_set, 667 .irq_set = &r600_irq_set,
623 .irq_process = &r600_irq_process, 668 .irq_process = &r600_irq_process,
624 .get_vblank_counter = &rs600_get_vblank_counter, 669 .get_vblank_counter = &rs600_get_vblank_counter,
625 .fence_ring_emit = &r600_fence_ring_emit,
626 .cs_parse = &r600_cs_parse, 670 .cs_parse = &r600_cs_parse,
627 .copy_blit = &r600_copy_blit, 671 .copy_blit = &r600_copy_blit,
628 .copy_dma = NULL, 672 .copy_dma = NULL,
@@ -658,18 +702,22 @@ static struct radeon_asic rs780_asic = {
658 .fini = &r600_fini, 702 .fini = &r600_fini,
659 .suspend = &r600_suspend, 703 .suspend = &r600_suspend,
660 .resume = &r600_resume, 704 .resume = &r600_resume,
661 .cp_commit = &r600_cp_commit,
662 .gpu_is_lockup = &r600_gpu_is_lockup, 705 .gpu_is_lockup = &r600_gpu_is_lockup,
663 .vga_set_state = &r600_vga_set_state, 706 .vga_set_state = &r600_vga_set_state,
664 .asic_reset = &r600_asic_reset, 707 .asic_reset = &r600_asic_reset,
665 .gart_tlb_flush = &r600_pcie_gart_tlb_flush, 708 .gart_tlb_flush = &r600_pcie_gart_tlb_flush,
666 .gart_set_page = &rs600_gart_set_page, 709 .gart_set_page = &rs600_gart_set_page,
667 .ring_test = &r600_ring_test, 710 .ring_test = &r600_ring_test,
668 .ring_ib_execute = &r600_ring_ib_execute, 711 .ring = {
712 [RADEON_RING_TYPE_GFX_INDEX] = {
713 .ib_execute = &r600_ring_ib_execute,
714 .emit_fence = &r600_fence_ring_emit,
715 .emit_semaphore = &r600_semaphore_ring_emit,
716 }
717 },
669 .irq_set = &r600_irq_set, 718 .irq_set = &r600_irq_set,
670 .irq_process = &r600_irq_process, 719 .irq_process = &r600_irq_process,
671 .get_vblank_counter = &rs600_get_vblank_counter, 720 .get_vblank_counter = &rs600_get_vblank_counter,
672 .fence_ring_emit = &r600_fence_ring_emit,
673 .cs_parse = &r600_cs_parse, 721 .cs_parse = &r600_cs_parse,
674 .copy_blit = &r600_copy_blit, 722 .copy_blit = &r600_copy_blit,
675 .copy_dma = NULL, 723 .copy_dma = NULL,
@@ -705,18 +753,22 @@ static struct radeon_asic rv770_asic = {
705 .fini = &rv770_fini, 753 .fini = &rv770_fini,
706 .suspend = &rv770_suspend, 754 .suspend = &rv770_suspend,
707 .resume = &rv770_resume, 755 .resume = &rv770_resume,
708 .cp_commit = &r600_cp_commit,
709 .asic_reset = &r600_asic_reset, 756 .asic_reset = &r600_asic_reset,
710 .gpu_is_lockup = &r600_gpu_is_lockup, 757 .gpu_is_lockup = &r600_gpu_is_lockup,
711 .vga_set_state = &r600_vga_set_state, 758 .vga_set_state = &r600_vga_set_state,
712 .gart_tlb_flush = &r600_pcie_gart_tlb_flush, 759 .gart_tlb_flush = &r600_pcie_gart_tlb_flush,
713 .gart_set_page = &rs600_gart_set_page, 760 .gart_set_page = &rs600_gart_set_page,
714 .ring_test = &r600_ring_test, 761 .ring_test = &r600_ring_test,
715 .ring_ib_execute = &r600_ring_ib_execute, 762 .ring = {
763 [RADEON_RING_TYPE_GFX_INDEX] = {
764 .ib_execute = &r600_ring_ib_execute,
765 .emit_fence = &r600_fence_ring_emit,
766 .emit_semaphore = &r600_semaphore_ring_emit,
767 }
768 },
716 .irq_set = &r600_irq_set, 769 .irq_set = &r600_irq_set,
717 .irq_process = &r600_irq_process, 770 .irq_process = &r600_irq_process,
718 .get_vblank_counter = &rs600_get_vblank_counter, 771 .get_vblank_counter = &rs600_get_vblank_counter,
719 .fence_ring_emit = &r600_fence_ring_emit,
720 .cs_parse = &r600_cs_parse, 772 .cs_parse = &r600_cs_parse,
721 .copy_blit = &r600_copy_blit, 773 .copy_blit = &r600_copy_blit,
722 .copy_dma = NULL, 774 .copy_dma = NULL,
@@ -752,18 +804,22 @@ static struct radeon_asic evergreen_asic = {
752 .fini = &evergreen_fini, 804 .fini = &evergreen_fini,
753 .suspend = &evergreen_suspend, 805 .suspend = &evergreen_suspend,
754 .resume = &evergreen_resume, 806 .resume = &evergreen_resume,
755 .cp_commit = &r600_cp_commit,
756 .gpu_is_lockup = &evergreen_gpu_is_lockup, 807 .gpu_is_lockup = &evergreen_gpu_is_lockup,
757 .asic_reset = &evergreen_asic_reset, 808 .asic_reset = &evergreen_asic_reset,
758 .vga_set_state = &r600_vga_set_state, 809 .vga_set_state = &r600_vga_set_state,
759 .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush, 810 .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
760 .gart_set_page = &rs600_gart_set_page, 811 .gart_set_page = &rs600_gart_set_page,
761 .ring_test = &r600_ring_test, 812 .ring_test = &r600_ring_test,
762 .ring_ib_execute = &evergreen_ring_ib_execute, 813 .ring = {
814 [RADEON_RING_TYPE_GFX_INDEX] = {
815 .ib_execute = &evergreen_ring_ib_execute,
816 .emit_fence = &r600_fence_ring_emit,
817 .emit_semaphore = &r600_semaphore_ring_emit,
818 }
819 },
763 .irq_set = &evergreen_irq_set, 820 .irq_set = &evergreen_irq_set,
764 .irq_process = &evergreen_irq_process, 821 .irq_process = &evergreen_irq_process,
765 .get_vblank_counter = &evergreen_get_vblank_counter, 822 .get_vblank_counter = &evergreen_get_vblank_counter,
766 .fence_ring_emit = &r600_fence_ring_emit,
767 .cs_parse = &evergreen_cs_parse, 823 .cs_parse = &evergreen_cs_parse,
768 .copy_blit = &r600_copy_blit, 824 .copy_blit = &r600_copy_blit,
769 .copy_dma = NULL, 825 .copy_dma = NULL,
@@ -799,18 +855,22 @@ static struct radeon_asic sumo_asic = {
799 .fini = &evergreen_fini, 855 .fini = &evergreen_fini,
800 .suspend = &evergreen_suspend, 856 .suspend = &evergreen_suspend,
801 .resume = &evergreen_resume, 857 .resume = &evergreen_resume,
802 .cp_commit = &r600_cp_commit,
803 .gpu_is_lockup = &evergreen_gpu_is_lockup, 858 .gpu_is_lockup = &evergreen_gpu_is_lockup,
804 .asic_reset = &evergreen_asic_reset, 859 .asic_reset = &evergreen_asic_reset,
805 .vga_set_state = &r600_vga_set_state, 860 .vga_set_state = &r600_vga_set_state,
806 .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush, 861 .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
807 .gart_set_page = &rs600_gart_set_page, 862 .gart_set_page = &rs600_gart_set_page,
808 .ring_test = &r600_ring_test, 863 .ring_test = &r600_ring_test,
809 .ring_ib_execute = &evergreen_ring_ib_execute, 864 .ring = {
865 [RADEON_RING_TYPE_GFX_INDEX] = {
866 .ib_execute = &evergreen_ring_ib_execute,
867 .emit_fence = &r600_fence_ring_emit,
868 .emit_semaphore = &r600_semaphore_ring_emit,
869 }
870 },
810 .irq_set = &evergreen_irq_set, 871 .irq_set = &evergreen_irq_set,
811 .irq_process = &evergreen_irq_process, 872 .irq_process = &evergreen_irq_process,
812 .get_vblank_counter = &evergreen_get_vblank_counter, 873 .get_vblank_counter = &evergreen_get_vblank_counter,
813 .fence_ring_emit = &r600_fence_ring_emit,
814 .cs_parse = &evergreen_cs_parse, 874 .cs_parse = &evergreen_cs_parse,
815 .copy_blit = &r600_copy_blit, 875 .copy_blit = &r600_copy_blit,
816 .copy_dma = NULL, 876 .copy_dma = NULL,
@@ -846,18 +906,22 @@ static struct radeon_asic btc_asic = {
846 .fini = &evergreen_fini, 906 .fini = &evergreen_fini,
847 .suspend = &evergreen_suspend, 907 .suspend = &evergreen_suspend,
848 .resume = &evergreen_resume, 908 .resume = &evergreen_resume,
849 .cp_commit = &r600_cp_commit,
850 .gpu_is_lockup = &evergreen_gpu_is_lockup, 909 .gpu_is_lockup = &evergreen_gpu_is_lockup,
851 .asic_reset = &evergreen_asic_reset, 910 .asic_reset = &evergreen_asic_reset,
852 .vga_set_state = &r600_vga_set_state, 911 .vga_set_state = &r600_vga_set_state,
853 .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush, 912 .gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
854 .gart_set_page = &rs600_gart_set_page, 913 .gart_set_page = &rs600_gart_set_page,
855 .ring_test = &r600_ring_test, 914 .ring_test = &r600_ring_test,
856 .ring_ib_execute = &evergreen_ring_ib_execute, 915 .ring = {
916 [RADEON_RING_TYPE_GFX_INDEX] = {
917 .ib_execute = &evergreen_ring_ib_execute,
918 .emit_fence = &r600_fence_ring_emit,
919 .emit_semaphore = &r600_semaphore_ring_emit,
920 }
921 },
857 .irq_set = &evergreen_irq_set, 922 .irq_set = &evergreen_irq_set,
858 .irq_process = &evergreen_irq_process, 923 .irq_process = &evergreen_irq_process,
859 .get_vblank_counter = &evergreen_get_vblank_counter, 924 .get_vblank_counter = &evergreen_get_vblank_counter,
860 .fence_ring_emit = &r600_fence_ring_emit,
861 .cs_parse = &evergreen_cs_parse, 925 .cs_parse = &evergreen_cs_parse,
862 .copy_blit = &r600_copy_blit, 926 .copy_blit = &r600_copy_blit,
863 .copy_dma = NULL, 927 .copy_dma = NULL,
@@ -888,23 +952,50 @@ static struct radeon_asic btc_asic = {
888 .post_page_flip = &evergreen_post_page_flip, 952 .post_page_flip = &evergreen_post_page_flip,
889}; 953};
890 954
955static const struct radeon_vm_funcs cayman_vm_funcs = {
956 .init = &cayman_vm_init,
957 .fini = &cayman_vm_fini,
958 .bind = &cayman_vm_bind,
959 .unbind = &cayman_vm_unbind,
960 .tlb_flush = &cayman_vm_tlb_flush,
961 .page_flags = &cayman_vm_page_flags,
962 .set_page = &cayman_vm_set_page,
963};
964
891static struct radeon_asic cayman_asic = { 965static struct radeon_asic cayman_asic = {
892 .init = &cayman_init, 966 .init = &cayman_init,
893 .fini = &cayman_fini, 967 .fini = &cayman_fini,
894 .suspend = &cayman_suspend, 968 .suspend = &cayman_suspend,
895 .resume = &cayman_resume, 969 .resume = &cayman_resume,
896 .cp_commit = &r600_cp_commit,
897 .gpu_is_lockup = &cayman_gpu_is_lockup, 970 .gpu_is_lockup = &cayman_gpu_is_lockup,
898 .asic_reset = &cayman_asic_reset, 971 .asic_reset = &cayman_asic_reset,
899 .vga_set_state = &r600_vga_set_state, 972 .vga_set_state = &r600_vga_set_state,
900 .gart_tlb_flush = &cayman_pcie_gart_tlb_flush, 973 .gart_tlb_flush = &cayman_pcie_gart_tlb_flush,
901 .gart_set_page = &rs600_gart_set_page, 974 .gart_set_page = &rs600_gart_set_page,
902 .ring_test = &r600_ring_test, 975 .ring_test = &r600_ring_test,
903 .ring_ib_execute = &evergreen_ring_ib_execute, 976 .ring = {
977 [RADEON_RING_TYPE_GFX_INDEX] = {
978 .ib_execute = &cayman_ring_ib_execute,
979 .ib_parse = &evergreen_ib_parse,
980 .emit_fence = &cayman_fence_ring_emit,
981 .emit_semaphore = &r600_semaphore_ring_emit,
982 },
983 [CAYMAN_RING_TYPE_CP1_INDEX] = {
984 .ib_execute = &cayman_ring_ib_execute,
985 .ib_parse = &evergreen_ib_parse,
986 .emit_fence = &cayman_fence_ring_emit,
987 .emit_semaphore = &r600_semaphore_ring_emit,
988 },
989 [CAYMAN_RING_TYPE_CP2_INDEX] = {
990 .ib_execute = &cayman_ring_ib_execute,
991 .ib_parse = &evergreen_ib_parse,
992 .emit_fence = &cayman_fence_ring_emit,
993 .emit_semaphore = &r600_semaphore_ring_emit,
994 }
995 },
904 .irq_set = &evergreen_irq_set, 996 .irq_set = &evergreen_irq_set,
905 .irq_process = &evergreen_irq_process, 997 .irq_process = &evergreen_irq_process,
906 .get_vblank_counter = &evergreen_get_vblank_counter, 998 .get_vblank_counter = &evergreen_get_vblank_counter,
907 .fence_ring_emit = &r600_fence_ring_emit,
908 .cs_parse = &evergreen_cs_parse, 999 .cs_parse = &evergreen_cs_parse,
909 .copy_blit = &r600_copy_blit, 1000 .copy_blit = &r600_copy_blit,
910 .copy_dma = NULL, 1001 .copy_dma = NULL,
@@ -945,6 +1036,9 @@ int radeon_asic_init(struct radeon_device *rdev)
945 else 1036 else
946 rdev->num_crtc = 2; 1037 rdev->num_crtc = 2;
947 1038
1039 /* set the ring used for bo copies */
1040 rdev->copy_ring = RADEON_RING_TYPE_GFX_INDEX;
1041
948 switch (rdev->family) { 1042 switch (rdev->family) {
949 case CHIP_R100: 1043 case CHIP_R100:
950 case CHIP_RV100: 1044 case CHIP_RV100:
@@ -1050,6 +1144,7 @@ int radeon_asic_init(struct radeon_device *rdev)
1050 rdev->asic = &cayman_asic; 1144 rdev->asic = &cayman_asic;
1051 /* set num crtcs */ 1145 /* set num crtcs */
1052 rdev->num_crtc = 6; 1146 rdev->num_crtc = 6;
1147 rdev->vm_manager.funcs = &cayman_vm_funcs;
1053 break; 1148 break;
1054 default: 1149 default:
1055 /* FIXME: not supported yet */ 1150 /* FIXME: not supported yet */