diff options
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 45 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 49 |
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 | }; |
380 | int amdgpu_dummy_page_init(struct amdgpu_device *adev); | ||
381 | void 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 | */ | ||
737 | int 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 | */ | ||
762 | void 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 | */ | ||
69 | static 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 | */ | ||
94 | static 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 | } |