summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c
diff options
context:
space:
mode:
authorSeshendra Gadagottu <sgadagottu@nvidia.com>2015-10-08 14:32:47 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:52:08 -0500
commit9f2d5c97f9555ecae52347121101d89fdb366184 (patch)
tree107f926f8c4f0a3dc7823f37fd5f08769ff15357 /drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c
parent50f5c87f1cb452fc4338cf932c35428aeee57dd7 (diff)
gpu: nvgpu: gp10b: create fault buffer only once
Create only one instance of replayable fault buffer mapping. Change-Id: Id766298f338ce54cfca7510cbb9e4528ef1945a3 Signed-off-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: http://git-master/r/814615 (cherry picked from commit 422d2ced384220668347dc8422876d75f6e8807d) Reviewed-on: http://git-master/r/817696 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c')
-rw-r--r--drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c b/drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c
index ba91403c..59af5cde 100644
--- a/drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c
@@ -33,11 +33,14 @@ int gp10b_replayable_pagefault_buffer_init(struct gk20a *g)
33 33
34 gk20a_dbg_fn(""); 34 gk20a_dbg_fn("");
35 35
36 err = gk20a_gmmu_alloc_map(vm, rbfb_size, &g->mm.bar2_desc); 36 if (!g->mm.bar2_desc.gpu_va) {
37 if (err) { 37 err = gk20a_gmmu_alloc_map(vm, rbfb_size,
38 dev_err(dev_from_gk20a(g), "%s Error in replayable fault buffer\n", 38 &g->mm.bar2_desc);
39 __func__); 39 if (err) {
40 return err; 40 dev_err(dev_from_gk20a(g),
41 "%s Error in replayable fault buffer\n", __func__);
42 return err;
43 }
41 } 44 }
42 addr_lo = u64_lo32(g->mm.bar2_desc.gpu_va >> 12); 45 addr_lo = u64_lo32(g->mm.bar2_desc.gpu_va >> 12);
43 addr_hi = u64_hi32(g->mm.bar2_desc.gpu_va); 46 addr_hi = u64_hi32(g->mm.bar2_desc.gpu_va);
@@ -47,7 +50,6 @@ int gp10b_replayable_pagefault_buffer_init(struct gk20a *g)
47 gk20a_writel(g, fifo_replay_fault_buffer_lo_r(), 50 gk20a_writel(g, fifo_replay_fault_buffer_lo_r(),
48 fifo_replay_fault_buffer_lo_base_f(addr_lo) | 51 fifo_replay_fault_buffer_lo_base_f(addr_lo) |
49 fifo_replay_fault_buffer_lo_enable_true_v()); 52 fifo_replay_fault_buffer_lo_enable_true_v());
50
51 gk20a_dbg_fn("done"); 53 gk20a_dbg_fn("done");
52 return 0; 54 return 0;
53} 55}
@@ -55,12 +57,14 @@ int gp10b_replayable_pagefault_buffer_init(struct gk20a *g)
55void gp10b_replayable_pagefault_buffer_deinit(struct gk20a *g) 57void gp10b_replayable_pagefault_buffer_deinit(struct gk20a *g)
56{ 58{
57 struct vm_gk20a *vm = &g->mm.bar2.vm; 59 struct vm_gk20a *vm = &g->mm.bar2.vm;
60
58 gk20a_gmmu_unmap_free(vm, &g->mm.bar2_desc); 61 gk20a_gmmu_unmap_free(vm, &g->mm.bar2_desc);
59} 62}
60 63
61u32 gp10b_replayable_pagefault_buffer_get_index(struct gk20a *g) 64u32 gp10b_replayable_pagefault_buffer_get_index(struct gk20a *g)
62{ 65{
63 u32 get_idx = 0; 66 u32 get_idx = 0;
67
64 gk20a_dbg_fn(""); 68 gk20a_dbg_fn("");
65 69
66 get_idx = gk20a_readl(g, fifo_replay_fault_buffer_get_r()); 70 get_idx = gk20a_readl(g, fifo_replay_fault_buffer_get_r());