diff options
Diffstat (limited to 'drivers/gpu/drm/ttm')
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_tt.c | 13 |
2 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c index ca65df144765..c96db433f8af 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | |||
@@ -848,6 +848,7 @@ static int ttm_dma_pool_get_pages(struct dma_pool *pool, | |||
848 | if (count) { | 848 | if (count) { |
849 | d_page = list_first_entry(&pool->free_list, struct dma_page, page_list); | 849 | d_page = list_first_entry(&pool->free_list, struct dma_page, page_list); |
850 | ttm->pages[index] = d_page->p; | 850 | ttm->pages[index] = d_page->p; |
851 | ttm_dma->cpu_address[index] = d_page->vaddr; | ||
851 | ttm_dma->dma_address[index] = d_page->dma; | 852 | ttm_dma->dma_address[index] = d_page->dma; |
852 | list_move_tail(&d_page->page_list, &ttm_dma->pages_list); | 853 | list_move_tail(&d_page->page_list, &ttm_dma->pages_list); |
853 | r = 0; | 854 | r = 0; |
@@ -979,6 +980,7 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev) | |||
979 | INIT_LIST_HEAD(&ttm_dma->pages_list); | 980 | INIT_LIST_HEAD(&ttm_dma->pages_list); |
980 | for (i = 0; i < ttm->num_pages; i++) { | 981 | for (i = 0; i < ttm->num_pages; i++) { |
981 | ttm->pages[i] = NULL; | 982 | ttm->pages[i] = NULL; |
983 | ttm_dma->cpu_address[i] = 0; | ||
982 | ttm_dma->dma_address[i] = 0; | 984 | ttm_dma->dma_address[i] = 0; |
983 | } | 985 | } |
984 | 986 | ||
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c index 75f319090043..bf080abc86d1 100644 --- a/drivers/gpu/drm/ttm/ttm_tt.c +++ b/drivers/gpu/drm/ttm/ttm_tt.c | |||
@@ -55,9 +55,12 @@ static void ttm_tt_alloc_page_directory(struct ttm_tt *ttm) | |||
55 | 55 | ||
56 | static void ttm_dma_tt_alloc_page_directory(struct ttm_dma_tt *ttm) | 56 | static void ttm_dma_tt_alloc_page_directory(struct ttm_dma_tt *ttm) |
57 | { | 57 | { |
58 | ttm->ttm.pages = drm_calloc_large(ttm->ttm.num_pages, sizeof(void*)); | 58 | ttm->ttm.pages = drm_calloc_large(ttm->ttm.num_pages, |
59 | ttm->dma_address = drm_calloc_large(ttm->ttm.num_pages, | 59 | sizeof(*ttm->ttm.pages) + |
60 | sizeof(*ttm->dma_address)); | 60 | sizeof(*ttm->dma_address) + |
61 | sizeof(*ttm->cpu_address)); | ||
62 | ttm->cpu_address = (void *) (ttm->ttm.pages + ttm->ttm.num_pages); | ||
63 | ttm->dma_address = (void *) (ttm->cpu_address + ttm->ttm.num_pages); | ||
61 | } | 64 | } |
62 | 65 | ||
63 | #ifdef CONFIG_X86 | 66 | #ifdef CONFIG_X86 |
@@ -228,7 +231,7 @@ int ttm_dma_tt_init(struct ttm_dma_tt *ttm_dma, struct ttm_bo_device *bdev, | |||
228 | 231 | ||
229 | INIT_LIST_HEAD(&ttm_dma->pages_list); | 232 | INIT_LIST_HEAD(&ttm_dma->pages_list); |
230 | ttm_dma_tt_alloc_page_directory(ttm_dma); | 233 | ttm_dma_tt_alloc_page_directory(ttm_dma); |
231 | if (!ttm->pages || !ttm_dma->dma_address) { | 234 | if (!ttm->pages) { |
232 | ttm_tt_destroy(ttm); | 235 | ttm_tt_destroy(ttm); |
233 | pr_err("Failed allocating page table\n"); | 236 | pr_err("Failed allocating page table\n"); |
234 | return -ENOMEM; | 237 | return -ENOMEM; |
@@ -243,7 +246,7 @@ void ttm_dma_tt_fini(struct ttm_dma_tt *ttm_dma) | |||
243 | 246 | ||
244 | drm_free_large(ttm->pages); | 247 | drm_free_large(ttm->pages); |
245 | ttm->pages = NULL; | 248 | ttm->pages = NULL; |
246 | drm_free_large(ttm_dma->dma_address); | 249 | ttm_dma->cpu_address = NULL; |
247 | ttm_dma->dma_address = NULL; | 250 | ttm_dma->dma_address = NULL; |
248 | } | 251 | } |
249 | EXPORT_SYMBOL(ttm_dma_tt_fini); | 252 | EXPORT_SYMBOL(ttm_dma_tt_fini); |