diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 54 |
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 | */ |
69 | static int amdgpu_gart_dummy_page_init(struct amdgpu_device *adev) | 69 | static 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 | */ |
94 | static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev) | 92 | static 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 | ||