summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSeshendra Gadagottu <sgadagottu@nvidia.com>2015-10-08 13:09:37 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-10-12 21:22:12 -0400
commit5b7b59714a6f6ea34295e4827eca68f496f5df18 (patch)
treeabcd49abe842589e214b44c467a3baed181bf387 /drivers
parent1cf6539990dccd4c7a94154cd75d4c257ed39f37 (diff)
gpu: nvgpu: add support to remove bar2 mm
Adding support to remove bar2 mm on gpu module remove. Change-Id: Id5f680b1abf7056da9871d5460d9fbc40422673e Signed-off-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: http://git-master/r/814571 (cherry picked from commit e7c6c87dd6b0893d26a9a3b4568121a691e1eb3c) Reviewed-on: http://git-master/r/815429 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c6
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.h2
3 files changed, 8 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index bec2d2a0..b5e8ce9c 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -379,6 +379,7 @@ struct gpu_ops {
379 int (*init_mm_setup_hw)(struct gk20a *g); 379 int (*init_mm_setup_hw)(struct gk20a *g);
380 int (*init_bar2_vm)(struct gk20a *g); 380 int (*init_bar2_vm)(struct gk20a *g);
381 int (*init_bar2_mm_hw_setup)(struct gk20a *g); 381 int (*init_bar2_mm_hw_setup)(struct gk20a *g);
382 void (*remove_bar2_vm)(struct gk20a *g);
382 const struct gk20a_mmu_level * 383 const struct gk20a_mmu_level *
383 (*get_mmu_levels)(struct gk20a *g, u32 big_page_size); 384 (*get_mmu_levels)(struct gk20a *g, u32 big_page_size);
384 void (*init_pdb)(struct gk20a *g, void *inst_ptr, u64 pdb_addr); 385 void (*init_pdb)(struct gk20a *g, void *inst_ptr, u64 pdb_addr);
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
index 4b06ff3c..859e46fc 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
@@ -325,7 +325,7 @@ static int gk20a_init_mm_reset_enable_hw(struct gk20a *g)
325 return 0; 325 return 0;
326} 326}
327 327
328static void gk20a_remove_vm(struct vm_gk20a *vm, struct mem_desc *inst_block) 328void gk20a_remove_vm(struct vm_gk20a *vm, struct mem_desc *inst_block)
329{ 329{
330 struct gk20a *g = vm->mm->g; 330 struct gk20a *g = vm->mm->g;
331 331
@@ -337,6 +337,10 @@ static void gk20a_remove_vm(struct vm_gk20a *vm, struct mem_desc *inst_block)
337 337
338static void gk20a_remove_mm_support(struct mm_gk20a *mm) 338static void gk20a_remove_mm_support(struct mm_gk20a *mm)
339{ 339{
340 struct gk20a *g = gk20a_from_mm(mm);
341
342 if (g->ops.mm.remove_bar2_vm)
343 g->ops.mm.remove_bar2_vm(g);
340 gk20a_remove_vm(&mm->bar1.vm, &mm->bar1.inst_block); 344 gk20a_remove_vm(&mm->bar1.vm, &mm->bar1.inst_block);
341 gk20a_remove_vm(&mm->pmu.vm, &mm->pmu.inst_block); 345 gk20a_remove_vm(&mm->pmu.vm, &mm->pmu.inst_block);
342 gk20a_free_inst_block(gk20a_from_mm(mm), &mm->hwpm.inst_block); 346 gk20a_free_inst_block(gk20a_from_mm(mm), &mm->hwpm.inst_block);
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
index c60f1bb7..8f328696 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
@@ -649,6 +649,8 @@ const struct gk20a_mmu_level *gk20a_mm_get_mmu_levels(struct gk20a *g,
649 u32 big_page_size); 649 u32 big_page_size);
650void gk20a_mm_init_pdb(struct gk20a *g, void *inst_ptr, u64 pdb_addr); 650void gk20a_mm_init_pdb(struct gk20a *g, void *inst_ptr, u64 pdb_addr);
651 651
652void gk20a_remove_vm(struct vm_gk20a *vm, struct mem_desc *inst_block);
653
652extern const struct gk20a_mmu_level gk20a_mm_levels_64k[]; 654extern const struct gk20a_mmu_level gk20a_mm_levels_64k[];
653extern const struct gk20a_mmu_level gk20a_mm_levels_128k[]; 655extern const struct gk20a_mmu_level gk20a_mm_levels_128k[];
654 656