diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/mm_gp10b.c | 34 |
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 | ||
28 | static 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 | |||
28 | static int gb10b_init_bar2_vm(struct gk20a *g) | 61 | static 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 | } |