From fda4ddfa79f3a78becfe44fd558974bd274c03a9 Mon Sep 17 00:00:00 2001 From: seshendra Gadagottu Date: Wed, 27 Jul 2016 17:06:36 -0700 Subject: 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 Reviewed-on: http://git-master/r/1225384 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c') 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) if (g->ops.mm.remove_bar2_vm) g->ops.mm.remove_bar2_vm(g); - gk20a_remove_vm(&mm->bar1.vm, &mm->bar1.inst_block); + + if (g->ops.mm.is_bar1_supported(g)) + gk20a_remove_vm(&mm->bar1.vm, &mm->bar1.inst_block); + gk20a_remove_vm(&mm->pmu.vm, &mm->pmu.inst_block); gk20a_free_inst_block(gk20a_from_mm(mm), &mm->hwpm.inst_block); gk20a_vm_remove_support_nofree(&mm->cde.vm); @@ -1001,10 +1004,11 @@ int gk20a_init_mm_setup_sw(struct gk20a *g) if (err) return err; - err = gk20a_init_bar1_vm(mm); - if (err) - return err; - + if (g->ops.mm.is_bar1_supported(g)) { + err = gk20a_init_bar1_vm(mm); + if (err) + return err; + } if (g->ops.mm.init_bar2_vm) { err = g->ops.mm.init_bar2_vm(g); if (err) @@ -1055,7 +1059,8 @@ int gk20a_init_mm_setup_hw(struct gk20a *g) g->ops.mm.get_iova_addr(g, g->mm.sysmem_flush.sgt->sgl, 0) >> 8); - g->ops.mm.bar1_bind(g, &mm->bar1.inst_block); + if (g->ops.mm.bar1_bind) + g->ops.mm.bar1_bind(g, &mm->bar1.inst_block); if (g->ops.mm.init_bar2_mm_hw_setup) { err = g->ops.mm.init_bar2_mm_hw_setup(g); @@ -5249,6 +5254,11 @@ clean_up: return err; } +static bool gk20a_mm_is_bar1_supported(struct gk20a *g) +{ + return true; +} + #ifdef CONFIG_DEBUG_FS void gk20a_mm_debugfs_init(struct device *dev) { @@ -5284,4 +5294,5 @@ void gk20a_init_mm(struct gpu_ops *gops) gops->mm.init_pdb = gk20a_mm_init_pdb; gops->mm.init_mm_setup_hw = gk20a_init_mm_setup_hw; gops->mm.bar1_bind = gk20a_mm_bar1_bind; + gops->mm.is_bar1_supported = gk20a_mm_is_bar1_supported; } -- cgit v1.2.2