aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2018-02-22 02:35:11 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-02-26 23:09:36 -0500
commit92e71b0676447fff40c1e747b2585a9d11c5fca2 (patch)
tree351d0a81482fb3a97543f90c74069aad35739b74 /drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
parenta02497b73218f10f237d98fb10d34d0baed607a0 (diff)
drm/amdgpu: use the TTM dummy page instead of allocating one
We have a global dummy page in TTM, use that one instead of allocating a new one. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index 008eaee57114..137145dd14a9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -68,17 +68,15 @@
68 */ 68 */
69static int amdgpu_gart_dummy_page_init(struct amdgpu_device *adev) 69static int amdgpu_gart_dummy_page_init(struct amdgpu_device *adev)
70{ 70{
71 if (adev->dummy_page.page) 71 struct page *dummy_page = adev->mman.bdev.glob->dummy_read_page;
72
73 if (adev->dummy_page_addr)
72 return 0; 74 return 0;
73 adev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO); 75 adev->dummy_page_addr = pci_map_page(adev->pdev, dummy_page, 0,
74 if (adev->dummy_page.page == NULL) 76 PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
75 return -ENOMEM; 77 if (pci_dma_mapping_error(adev->pdev, adev->dummy_page_addr)) {
76 adev->dummy_page.addr = pci_map_page(adev->pdev, adev->dummy_page.page,
77 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
78 if (pci_dma_mapping_error(adev->pdev, adev->dummy_page.addr)) {
79 dev_err(&adev->pdev->dev, "Failed to DMA MAP the dummy page\n"); 78 dev_err(&adev->pdev->dev, "Failed to DMA MAP the dummy page\n");
80 __free_page(adev->dummy_page.page); 79 adev->dummy_page_addr = 0;
81 adev->dummy_page.page = NULL;
82 return -ENOMEM; 80 return -ENOMEM;
83 } 81 }
84 return 0; 82 return 0;
@@ -93,12 +91,11 @@ static int amdgpu_gart_dummy_page_init(struct amdgpu_device *adev)
93 */ 91 */
94static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev) 92static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev)
95{ 93{
96 if (adev->dummy_page.page == NULL) 94 if (!adev->dummy_page_addr)
97 return; 95 return;
98 pci_unmap_page(adev->pdev, adev->dummy_page.addr, 96 pci_unmap_page(adev->pdev, adev->dummy_page_addr,
99 PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); 97 PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
100 __free_page(adev->dummy_page.page); 98 adev->dummy_page_addr = 0;
101 adev->dummy_page.page = NULL;
102} 99}
103 100
104/** 101/**
@@ -236,7 +233,7 @@ int amdgpu_gart_unbind(struct amdgpu_device *adev, uint64_t offset,
236#ifdef CONFIG_DRM_AMDGPU_GART_DEBUGFS 233#ifdef CONFIG_DRM_AMDGPU_GART_DEBUGFS
237 adev->gart.pages[p] = NULL; 234 adev->gart.pages[p] = NULL;
238#endif 235#endif
239 page_base = adev->dummy_page.addr; 236 page_base = adev->dummy_page_addr;
240 if (!adev->gart.ptr) 237 if (!adev->gart.ptr)
241 continue; 238 continue;
242 239
@@ -347,7 +344,7 @@ int amdgpu_gart_init(struct amdgpu_device *adev)
347{ 344{
348 int r; 345 int r;
349 346
350 if (adev->dummy_page.page) 347 if (adev->dummy_page_addr)
351 return 0; 348 return 0;
352 349
353 /* We need PAGE_SIZE >= AMDGPU_GPU_PAGE_SIZE */ 350 /* We need PAGE_SIZE >= AMDGPU_GPU_PAGE_SIZE */