diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common')
-rw-r--r-- | drivers/gpu/nvgpu/common/fb/fb_gm20b.c | 25 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/mm/mm.c | 33 |
2 files changed, 57 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/common/fb/fb_gm20b.c b/drivers/gpu/nvgpu/common/fb/fb_gm20b.c index 65b7336c..00d0fba4 100644 --- a/drivers/gpu/nvgpu/common/fb/fb_gm20b.c +++ b/drivers/gpu/nvgpu/common/fb/fb_gm20b.c | |||
@@ -55,9 +55,32 @@ void gm20b_fb_reset(struct gk20a *g) | |||
55 | 55 | ||
56 | void gm20b_fb_init_hw(struct gk20a *g) | 56 | void gm20b_fb_init_hw(struct gk20a *g) |
57 | { | 57 | { |
58 | u32 addr = nvgpu_mem_get_addr(g, &g->mm.sysmem_flush) >> 8; | 58 | u64 addr = nvgpu_mem_get_addr(g, &g->mm.sysmem_flush) >> 8; |
59 | 59 | ||
60 | gk20a_writel(g, fb_niso_flush_sysmem_addr_r(), addr); | 60 | gk20a_writel(g, fb_niso_flush_sysmem_addr_r(), addr); |
61 | |||
62 | /* init mmu debug buffer */ | ||
63 | addr = nvgpu_mem_get_addr(g, &g->mm.mmu_wr_mem); | ||
64 | addr >>= fb_mmu_debug_wr_addr_alignment_v(); | ||
65 | |||
66 | gk20a_writel(g, fb_mmu_debug_wr_r(), | ||
67 | nvgpu_aperture_mask(g, &g->mm.mmu_wr_mem, | ||
68 | fb_mmu_debug_wr_aperture_sys_mem_ncoh_f(), | ||
69 | fb_mmu_debug_wr_aperture_sys_mem_coh_f(), | ||
70 | fb_mmu_debug_wr_aperture_vid_mem_f()) | | ||
71 | fb_mmu_debug_wr_vol_false_f() | | ||
72 | fb_mmu_debug_wr_addr_f(addr)); | ||
73 | |||
74 | addr = nvgpu_mem_get_addr(g, &g->mm.mmu_rd_mem); | ||
75 | addr >>= fb_mmu_debug_rd_addr_alignment_v(); | ||
76 | |||
77 | gk20a_writel(g, fb_mmu_debug_rd_r(), | ||
78 | nvgpu_aperture_mask(g, &g->mm.mmu_rd_mem, | ||
79 | fb_mmu_debug_wr_aperture_sys_mem_ncoh_f(), | ||
80 | fb_mmu_debug_wr_aperture_sys_mem_coh_f(), | ||
81 | fb_mmu_debug_rd_aperture_vid_mem_f()) | | ||
82 | fb_mmu_debug_rd_vol_false_f() | | ||
83 | fb_mmu_debug_rd_addr_f(addr)); | ||
61 | } | 84 | } |
62 | 85 | ||
63 | int gm20b_fb_tlb_invalidate(struct gk20a *g, struct nvgpu_mem *pdb) | 86 | int gm20b_fb_tlb_invalidate(struct gk20a *g, struct nvgpu_mem *pdb) |
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 | ||