summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index a082cd92..7c51afca 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -41,6 +41,7 @@
41 41
42#include "gk20a.h" 42#include "gk20a.h"
43#include "gr_gk20a.h" 43#include "gr_gk20a.h"
44#include "gk20a/fecs_trace_gk20a.h"
44#include "gr_ctx_gk20a.h" 45#include "gr_ctx_gk20a.h"
45#include "gr_pri_gk20a.h" 46#include "gr_pri_gk20a.h"
46#include "regops_gk20a.h" 47#include "regops_gk20a.h"
@@ -2499,6 +2500,10 @@ int gr_gk20a_init_ctx_state(struct gk20a *g)
2499 return ret; 2500 return ret;
2500 } 2501 }
2501 g->gr.ctx_vars.priv_access_map_size = 512 * 1024; 2502 g->gr.ctx_vars.priv_access_map_size = 512 * 1024;
2503#ifdef CONFIG_GK20A_CTXSW_TRACE
2504 g->gr.ctx_vars.fecs_trace_buffer_size =
2505 gk20a_fecs_trace_buffer_size(g);
2506#endif
2502 } 2507 }
2503 2508
2504 nvgpu_log_fn(g, "done"); 2509 nvgpu_log_fn(g, "done");
@@ -2630,6 +2635,20 @@ int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g)
2630 if (err) 2635 if (err)
2631 goto clean_up; 2636 goto clean_up;
2632 2637
2638#ifdef CONFIG_GK20A_CTXSW_TRACE
2639 nvgpu_log_info(g, "fecs_trace_buffer_size : %d",
2640 gr->ctx_vars.fecs_trace_buffer_size);
2641
2642 err = nvgpu_dma_alloc_sys(g,
2643 gr->ctx_vars.fecs_trace_buffer_size,
2644 &gr->global_ctx_buffer[FECS_TRACE_BUFFER].mem);
2645 if (err)
2646 goto clean_up;
2647
2648 gr->global_ctx_buffer[FECS_TRACE_BUFFER].destroy =
2649 gk20a_gr_destroy_ctx_buffer;
2650#endif
2651
2633 nvgpu_log_fn(g, "done"); 2652 nvgpu_log_fn(g, "done");
2634 return 0; 2653 return 0;
2635 2654
@@ -2769,6 +2788,21 @@ int gr_gk20a_map_global_ctx_buffers(struct gk20a *g,
2769 g_bfr_index[PRIV_ACCESS_MAP_VA] = PRIV_ACCESS_MAP; 2788 g_bfr_index[PRIV_ACCESS_MAP_VA] = PRIV_ACCESS_MAP;
2770 2789
2771 tsg->gr_ctx.global_ctx_buffer_mapped = true; 2790 tsg->gr_ctx.global_ctx_buffer_mapped = true;
2791
2792#ifdef CONFIG_GK20A_CTXSW_TRACE
2793 /* FECS trace buffer */
2794 if (nvgpu_is_enabled(g, NVGPU_FECS_TRACE_VA)) {
2795 mem = &gr->global_ctx_buffer[FECS_TRACE_BUFFER].mem;
2796 gpu_va = nvgpu_gmmu_map(ch_vm, mem, mem->size, 0,
2797 gk20a_mem_flag_none, true, mem->aperture);
2798 if (!gpu_va)
2799 goto clean_up;
2800 g_bfr_va[FECS_TRACE_BUFFER_VA] = gpu_va;
2801 g_bfr_size[FECS_TRACE_BUFFER_VA] = mem->size;
2802 g_bfr_index[FECS_TRACE_BUFFER_VA] = FECS_TRACE_BUFFER;
2803 }
2804#endif
2805
2772 return 0; 2806 return 0;
2773 2807
2774clean_up: 2808clean_up:
@@ -3050,6 +3084,14 @@ int gk20a_alloc_obj_ctx(struct channel_gk20a *c, u32 class_num, u32 flags)
3050 "fail to commit gr ctx buffer"); 3084 "fail to commit gr ctx buffer");
3051 goto out; 3085 goto out;
3052 } 3086 }
3087#ifdef CONFIG_GK20A_CTXSW_TRACE
3088 if (g->ops.fecs_trace.bind_channel && !c->vpr) {
3089 err = g->ops.fecs_trace.bind_channel(g, c);
3090 if (err)
3091 nvgpu_warn(g,
3092 "fail to bind channel for ctxsw trace");
3093 }
3094#endif
3053 } 3095 }
3054 3096
3055 nvgpu_log_fn(g, "done"); 3097 nvgpu_log_fn(g, "done");