summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2018-08-16 17:47:01 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-09-10 18:23:12 -0400
commitc86f185d1022de18a1a1073aa91d2b06aa59e2fc (patch)
tree61e685a45b309a245038b2a02a832ac0f790ff21 /drivers/gpu/nvgpu/common
parent83efad7adb44647d37d98a57cbb6df48e356917d (diff)
gpu: nvgpu: Move programming of debug page to FB
Debug page was allocated and programmed to HUB MMU in GR code. This introduces a dependency from GR to FB and is anyway the wrong place. Move the code to allocate memory to generic MM code, and the code to program the addresses to FB. Change-Id: Ib6d3c96efde6794cf5e8cd4c908525c85b57c233 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1801423 Reviewed-by: svc-misra-checker <svc-misra-checker@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common')
-rw-r--r--drivers/gpu/nvgpu/common/fb/fb_gm20b.c25
-rw-r--r--drivers/gpu/nvgpu/common/mm/mm.c33
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
56void gm20b_fb_init_hw(struct gk20a *g) 56void 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
63int gm20b_fb_tlb_invalidate(struct gk20a *g, struct nvgpu_mem *pdb) 86int 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
300static 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
297void nvgpu_init_mm_ce_context(struct gk20a *g) 326void 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