aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2017-12-15 16:28:33 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-12-18 10:59:52 -0500
commit55e0037aab6503453eef663eded60e530896eaef (patch)
tree6270773bc0fa441060a0233fe594183c2bd4b235 /drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
parent39c640c086ad12005e88cf6f9de03c32111ef081 (diff)
drm/amdgpu: move dummy page functions to amdgpu_gart.c
It's the only place they are used. Acked-by: Christian König <christian.koenig@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.c49
1 files changed, 47 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index 1f51897acc5b..0a4f34afaaaa 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -57,6 +57,51 @@
57 */ 57 */
58 58
59/** 59/**
60 * amdgpu_dummy_page_init - init dummy page used by the driver
61 *
62 * @adev: amdgpu_device pointer
63 *
64 * Allocate the dummy page used by the driver (all asics).
65 * This dummy page is used by the driver as a filler for gart entries
66 * when pages are taken out of the GART
67 * Returns 0 on sucess, -ENOMEM on failure.
68 */
69static int amdgpu_gart_dummy_page_init(struct amdgpu_device *adev)
70{
71 if (adev->dummy_page.page)
72 return 0;
73 adev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO);
74 if (adev->dummy_page.page == NULL)
75 return -ENOMEM;
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");
80 __free_page(adev->dummy_page.page);
81 adev->dummy_page.page = NULL;
82 return -ENOMEM;
83 }
84 return 0;
85}
86
87/**
88 * amdgpu_dummy_page_fini - free dummy page used by the driver
89 *
90 * @adev: amdgpu_device pointer
91 *
92 * Frees the dummy page used by the driver (all asics).
93 */
94static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev)
95{
96 if (adev->dummy_page.page == NULL)
97 return;
98 pci_unmap_page(adev->pdev, adev->dummy_page.addr,
99 PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
100 __free_page(adev->dummy_page.page);
101 adev->dummy_page.page = NULL;
102}
103
104/**
60 * amdgpu_gart_table_vram_alloc - allocate vram for gart page table 105 * amdgpu_gart_table_vram_alloc - allocate vram for gart page table
61 * 106 *
62 * @adev: amdgpu_device pointer 107 * @adev: amdgpu_device pointer
@@ -308,7 +353,7 @@ int amdgpu_gart_init(struct amdgpu_device *adev)
308 DRM_ERROR("Page size is smaller than GPU page size!\n"); 353 DRM_ERROR("Page size is smaller than GPU page size!\n");
309 return -EINVAL; 354 return -EINVAL;
310 } 355 }
311 r = amdgpu_dummy_page_init(adev); 356 r = amdgpu_gart_dummy_page_init(adev);
312 if (r) 357 if (r)
313 return r; 358 return r;
314 /* Compute table size */ 359 /* Compute table size */
@@ -340,5 +385,5 @@ void amdgpu_gart_fini(struct amdgpu_device *adev)
340 vfree(adev->gart.pages); 385 vfree(adev->gart.pages);
341 adev->gart.pages = NULL; 386 adev->gart.pages = NULL;
342#endif 387#endif
343 amdgpu_dummy_page_fini(adev); 388 amdgpu_gart_dummy_page_fini(adev);
344} 389}