summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
diff options
context:
space:
mode:
authorseshendra Gadagottu <sgadagottu@nvidia.com>2016-07-27 20:06:36 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-10-11 12:16:03 -0400
commitfda4ddfa79f3a78becfe44fd558974bd274c03a9 (patch)
tree55d7999d7af7040ed50121fa6fa70fddc11b0887 /drivers/gpu/nvgpu/gk20a/mm_gk20a.c
parentbb5fd16c67287e53db5165a974ea15ec3be09fe9 (diff)
gpu: nvgpu: userd allocation from sysmem
When bar1 memory is not supported then userd will be allocated from sysmem. Functions gp_get and gp_put are updated accordingly. JIRA GV11B-1 Change-Id: Ia895712a110f6cca26474228141488f5f8ace756 Signed-off-by: seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: http://git-master/r/1225384 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
index a84d8ff0..570a3708 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
@@ -797,7 +797,10 @@ static void gk20a_remove_mm_support(struct mm_gk20a *mm)
797 797
798 if (g->ops.mm.remove_bar2_vm) 798 if (g->ops.mm.remove_bar2_vm)
799 g->ops.mm.remove_bar2_vm(g); 799 g->ops.mm.remove_bar2_vm(g);
800 gk20a_remove_vm(&mm->bar1.vm, &mm->bar1.inst_block); 800
801 if (g->ops.mm.is_bar1_supported(g))
802 gk20a_remove_vm(&mm->bar1.vm, &mm->bar1.inst_block);
803
801 gk20a_remove_vm(&mm->pmu.vm, &mm->pmu.inst_block); 804 gk20a_remove_vm(&mm->pmu.vm, &mm->pmu.inst_block);
802 gk20a_free_inst_block(gk20a_from_mm(mm), &mm->hwpm.inst_block); 805 gk20a_free_inst_block(gk20a_from_mm(mm), &mm->hwpm.inst_block);
803 gk20a_vm_remove_support_nofree(&mm->cde.vm); 806 gk20a_vm_remove_support_nofree(&mm->cde.vm);
@@ -1001,10 +1004,11 @@ int gk20a_init_mm_setup_sw(struct gk20a *g)
1001 if (err) 1004 if (err)
1002 return err; 1005 return err;
1003 1006
1004 err = gk20a_init_bar1_vm(mm); 1007 if (g->ops.mm.is_bar1_supported(g)) {
1005 if (err) 1008 err = gk20a_init_bar1_vm(mm);
1006 return err; 1009 if (err)
1007 1010 return err;
1011 }
1008 if (g->ops.mm.init_bar2_vm) { 1012 if (g->ops.mm.init_bar2_vm) {
1009 err = g->ops.mm.init_bar2_vm(g); 1013 err = g->ops.mm.init_bar2_vm(g);
1010 if (err) 1014 if (err)
@@ -1055,7 +1059,8 @@ int gk20a_init_mm_setup_hw(struct gk20a *g)
1055 g->ops.mm.get_iova_addr(g, g->mm.sysmem_flush.sgt->sgl, 0) 1059 g->ops.mm.get_iova_addr(g, g->mm.sysmem_flush.sgt->sgl, 0)
1056 >> 8); 1060 >> 8);
1057 1061
1058 g->ops.mm.bar1_bind(g, &mm->bar1.inst_block); 1062 if (g->ops.mm.bar1_bind)
1063 g->ops.mm.bar1_bind(g, &mm->bar1.inst_block);
1059 1064
1060 if (g->ops.mm.init_bar2_mm_hw_setup) { 1065 if (g->ops.mm.init_bar2_mm_hw_setup) {
1061 err = g->ops.mm.init_bar2_mm_hw_setup(g); 1066 err = g->ops.mm.init_bar2_mm_hw_setup(g);
@@ -5249,6 +5254,11 @@ clean_up:
5249 return err; 5254 return err;
5250} 5255}
5251 5256
5257static bool gk20a_mm_is_bar1_supported(struct gk20a *g)
5258{
5259 return true;
5260}
5261
5252#ifdef CONFIG_DEBUG_FS 5262#ifdef CONFIG_DEBUG_FS
5253void gk20a_mm_debugfs_init(struct device *dev) 5263void gk20a_mm_debugfs_init(struct device *dev)
5254{ 5264{
@@ -5284,4 +5294,5 @@ void gk20a_init_mm(struct gpu_ops *gops)
5284 gops->mm.init_pdb = gk20a_mm_init_pdb; 5294 gops->mm.init_pdb = gk20a_mm_init_pdb;
5285 gops->mm.init_mm_setup_hw = gk20a_init_mm_setup_hw; 5295 gops->mm.init_mm_setup_hw = gk20a_init_mm_setup_hw;
5286 gops->mm.bar1_bind = gk20a_mm_bar1_bind; 5296 gops->mm.bar1_bind = gk20a_mm_bar1_bind;
5297 gops->mm.is_bar1_supported = gk20a_mm_is_bar1_supported;
5287} 5298}