summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSeshendra Gadagottu <sgadagottu@nvidia.com>2015-02-05 20:38:49 -0500
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:52:04 -0500
commitc965d7a54a347dc71191561ea5cd1a389ee8b091 (patch)
treedaac77a1157fee284a510701ed2e05cd2eb85c93 /drivers
parent1f9b2f2852a48ee571ce631a2d72ac02db2d6c87 (diff)
gpu: nvgpu: gp10b: setup mm hw init
Add support for gp10b specific mm hw init. Bug 1587825 Change-Id: Iaccf1bf73468cfdd1842a001ab5e682ac06f1950 Signed-off-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: http://git-master/r/681787 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gp10b/mm_gp10b.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/mm_gp10b.c b/drivers/gpu/nvgpu/gp10b/mm_gp10b.c
index 00e41fa7..293eb999 100644
--- a/drivers/gpu/nvgpu/gp10b/mm_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/mm_gp10b.c
@@ -25,6 +25,39 @@ u32 gp10b_mm_get_physical_addr_bits(struct gk20a *g)
25 return 36; 25 return 36;
26} 26}
27 27
28static int gp10b_init_mm_setup_hw(struct gk20a *g)
29{
30 struct mm_gk20a *mm = &g->mm;
31 struct inst_desc *inst_block = &mm->bar1.inst_block;
32 phys_addr_t inst_pa = inst_block->cpu_pa;
33 int err = 0;
34
35 gk20a_dbg_fn("");
36
37 g->ops.fb.set_mmu_page_size(g);
38
39 inst_pa = (u32)(inst_pa >> bar1_instance_block_shift_gk20a());
40 gk20a_dbg_info("bar1 inst block ptr: 0x%08x", (u32)inst_pa);
41
42 gk20a_writel(g, bus_bar1_block_r(),
43 bus_bar1_block_target_vid_mem_f() |
44 bus_bar1_block_mode_virtual_f() |
45 bus_bar1_block_ptr_f(inst_pa));
46
47 if (g->ops.mm.init_bar2_mm_hw_setup) {
48 err = g->ops.mm.init_bar2_mm_hw_setup(g);
49 if (err)
50 return err;
51 }
52
53 if (gk20a_mm_fb_flush(g) || gk20a_mm_fb_flush(g))
54 return -EBUSY;
55
56 gk20a_dbg_fn("done");
57 return err;
58
59}
60
28static int gb10b_init_bar2_vm(struct gk20a *g) 61static int gb10b_init_bar2_vm(struct gk20a *g)
29{ 62{
30 int err; 63 int err;
@@ -79,6 +112,7 @@ void gp10b_init_mm(struct gpu_ops *gops)
79{ 112{
80 gm20b_init_mm(gops); 113 gm20b_init_mm(gops);
81 gops->mm.get_physical_addr_bits = gk20a_mm_get_physical_addr_bits; 114 gops->mm.get_physical_addr_bits = gk20a_mm_get_physical_addr_bits;
115 gops->mm.init_mm_setup_hw = gp10b_init_mm_setup_hw;
82 gops->mm.init_bar2_vm = gb10b_init_bar2_vm; 116 gops->mm.init_bar2_vm = gb10b_init_bar2_vm;
83 gops->mm.init_bar2_mm_hw_setup = gb10b_init_bar2_mm_hw_setup; 117 gops->mm.init_bar2_mm_hw_setup = gb10b_init_bar2_mm_hw_setup;
84} 118}