diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2017-12-15 16:28:33 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-12-18 10:59:52 -0500 |
commit | 55e0037aab6503453eef663eded60e530896eaef (patch) | |
tree | 6270773bc0fa441060a0233fe594183c2bd4b235 /drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | |
parent | 39c640c086ad12005e88cf6f9de03c32111ef081 (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.c | 49 |
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 | */ | ||
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 | } |