summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/cde_gk20a.c4
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c19
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.h3
3 files changed, 24 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/cde_gk20a.c b/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
index 6d8633a7..01fca058 100644
--- a/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
@@ -1194,8 +1194,8 @@ static int gk20a_cde_load(struct gk20a_cde_ctx *cde_ctx)
1194 } 1194 }
1195 1195
1196 /* bind the channel to the vm */ 1196 /* bind the channel to the vm */
1197 gk20a_vm_get(&g->mm.pmu.vm); 1197 gk20a_vm_get(&g->mm.cde.vm);
1198 ch->vm = &g->mm.pmu.vm; 1198 ch->vm = &g->mm.cde.vm;
1199 err = channel_gk20a_commit_va(ch); 1199 err = channel_gk20a_commit_va(ch);
1200 if (err) { 1200 if (err) {
1201 gk20a_warn(&cde_ctx->pdev->dev, "cde: could not bind vm"); 1201 gk20a_warn(&cde_ctx->pdev->dev, "cde: could not bind vm");
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
index 15fd32d3..7876af63 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
@@ -105,6 +105,7 @@ static int update_gmmu_ptes_locked(struct vm_gk20a *vm,
105static int __must_check gk20a_init_system_vm(struct mm_gk20a *mm); 105static int __must_check gk20a_init_system_vm(struct mm_gk20a *mm);
106static int __must_check gk20a_init_bar1_vm(struct mm_gk20a *mm); 106static int __must_check gk20a_init_bar1_vm(struct mm_gk20a *mm);
107static int __must_check gk20a_init_hwpm(struct mm_gk20a *mm); 107static int __must_check gk20a_init_hwpm(struct mm_gk20a *mm);
108static int __must_check gk20a_init_cde_vm(struct mm_gk20a *mm);
108 109
109 110
110struct gk20a_dmabuf_priv { 111struct gk20a_dmabuf_priv {
@@ -344,6 +345,7 @@ static void gk20a_remove_mm_support(struct mm_gk20a *mm)
344 gk20a_remove_vm(&mm->bar1.vm, &mm->bar1.inst_block); 345 gk20a_remove_vm(&mm->bar1.vm, &mm->bar1.inst_block);
345 gk20a_remove_vm(&mm->pmu.vm, &mm->pmu.inst_block); 346 gk20a_remove_vm(&mm->pmu.vm, &mm->pmu.inst_block);
346 gk20a_free_inst_block(gk20a_from_mm(mm), &mm->hwpm.inst_block); 347 gk20a_free_inst_block(gk20a_from_mm(mm), &mm->hwpm.inst_block);
348 gk20a_vm_remove_support_nofree(&mm->cde.vm);
347} 349}
348 350
349int gk20a_init_mm_setup_sw(struct gk20a *g) 351int gk20a_init_mm_setup_sw(struct gk20a *g)
@@ -386,6 +388,10 @@ int gk20a_init_mm_setup_sw(struct gk20a *g)
386 if (err) 388 if (err)
387 return err; 389 return err;
388 390
391 err = gk20a_init_cde_vm(mm);
392 if (err)
393 return err;
394
389 /* set vm_alloc_share op here as gk20a_as_alloc_share needs it */ 395 /* set vm_alloc_share op here as gk20a_as_alloc_share needs it */
390 g->ops.mm.vm_alloc_share = gk20a_vm_alloc_share; 396 g->ops.mm.vm_alloc_share = gk20a_vm_alloc_share;
391 mm->remove_support = gk20a_remove_mm_support; 397 mm->remove_support = gk20a_remove_mm_support;
@@ -3268,6 +3274,19 @@ static int gk20a_init_hwpm(struct mm_gk20a *mm)
3268 return 0; 3274 return 0;
3269} 3275}
3270 3276
3277static int gk20a_init_cde_vm(struct mm_gk20a *mm)
3278{
3279 struct vm_gk20a *vm = &mm->cde.vm;
3280 struct gk20a *g = gk20a_from_mm(mm);
3281 u32 big_page_size = gk20a_get_platform(g->dev)->default_big_page_size;
3282
3283 return gk20a_init_vm(mm, vm, big_page_size,
3284 SZ_4K * 16,
3285 NV_MM_DEFAULT_KERNEL_SIZE,
3286 NV_MM_DEFAULT_KERNEL_SIZE + NV_MM_DEFAULT_USER_SIZE,
3287 false, "cde");
3288}
3289
3271void gk20a_mm_init_pdb(struct gk20a *g, void *inst_ptr, u64 pdb_addr) 3290void gk20a_mm_init_pdb(struct gk20a *g, void *inst_ptr, u64 pdb_addr)
3272{ 3291{
3273 u32 pdb_addr_lo = u64_lo32(pdb_addr >> ram_in_base_shift_v()); 3292 u32 pdb_addr_lo = u64_lo32(pdb_addr >> ram_in_base_shift_v());
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
index 9e373d8e..7bbaf283 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
@@ -318,6 +318,9 @@ struct mm_gk20a {
318 struct mem_desc inst_block; 318 struct mem_desc inst_block;
319 } hwpm; 319 } hwpm;
320 320
321 struct {
322 struct vm_gk20a vm;
323 } cde;
321 324
322 struct mutex l2_op_lock; 325 struct mutex l2_op_lock;
323#ifdef CONFIG_ARCH_TEGRA_18x_SOC 326#ifdef CONFIG_ARCH_TEGRA_18x_SOC