diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2018-08-16 17:47:01 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-09-10 18:23:12 -0400 |
commit | c86f185d1022de18a1a1073aa91d2b06aa59e2fc (patch) | |
tree | 61e685a45b309a245038b2a02a832ac0f790ff21 /drivers/gpu/nvgpu/common | |
parent | 83efad7adb44647d37d98a57cbb6df48e356917d (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.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 | ||