diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common/mm/mm.c')
-rw-r--r-- | drivers/gpu/nvgpu/common/mm/mm.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/mm/mm.c b/drivers/gpu/nvgpu/common/mm/mm.c index 54f621ae..988b1e5c 100644 --- a/drivers/gpu/nvgpu/common/mm/mm.c +++ b/drivers/gpu/nvgpu/common/mm/mm.c | |||
@@ -173,6 +173,9 @@ static void nvgpu_remove_mm_support(struct mm_gk20a *mm) | |||
173 | { | 173 | { |
174 | struct gk20a *g = gk20a_from_mm(mm); | 174 | struct gk20a *g = gk20a_from_mm(mm); |
175 | 175 | ||
176 | nvgpu_dma_free(g, &mm->mmu_wr_mem); | ||
177 | nvgpu_dma_free(g, &mm->mmu_rd_mem); | ||
178 | |||
176 | if (g->ops.mm.fault_info_mem_destroy) { | 179 | if (g->ops.mm.fault_info_mem_destroy) { |
177 | g->ops.mm.fault_info_mem_destroy(g); | 180 | g->ops.mm.fault_info_mem_destroy(g); |
178 | } | 181 | } |
@@ -294,6 +297,32 @@ static int nvgpu_init_ce_vm(struct mm_gk20a *mm) | |||
294 | return 0; | 297 | return 0; |
295 | } | 298 | } |
296 | 299 | ||
300 | static int nvgpu_init_mmu_debug(struct mm_gk20a *mm) | ||
301 | { | ||
302 | struct gk20a *g = gk20a_from_mm(mm); | ||
303 | int err; | ||
304 | |||
305 | if (!nvgpu_mem_is_valid(&mm->mmu_wr_mem)) { | ||
306 | err = nvgpu_dma_alloc_sys(g, SZ_4K, &mm->mmu_wr_mem); | ||
307 | if (err) { | ||
308 | goto err; | ||
309 | } | ||
310 | } | ||
311 | |||
312 | if (!nvgpu_mem_is_valid(&mm->mmu_rd_mem)) { | ||
313 | err = nvgpu_dma_alloc_sys(g, SZ_4K, &mm->mmu_rd_mem); | ||
314 | if (err) { | ||
315 | goto err_free_wr_mem; | ||
316 | } | ||
317 | } | ||
318 | return 0; | ||
319 | |||
320 | err_free_wr_mem: | ||
321 | nvgpu_dma_free(g, &mm->mmu_wr_mem); | ||
322 | err: | ||
323 | return -ENOMEM; | ||
324 | } | ||
325 | |||
297 | void nvgpu_init_mm_ce_context(struct gk20a *g) | 326 | void nvgpu_init_mm_ce_context(struct gk20a *g) |
298 | { | 327 | { |
299 | #if defined(CONFIG_GK20A_VIDMEM) | 328 | #if defined(CONFIG_GK20A_VIDMEM) |
@@ -459,6 +488,10 @@ static int nvgpu_init_mm_setup_sw(struct gk20a *g) | |||
459 | return err; | 488 | return err; |
460 | } | 489 | } |
461 | 490 | ||
491 | err = nvgpu_init_mmu_debug(mm); | ||
492 | if (err) | ||
493 | return err; | ||
494 | |||
462 | mm->remove_support = nvgpu_remove_mm_support; | 495 | mm->remove_support = nvgpu_remove_mm_support; |
463 | mm->remove_ce_support = nvgpu_remove_mm_ce_support; | 496 | mm->remove_ce_support = nvgpu_remove_mm_ce_support; |
464 | 497 | ||