diff options
author | Vaibhav Kachore <vkachore@nvidia.com> | 2018-02-22 06:15:30 -0500 |
---|---|---|
committer | Tejal Kudav <tkudav@nvidia.com> | 2018-06-14 09:44:08 -0400 |
commit | ca3215c6b23c7d855ced899d8090aaa8ce9a9fa3 (patch) | |
tree | 710114451d4838f82a9e9998db52b81cf76d68c9 /drivers/gpu/nvgpu/gk20a/gr_gk20a.c | |
parent | 97d697a8481ca0c348102f04165903e3205302ed (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.c | 42 |
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 | ||
2774 | clean_up: | 2808 | clean_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"); |