aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
diff options
context:
space:
mode:
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 */