aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_ttm.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2011-02-22 21:06:39 -0500
committerDave Airlie <airlied@redhat.com>2011-02-22 21:06:39 -0500
commitde1e7cd63a8ec26a3bd3740708cfd72dd76509e2 (patch)
tree52bc82a71f34e92895d22821543a2be011834505 /drivers/gpu/drm/radeon/radeon_ttm.c
parent7811bddb6654337fd85837ef14c1a96a0c264745 (diff)
parent5a893fc28f0393adb7c885a871b8c59e623fd528 (diff)
Merge branch 'stable/ttm.pci-api.v5' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen into drm-next
* 'stable/ttm.pci-api.v5' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen: ttm: Include the 'struct dev' when using the DMA API. nouveau/ttm/PCIe: Use dma_addr if TTM has set it. radeon/ttm/PCIe: Use dma_addr if TTM has set it. ttm: Expand (*populate) to support an array of DMA addresses. ttm: Utilize the DMA API for pages that have TTM_PAGE_FLAG_DMA32 set. ttm: Introduce a placeholder for DMA (bus) addresses.
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_ttm.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_ttm.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index 1272e4b6a1d4..c345e899e881 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -513,6 +513,7 @@ int radeon_ttm_init(struct radeon_device *rdev)
513 if (r) { 513 if (r) {
514 return r; 514 return r;
515 } 515 }
516 rdev->mman.bdev.dev = rdev->dev;
516 /* No others user of address space so set it to 0 */ 517 /* No others user of address space so set it to 0 */
517 r = ttm_bo_device_init(&rdev->mman.bdev, 518 r = ttm_bo_device_init(&rdev->mman.bdev,
518 rdev->mman.bo_global_ref.ref.object, 519 rdev->mman.bo_global_ref.ref.object,
@@ -647,6 +648,7 @@ struct radeon_ttm_backend {
647 unsigned long num_pages; 648 unsigned long num_pages;
648 struct page **pages; 649 struct page **pages;
649 struct page *dummy_read_page; 650 struct page *dummy_read_page;
651 dma_addr_t *dma_addrs;
650 bool populated; 652 bool populated;
651 bool bound; 653 bool bound;
652 unsigned offset; 654 unsigned offset;
@@ -655,12 +657,14 @@ struct radeon_ttm_backend {
655static int radeon_ttm_backend_populate(struct ttm_backend *backend, 657static int radeon_ttm_backend_populate(struct ttm_backend *backend,
656 unsigned long num_pages, 658 unsigned long num_pages,
657 struct page **pages, 659 struct page **pages,
658 struct page *dummy_read_page) 660 struct page *dummy_read_page,
661 dma_addr_t *dma_addrs)
659{ 662{
660 struct radeon_ttm_backend *gtt; 663 struct radeon_ttm_backend *gtt;
661 664
662 gtt = container_of(backend, struct radeon_ttm_backend, backend); 665 gtt = container_of(backend, struct radeon_ttm_backend, backend);
663 gtt->pages = pages; 666 gtt->pages = pages;
667 gtt->dma_addrs = dma_addrs;
664 gtt->num_pages = num_pages; 668 gtt->num_pages = num_pages;
665 gtt->dummy_read_page = dummy_read_page; 669 gtt->dummy_read_page = dummy_read_page;
666 gtt->populated = true; 670 gtt->populated = true;
@@ -673,6 +677,7 @@ static void radeon_ttm_backend_clear(struct ttm_backend *backend)
673 677
674 gtt = container_of(backend, struct radeon_ttm_backend, backend); 678 gtt = container_of(backend, struct radeon_ttm_backend, backend);
675 gtt->pages = NULL; 679 gtt->pages = NULL;
680 gtt->dma_addrs = NULL;
676 gtt->num_pages = 0; 681 gtt->num_pages = 0;
677 gtt->dummy_read_page = NULL; 682 gtt->dummy_read_page = NULL;
678 gtt->populated = false; 683 gtt->populated = false;
@@ -693,7 +698,7 @@ static int radeon_ttm_backend_bind(struct ttm_backend *backend,
693 gtt->num_pages, bo_mem, backend); 698 gtt->num_pages, bo_mem, backend);
694 } 699 }
695 r = radeon_gart_bind(gtt->rdev, gtt->offset, 700 r = radeon_gart_bind(gtt->rdev, gtt->offset,
696 gtt->num_pages, gtt->pages); 701 gtt->num_pages, gtt->pages, gtt->dma_addrs);
697 if (r) { 702 if (r) {
698 DRM_ERROR("failed to bind %lu pages at 0x%08X\n", 703 DRM_ERROR("failed to bind %lu pages at 0x%08X\n",
699 gtt->num_pages, gtt->offset); 704 gtt->num_pages, gtt->offset);