From f4883ab97af69610c0507c245f69eef00d203a28 Mon Sep 17 00:00:00 2001 From: Seshendra Gadagottu Date: Wed, 3 Dec 2014 17:57:35 -0800 Subject: gpu:nvgpu: add bar2 aperture support Bug 1587825 Change-Id: I884c6b268aabb04b4990713395ebedf92410e02a Signed-off-by: Seshendra Gadagottu Reviewed-on: http://git-master/r/659239 Tested-by: Terje Bergstrom Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/gk20a.h | 2 ++ drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 17 +++++++++++++++-- drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 15 +++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 3c1186ed..b9796faa 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -325,6 +325,8 @@ struct gpu_ops { void *inst_ptr, int size); u32 (*get_big_page_sizes)(void); u32 (*get_physical_addr_bits)(struct gk20a *g); + int (*init_bar2_vm)(struct gk20a *g); + int (*init_bar2_mm_hw_setup)(struct gk20a *g); } mm; struct { int (*prepare_ucode)(struct gk20a *g); diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 8cd8e18c..3bce3c74 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -311,6 +311,11 @@ int gk20a_init_mm_setup_sw(struct gk20a *g) if (err) return err; + if (g->ops.mm.init_bar2_vm) { + err = g->ops.mm.init_bar2_vm(g); + if (err) + return err; + } err = gk20a_init_system_vm(mm); if (err) return err; @@ -330,6 +335,7 @@ static int gk20a_init_mm_setup_hw(struct gk20a *g) struct mm_gk20a *mm = &g->mm; struct inst_desc *inst_block = &mm->bar1.inst_block; phys_addr_t inst_pa = inst_block->cpu_pa; + int err; gk20a_dbg_fn(""); @@ -342,6 +348,13 @@ static int gk20a_init_mm_setup_hw(struct gk20a *g) bus_bar1_block_target_vid_mem_f() | bus_bar1_block_mode_virtual_f() | bus_bar1_block_ptr_f(inst_pa)); + + if (g->ops.mm.init_bar2_mm_hw_setup) { + err = g->ops.mm.init_bar2_mm_hw_setup(g); + if (err) + return err; + } + if (gk20a_mm_fb_flush(g) || gk20a_mm_fb_flush(g)) return -EBUSY; @@ -2124,7 +2137,7 @@ void gk20a_vm_put(struct vm_gk20a *vm) kref_put(&vm->ref, gk20a_vm_remove_support_kref); } -static int gk20a_init_vm(struct mm_gk20a *mm, +int gk20a_init_vm(struct mm_gk20a *mm, struct vm_gk20a *vm, u32 big_page_size, u64 low_hole, @@ -2659,7 +2672,7 @@ int gk20a_vm_unmap_buffer(struct gk20a_as_share *as_share, u64 offset) return 0; } -static void gk20a_deinit_vm(struct vm_gk20a *vm) +void gk20a_deinit_vm(struct vm_gk20a *vm) { u32 pde_pages; diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h index 79bc50af..8470a7ac 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h @@ -343,6 +343,12 @@ struct mm_gk20a { struct inst_desc inst_block; } bar1; + struct { + u32 aperture_size; + struct vm_gk20a vm; + struct inst_desc inst_block; + } bar2; + struct { u32 aperture_size; struct vm_gk20a vm; @@ -534,6 +540,15 @@ int gk20a_vm_map_buffer(struct gk20a_as_share *as_share, int kind, u64 buffer_offset, u64 mapping_size); + +int gk20a_init_vm(struct mm_gk20a *mm, + struct vm_gk20a *vm, + u32 big_page_size, + u64 low_hole, + u64 aperture_size, + bool big_pages, + char *name); +void gk20a_deinit_vm(struct vm_gk20a *vm); int gk20a_vm_unmap_buffer(struct gk20a_as_share *, u64 offset); void gk20a_get_comptags(struct device *dev, struct dma_buf *dmabuf, struct gk20a_comptags *comptags); -- cgit v1.2.2