diff options
author | Dave Airlie <airlied@redhat.com> | 2011-02-22 21:06:39 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-02-22 21:06:39 -0500 |
commit | de1e7cd63a8ec26a3bd3740708cfd72dd76509e2 (patch) | |
tree | 52bc82a71f34e92895d22821543a2be011834505 /drivers/gpu/drm/radeon/radeon_ttm.c | |
parent | 7811bddb6654337fd85837ef14c1a96a0c264745 (diff) | |
parent | 5a893fc28f0393adb7c885a871b8c59e623fd528 (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.c | 9 |
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 { | |||
655 | static int radeon_ttm_backend_populate(struct ttm_backend *backend, | 657 | static 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); |