From ef95e43d973fb2200857c9165b24d8260b2e219a Mon Sep 17 00:00:00 2001 From: seshendra Gadagottu Date: Wed, 16 Nov 2016 10:25:20 -0800 Subject: gpu: nvgpu: chip specific init_inst_block Add function pointer to add chip specific init_inst_block. Update this function pointer for gk20a and gm20b. JIRA GV11B-21 Change-Id: I74ca6a8b4d5d1ed36f7b25b7f62361c2789b9540 Signed-off-by: seshendra Gadagottu Reviewed-on: http://git-master/r/1254875 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 4 +++- drivers/gpu/nvgpu/gk20a/gk20a.h | 2 ++ drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 7 ++++--- drivers/gpu/nvgpu/gm20b/mm_gm20b.c | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index 6207ab23..8b5a1a9e 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c @@ -129,9 +129,11 @@ static void free_channel(struct fifo_gk20a *f, int channel_gk20a_commit_va(struct channel_gk20a *c) { + struct gk20a *g = c->g; + gk20a_dbg_fn(""); - gk20a_init_inst_block(&c->inst_block, c->vm, + g->ops.mm.init_inst_block(&c->inst_block, c->vm, c->vm->gmmu_page_sizes[gmmu_page_size_big]); return 0; diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index dd64e3b2..5539ca62 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -579,6 +579,8 @@ struct gpu_ops { u32 flags); int (*bar1_bind)(struct gk20a *g, struct mem_desc *bar1_inst); size_t (*get_vidmem_size)(struct gk20a *g); + void (*init_inst_block)(struct mem_desc *inst_block, + struct vm_gk20a *vm, u32 big_page_size); } mm; struct { int (*init_therm_setup_hw)(struct gk20a *g); diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index fcd5d664..5faff04b 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -4855,7 +4855,7 @@ static int gk20a_init_bar1_vm(struct mm_gk20a *mm) err = gk20a_alloc_inst_block(g, inst_block); if (err) goto clean_up_va; - gk20a_init_inst_block(inst_block, vm, big_page_size); + g->ops.mm.init_inst_block(inst_block, vm, big_page_size); return 0; @@ -4884,7 +4884,7 @@ static int gk20a_init_system_vm(struct mm_gk20a *mm) err = gk20a_alloc_inst_block(g, inst_block); if (err) goto clean_up_va; - gk20a_init_inst_block(inst_block, vm, big_page_size); + g->ops.mm.init_inst_block(inst_block, vm, big_page_size); return 0; @@ -4903,7 +4903,7 @@ static int gk20a_init_hwpm(struct mm_gk20a *mm) err = gk20a_alloc_inst_block(g, inst_block); if (err) return err; - gk20a_init_inst_block(inst_block, vm, 0); + g->ops.mm.init_inst_block(inst_block, vm, 0); return 0; } @@ -5383,5 +5383,6 @@ 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.init_inst_block = gk20a_init_inst_block; gops->mm.is_bar1_supported = gk20a_mm_is_bar1_supported; } diff --git a/drivers/gpu/nvgpu/gm20b/mm_gm20b.c b/drivers/gpu/nvgpu/gm20b/mm_gm20b.c index 36d1192a..e1a135f8 100644 --- a/drivers/gpu/nvgpu/gm20b/mm_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/mm_gm20b.c @@ -192,4 +192,5 @@ void gm20b_init_mm(struct gpu_ops *gops) gops->mm.init_mm_setup_hw = gk20a_init_mm_setup_hw; gops->mm.bar1_bind = gm20b_mm_bar1_bind; gops->mm.is_bar1_supported = gm20b_mm_is_bar1_supported; + gops->mm.init_inst_block = gk20a_init_inst_block; } -- cgit v1.2.2