From 9f2d5c97f9555ecae52347121101d89fdb366184 Mon Sep 17 00:00:00 2001 From: Seshendra Gadagottu Date: Thu, 8 Oct 2015 11:32:47 -0700 Subject: 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 Reviewed-on: http://git-master/r/814615 (cherry picked from commit 422d2ced384220668347dc8422876d75f6e8807d) Reviewed-on: http://git-master/r/817696 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'drivers/gpu/nvgpu/gp10b/rpfb_gp10b.c') 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) gk20a_dbg_fn(""); - err = gk20a_gmmu_alloc_map(vm, rbfb_size, &g->mm.bar2_desc); - if (err) { - dev_err(dev_from_gk20a(g), "%s Error in replayable fault buffer\n", - __func__); - return err; + if (!g->mm.bar2_desc.gpu_va) { + err = gk20a_gmmu_alloc_map(vm, rbfb_size, + &g->mm.bar2_desc); + if (err) { + dev_err(dev_from_gk20a(g), + "%s Error in replayable fault buffer\n", __func__); + return err; + } } addr_lo = u64_lo32(g->mm.bar2_desc.gpu_va >> 12); addr_hi = u64_hi32(g->mm.bar2_desc.gpu_va); @@ -47,7 +50,6 @@ int gp10b_replayable_pagefault_buffer_init(struct gk20a *g) gk20a_writel(g, fifo_replay_fault_buffer_lo_r(), fifo_replay_fault_buffer_lo_base_f(addr_lo) | fifo_replay_fault_buffer_lo_enable_true_v()); - gk20a_dbg_fn("done"); return 0; } @@ -55,12 +57,14 @@ int gp10b_replayable_pagefault_buffer_init(struct gk20a *g) void gp10b_replayable_pagefault_buffer_deinit(struct gk20a *g) { struct vm_gk20a *vm = &g->mm.bar2.vm; + gk20a_gmmu_unmap_free(vm, &g->mm.bar2_desc); } u32 gp10b_replayable_pagefault_buffer_get_index(struct gk20a *g) { u32 get_idx = 0; + gk20a_dbg_fn(""); get_idx = gk20a_readl(g, fifo_replay_fault_buffer_get_r()); -- cgit v1.2.2