summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
authorVaibhav Kachore <vkachore@nvidia.com>2018-02-22 06:15:30 -0500
committerTejal Kudav <tkudav@nvidia.com>2018-06-14 09:44:08 -0400
commitca3215c6b23c7d855ced899d8090aaa8ce9a9fa3 (patch)
tree710114451d4838f82a9e9998db52b81cf76d68c9 /drivers/gpu/nvgpu/gk20a/gr_gk20a.c
parent97d697a8481ca0c348102f04165903e3205302ed (diff)
gpu: nvgpu: add support for FECS VA
- On t186, ucode expects physical address to be programmed for FECS trace buffer. - On t194, ucode expects GPU VA to be programmed for FECS trace buffer. This patch adds extra support to handle this change for linux native. - Increase the size of FECS trace buffer (as few entries were getting dropped due to overflow of FECS trace buffer.) - This moves FECS trace buffer handling in global context buffer. - This adds extra check for updation of mailbox1 register. (Bug 200417403) EVLR-2077 Change-Id: I7c3324ce9341976a1375e0afe6c53c424a053723 Signed-off-by: Vaibhav Kachore <vkachore@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1536028 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Nirav Patel <nipatel@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
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");