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.c54
1 files changed, 27 insertions, 27 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index 0a4f34afaaaa..cf0f186c6092 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/**
@@ -116,11 +113,12 @@ int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev)
116 int r; 113 int r;
117 114
118 if (adev->gart.robj == NULL) { 115 if (adev->gart.robj == NULL) {
119 r = amdgpu_bo_create(adev, adev->gart.table_size, 116 r = amdgpu_bo_create(adev, adev->gart.table_size, PAGE_SIZE,
120 PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM, 117 AMDGPU_GEM_DOMAIN_VRAM,
121 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | 118 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
122 AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS, 119 AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
123 NULL, NULL, 0, &adev->gart.robj); 120 ttm_bo_type_kernel, NULL,
121 &adev->gart.robj);
124 if (r) { 122 if (r) {
125 return r; 123 return r;
126 } 124 }
@@ -236,18 +234,19 @@ int amdgpu_gart_unbind(struct amdgpu_device *adev, uint64_t offset,
236#ifdef CONFIG_DRM_AMDGPU_GART_DEBUGFS 234#ifdef CONFIG_DRM_AMDGPU_GART_DEBUGFS
237 adev->gart.pages[p] = NULL; 235 adev->gart.pages[p] = NULL;
238#endif 236#endif
239 page_base = adev->dummy_page.addr; 237 page_base = adev->dummy_page_addr;
240 if (!adev->gart.ptr) 238 if (!adev->gart.ptr)
241 continue; 239 continue;
242 240
243 for (j = 0; j < (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE); j++, t++) { 241 for (j = 0; j < (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE); j++, t++) {
244 amdgpu_gart_set_pte_pde(adev, adev->gart.ptr, 242 amdgpu_gmc_set_pte_pde(adev, adev->gart.ptr,
245 t, page_base, flags); 243 t, page_base, flags);
246 page_base += AMDGPU_GPU_PAGE_SIZE; 244 page_base += AMDGPU_GPU_PAGE_SIZE;
247 } 245 }
248 } 246 }
249 mb(); 247 mb();
250 amdgpu_gart_flush_gpu_tlb(adev, 0); 248 amdgpu_asic_flush_hdp(adev, NULL);
249 amdgpu_gmc_flush_gpu_tlb(adev, 0);
251 return 0; 250 return 0;
252} 251}
253 252
@@ -279,7 +278,7 @@ int amdgpu_gart_map(struct amdgpu_device *adev, uint64_t offset,
279 for (i = 0; i < pages; i++) { 278 for (i = 0; i < pages; i++) {
280 page_base = dma_addr[i]; 279 page_base = dma_addr[i];
281 for (j = 0; j < (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE); j++, t++) { 280 for (j = 0; j < (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE); j++, t++) {
282 amdgpu_gart_set_pte_pde(adev, dst, t, page_base, flags); 281 amdgpu_gmc_set_pte_pde(adev, dst, t, page_base, flags);
283 page_base += AMDGPU_GPU_PAGE_SIZE; 282 page_base += AMDGPU_GPU_PAGE_SIZE;
284 } 283 }
285 } 284 }
@@ -317,7 +316,7 @@ int amdgpu_gart_bind(struct amdgpu_device *adev, uint64_t offset,
317 t = offset / AMDGPU_GPU_PAGE_SIZE; 316 t = offset / AMDGPU_GPU_PAGE_SIZE;
318 p = t / (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE); 317 p = t / (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE);
319 for (i = 0; i < pages; i++, p++) 318 for (i = 0; i < pages; i++, p++)
320 adev->gart.pages[p] = pagelist[i]; 319 adev->gart.pages[p] = pagelist ? pagelist[i] : NULL;
321#endif 320#endif
322 321
323 if (!adev->gart.ptr) 322 if (!adev->gart.ptr)
@@ -329,7 +328,8 @@ int amdgpu_gart_bind(struct amdgpu_device *adev, uint64_t offset,
329 return r; 328 return r;
330 329
331 mb(); 330 mb();
332 amdgpu_gart_flush_gpu_tlb(adev, 0); 331 amdgpu_asic_flush_hdp(adev, NULL);
332 amdgpu_gmc_flush_gpu_tlb(adev, 0);
333 return 0; 333 return 0;
334} 334}
335 335
@@ -345,7 +345,7 @@ int amdgpu_gart_init(struct amdgpu_device *adev)
345{ 345{
346 int r; 346 int r;
347 347
348 if (adev->dummy_page.page) 348 if (adev->dummy_page_addr)
349 return 0; 349 return 0;
350 350
351 /* We need PAGE_SIZE >= AMDGPU_GPU_PAGE_SIZE */ 351 /* We need PAGE_SIZE >= AMDGPU_GPU_PAGE_SIZE */
@@ -357,8 +357,8 @@ int amdgpu_gart_init(struct amdgpu_device *adev)
357 if (r) 357 if (r)
358 return r; 358 return r;
359 /* Compute table size */ 359 /* Compute table size */
360 adev->gart.num_cpu_pages = adev->mc.gart_size / PAGE_SIZE; 360 adev->gart.num_cpu_pages = adev->gmc.gart_size / PAGE_SIZE;
361 adev->gart.num_gpu_pages = adev->mc.gart_size / AMDGPU_GPU_PAGE_SIZE; 361 adev->gart.num_gpu_pages = adev->gmc.gart_size / AMDGPU_GPU_PAGE_SIZE;
362 DRM_INFO("GART: num cpu pages %u, num gpu pages %u\n", 362 DRM_INFO("GART: num cpu pages %u, num gpu pages %u\n",
363 adev->gart.num_cpu_pages, adev->gart.num_gpu_pages); 363 adev->gart.num_cpu_pages, adev->gart.num_gpu_pages);
364 364