diff options
author | Seshendra Gadagottu <sgadagottu@nvidia.com> | 2015-10-08 13:09:37 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2015-10-12 21:22:12 -0400 |
commit | 5b7b59714a6f6ea34295e4827eca68f496f5df18 (patch) | |
tree | abcd49abe842589e214b44c467a3baed181bf387 | |
parent | 1cf6539990dccd4c7a94154cd75d4c257ed39f37 (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>
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 6 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 2 |
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 | ||
328 | static void gk20a_remove_vm(struct vm_gk20a *vm, struct mem_desc *inst_block) | 328 | void 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 | ||
338 | static void gk20a_remove_mm_support(struct mm_gk20a *mm) | 338 | static 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); |
650 | void gk20a_mm_init_pdb(struct gk20a *g, void *inst_ptr, u64 pdb_addr); | 650 | void gk20a_mm_init_pdb(struct gk20a *g, void *inst_ptr, u64 pdb_addr); |
651 | 651 | ||
652 | void gk20a_remove_vm(struct vm_gk20a *vm, struct mem_desc *inst_block); | ||
653 | |||
652 | extern const struct gk20a_mmu_level gk20a_mm_levels_64k[]; | 654 | extern const struct gk20a_mmu_level gk20a_mm_levels_64k[]; |
653 | extern const struct gk20a_mmu_level gk20a_mm_levels_128k[]; | 655 | extern const struct gk20a_mmu_level gk20a_mm_levels_128k[]; |
654 | 656 | ||