aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c45
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c49
3 files changed, 47 insertions, 50 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 149ed8a67664..d4abb7f04a86 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -377,9 +377,6 @@ struct amdgpu_dummy_page {
377 struct page *page; 377 struct page *page;
378 dma_addr_t addr; 378 dma_addr_t addr;
379}; 379};
380int amdgpu_dummy_page_init(struct amdgpu_device *adev);
381void amdgpu_dummy_page_fini(struct amdgpu_device *adev);
382
383 380
384/* 381/*
385 * Clocks 382 * Clocks
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 8cc3dcf120d0..0080776c4936 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -724,51 +724,6 @@ bool amdgpu_device_need_post(struct amdgpu_device *adev)
724 return true; 724 return true;
725} 725}
726 726
727/**
728 * amdgpu_dummy_page_init - init dummy page used by the driver
729 *
730 * @adev: amdgpu_device pointer
731 *
732 * Allocate the dummy page used by the driver (all asics).
733 * This dummy page is used by the driver as a filler for gart entries
734 * when pages are taken out of the GART
735 * Returns 0 on sucess, -ENOMEM on failure.
736 */
737int amdgpu_dummy_page_init(struct amdgpu_device *adev)
738{
739 if (adev->dummy_page.page)
740 return 0;
741 adev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO);
742 if (adev->dummy_page.page == NULL)
743 return -ENOMEM;
744 adev->dummy_page.addr = pci_map_page(adev->pdev, adev->dummy_page.page,
745 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
746 if (pci_dma_mapping_error(adev->pdev, adev->dummy_page.addr)) {
747 dev_err(&adev->pdev->dev, "Failed to DMA MAP the dummy page\n");
748 __free_page(adev->dummy_page.page);
749 adev->dummy_page.page = NULL;
750 return -ENOMEM;
751 }
752 return 0;
753}
754
755/**
756 * amdgpu_dummy_page_fini - free dummy page used by the driver
757 *
758 * @adev: amdgpu_device pointer
759 *
760 * Frees the dummy page used by the driver (all asics).
761 */
762void amdgpu_dummy_page_fini(struct amdgpu_device *adev)
763{
764 if (adev->dummy_page.page == NULL)
765 return;
766 pci_unmap_page(adev->pdev, adev->dummy_page.addr,
767 PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
768 __free_page(adev->dummy_page.page);
769 adev->dummy_page.page = NULL;
770}
771
772/* if we get transitioned to only one device, take VGA back */ 727/* if we get transitioned to only one device, take VGA back */
773/** 728/**
774 * amdgpu_device_vga_set_decode - enable/disable vga decode 729 * amdgpu_device_vga_set_decode - enable/disable vga decode
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}