summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b/gr_gp10b.c')
-rw-r--r--drivers/gpu/nvgpu/gp10b/gr_gp10b.c78
1 files changed, 39 insertions, 39 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
index b36eff8f..07f1014f 100644
--- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
@@ -958,52 +958,51 @@ fail_free_gk20a_ctx:
958} 958}
959 959
960static void dump_ctx_switch_stats(struct gk20a *g, struct vm_gk20a *vm, 960static void dump_ctx_switch_stats(struct gk20a *g, struct vm_gk20a *vm,
961 struct gr_ctx_desc *gr_ctx) { 961 struct gr_ctx_desc *gr_ctx)
962 void *ctx_ptr = vmap(gr_ctx->mem.pages, 962{
963 PAGE_ALIGN(gr_ctx->mem.size) >> PAGE_SHIFT, 963 struct mem_desc *mem = &gr_ctx->mem;
964 0, pgprot_writecombine(PAGE_KERNEL)); 964
965 if (!ctx_ptr) { 965 if (gk20a_mem_begin(g, mem)) {
966 WARN_ON("Cannot map context"); 966 WARN_ON("Cannot map context");
967 return; 967 return;
968 } 968 }
969 gk20a_err(dev_from_gk20a(g), "ctxsw_prog_main_image_magic_value_o : %x (expect %x)\n", 969 gk20a_err(dev_from_gk20a(g), "ctxsw_prog_main_image_magic_value_o : %x (expect %x)\n",
970 gk20a_mem_rd32(ctx_ptr + 970 gk20a_mem_rd(g, mem,
971 ctxsw_prog_main_image_magic_value_o(), 0), 971 ctxsw_prog_main_image_magic_value_o()),
972 ctxsw_prog_main_image_magic_value_v_value_v()); 972 ctxsw_prog_main_image_magic_value_v_value_v());
973 973
974 gk20a_err(dev_from_gk20a(g), "ctxsw_prog_main_image_context_timestamp_buffer_ptr_hi : %x\n", 974 gk20a_err(dev_from_gk20a(g), "ctxsw_prog_main_image_context_timestamp_buffer_ptr_hi : %x\n",
975 gk20a_mem_rd32(ctx_ptr + 975 gk20a_mem_rd(g, mem,
976 ctxsw_prog_main_image_context_timestamp_buffer_ptr_hi_o(), 0)); 976 ctxsw_prog_main_image_context_timestamp_buffer_ptr_hi_o()));
977 977
978 gk20a_err(dev_from_gk20a(g), "ctxsw_prog_main_image_context_timestamp_buffer_ptr : %x\n", 978 gk20a_err(dev_from_gk20a(g), "ctxsw_prog_main_image_context_timestamp_buffer_ptr : %x\n",
979 gk20a_mem_rd32(ctx_ptr + 979 gk20a_mem_rd(g, mem,
980 ctxsw_prog_main_image_context_timestamp_buffer_ptr_o(), 0)); 980 ctxsw_prog_main_image_context_timestamp_buffer_ptr_o()));
981 981
982 gk20a_err(dev_from_gk20a(g), "ctxsw_prog_main_image_context_timestamp_buffer_control : %x\n", 982 gk20a_err(dev_from_gk20a(g), "ctxsw_prog_main_image_context_timestamp_buffer_control : %x\n",
983 gk20a_mem_rd32(ctx_ptr + 983 gk20a_mem_rd(g, mem,
984 ctxsw_prog_main_image_context_timestamp_buffer_control_o(), 0)); 984 ctxsw_prog_main_image_context_timestamp_buffer_control_o()));
985 985
986 gk20a_err(dev_from_gk20a(g), "NUM_SAVE_OPERATIONS : %d\n", 986 gk20a_err(dev_from_gk20a(g), "NUM_SAVE_OPERATIONS : %d\n",
987 gk20a_mem_rd32(ctx_ptr + 987 gk20a_mem_rd(g, mem,
988 ctxsw_prog_main_image_num_save_ops_o(), 0)); 988 ctxsw_prog_main_image_num_save_ops_o()));
989 gk20a_err(dev_from_gk20a(g), "WFI_SAVE_OPERATIONS : %d\n", 989 gk20a_err(dev_from_gk20a(g), "WFI_SAVE_OPERATIONS : %d\n",
990 gk20a_mem_rd32(ctx_ptr + 990 gk20a_mem_rd(g, mem,
991 ctxsw_prog_main_image_num_wfi_save_ops_o(), 0)); 991 ctxsw_prog_main_image_num_wfi_save_ops_o()));
992 gk20a_err(dev_from_gk20a(g), "CTA_SAVE_OPERATIONS : %d\n", 992 gk20a_err(dev_from_gk20a(g), "CTA_SAVE_OPERATIONS : %d\n",
993 gk20a_mem_rd32(ctx_ptr + 993 gk20a_mem_rd(g, mem,
994 ctxsw_prog_main_image_num_cta_save_ops_o(), 0)); 994 ctxsw_prog_main_image_num_cta_save_ops_o()));
995 gk20a_err(dev_from_gk20a(g), "GFXP_SAVE_OPERATIONS : %d\n", 995 gk20a_err(dev_from_gk20a(g), "GFXP_SAVE_OPERATIONS : %d\n",
996 gk20a_mem_rd32(ctx_ptr + 996 gk20a_mem_rd(g, mem,
997 ctxsw_prog_main_image_num_gfxp_save_ops_o(), 0)); 997 ctxsw_prog_main_image_num_gfxp_save_ops_o()));
998 gk20a_err(dev_from_gk20a(g), "CILP_SAVE_OPERATIONS : %d\n", 998 gk20a_err(dev_from_gk20a(g), "CILP_SAVE_OPERATIONS : %d\n",
999 gk20a_mem_rd32(ctx_ptr + 999 gk20a_mem_rd(g, mem,
1000 ctxsw_prog_main_image_num_cilp_save_ops_o(), 0)); 1000 ctxsw_prog_main_image_num_cilp_save_ops_o()));
1001 gk20a_err(dev_from_gk20a(g), 1001 gk20a_err(dev_from_gk20a(g),
1002 "image gfx preemption option (GFXP is 1) %x\n", 1002 "image gfx preemption option (GFXP is 1) %x\n",
1003 gk20a_mem_rd32(ctx_ptr + 1003 gk20a_mem_rd(g, mem,
1004 ctxsw_prog_main_image_graphics_preemption_options_o(), 1004 ctxsw_prog_main_image_graphics_preemption_options_o()));
1005 0)); 1005 gk20a_mem_end(g, mem);
1006 vunmap(ctx_ptr);
1007} 1006}
1008 1007
1009static void gr_gp10b_free_gr_ctx(struct gk20a *g, struct vm_gk20a *vm, 1008static void gr_gp10b_free_gr_ctx(struct gk20a *g, struct vm_gk20a *vm,
@@ -1028,7 +1027,7 @@ static void gr_gp10b_free_gr_ctx(struct gk20a *g, struct vm_gk20a *vm,
1028 1027
1029static void gr_gp10b_update_ctxsw_preemption_mode(struct gk20a *g, 1028static void gr_gp10b_update_ctxsw_preemption_mode(struct gk20a *g,
1030 struct channel_ctx_gk20a *ch_ctx, 1029 struct channel_ctx_gk20a *ch_ctx,
1031 void *ctx_ptr) 1030 struct mem_desc *mem)
1032{ 1031{
1033 struct gr_ctx_desc *gr_ctx = ch_ctx->gr_ctx; 1032 struct gr_ctx_desc *gr_ctx = ch_ctx->gr_ctx;
1034 u32 gfxp_preempt_option = 1033 u32 gfxp_preempt_option =
@@ -1043,19 +1042,22 @@ static void gr_gp10b_update_ctxsw_preemption_mode(struct gk20a *g,
1043 1042
1044 if (gr_ctx->graphics_preempt_mode == NVGPU_GRAPHICS_PREEMPTION_MODE_GFXP) { 1043 if (gr_ctx->graphics_preempt_mode == NVGPU_GRAPHICS_PREEMPTION_MODE_GFXP) {
1045 gk20a_dbg_info("GfxP: %x", gfxp_preempt_option); 1044 gk20a_dbg_info("GfxP: %x", gfxp_preempt_option);
1046 gk20a_mem_wr32(ctx_ptr + ctxsw_prog_main_image_graphics_preemption_options_o(), 0, 1045 gk20a_mem_wr(g, mem,
1046 ctxsw_prog_main_image_graphics_preemption_options_o(),
1047 gfxp_preempt_option); 1047 gfxp_preempt_option);
1048 } 1048 }
1049 1049
1050 if (gr_ctx->compute_preempt_mode == NVGPU_COMPUTE_PREEMPTION_MODE_CILP) { 1050 if (gr_ctx->compute_preempt_mode == NVGPU_COMPUTE_PREEMPTION_MODE_CILP) {
1051 gk20a_dbg_info("CILP: %x", cilp_preempt_option); 1051 gk20a_dbg_info("CILP: %x", cilp_preempt_option);
1052 gk20a_mem_wr32(ctx_ptr + ctxsw_prog_main_image_compute_preemption_options_o(), 0, 1052 gk20a_mem_wr(g, mem,
1053 ctxsw_prog_main_image_compute_preemption_options_o(),
1053 cilp_preempt_option); 1054 cilp_preempt_option);
1054 } 1055 }
1055 1056
1056 if (gr_ctx->compute_preempt_mode == NVGPU_COMPUTE_PREEMPTION_MODE_CTA) { 1057 if (gr_ctx->compute_preempt_mode == NVGPU_COMPUTE_PREEMPTION_MODE_CTA) {
1057 gk20a_dbg_info("CTA: %x", cta_preempt_option); 1058 gk20a_dbg_info("CTA: %x", cta_preempt_option);
1058 gk20a_mem_wr32(ctx_ptr + ctxsw_prog_main_image_compute_preemption_options_o(), 0, 1059 gk20a_mem_wr(g, mem,
1060 ctxsw_prog_main_image_compute_preemption_options_o(),
1059 cta_preempt_option); 1061 cta_preempt_option);
1060 } 1062 }
1061 1063
@@ -1064,7 +1066,8 @@ static void gr_gp10b_update_ctxsw_preemption_mode(struct gk20a *g,
1064 u32 size; 1066 u32 size;
1065 u32 cbes_reserve; 1067 u32 cbes_reserve;
1066 1068
1067 gk20a_mem_wr32(ctx_ptr + ctxsw_prog_main_image_full_preemption_ptr_o(), 0, 1069 gk20a_mem_wr(g, mem,
1070 ctxsw_prog_main_image_full_preemption_ptr_o(),
1068 gr_ctx->t18x.preempt_ctxsw_buffer.gpu_va >> 8); 1071 gr_ctx->t18x.preempt_ctxsw_buffer.gpu_va >> 8);
1069 1072
1070 err = gr_gk20a_ctx_patch_write_begin(g, ch_ctx); 1073 err = gr_gk20a_ctx_patch_write_begin(g, ch_ctx);
@@ -1931,7 +1934,7 @@ static int gr_gp10b_set_preemption_mode(struct channel_gk20a *ch,
1931 struct gk20a *g = ch->g; 1934 struct gk20a *g = ch->g;
1932 struct tsg_gk20a *tsg; 1935 struct tsg_gk20a *tsg;
1933 struct vm_gk20a *vm; 1936 struct vm_gk20a *vm;
1934 void *ctx_ptr; 1937 struct mem_desc *mem = &gr_ctx->mem;
1935 u32 class; 1938 u32 class;
1936 int err = 0; 1939 int err = 0;
1937 1940
@@ -1955,10 +1958,7 @@ static int gr_gp10b_set_preemption_mode(struct channel_gk20a *ch,
1955 if (err) 1958 if (err)
1956 return err; 1959 return err;
1957 1960
1958 ctx_ptr = vmap(gr_ctx->mem.pages, 1961 if (gk20a_mem_begin(g, mem))
1959 PAGE_ALIGN(ch_ctx->gr_ctx->mem.size) >> PAGE_SHIFT,
1960 0, pgprot_writecombine(PAGE_KERNEL));
1961 if (!ctx_ptr)
1962 return -ENOMEM; 1962 return -ENOMEM;
1963 1963
1964 g->ops.fifo.disable_channel(ch); 1964 g->ops.fifo.disable_channel(ch);
@@ -1967,14 +1967,14 @@ static int gr_gp10b_set_preemption_mode(struct channel_gk20a *ch,
1967 goto unmap_ctx; 1967 goto unmap_ctx;
1968 1968
1969 if (g->ops.gr.update_ctxsw_preemption_mode) { 1969 if (g->ops.gr.update_ctxsw_preemption_mode) {
1970 g->ops.gr.update_ctxsw_preemption_mode(ch->g, ch_ctx, ctx_ptr); 1970 g->ops.gr.update_ctxsw_preemption_mode(ch->g, ch_ctx, mem);
1971 g->ops.gr.commit_global_cb_manager(g, ch, true); 1971 g->ops.gr.commit_global_cb_manager(g, ch, true);
1972 } 1972 }
1973 1973
1974 g->ops.fifo.enable_channel(ch); 1974 g->ops.fifo.enable_channel(ch);
1975 1975
1976unmap_ctx: 1976unmap_ctx:
1977 vunmap(ctx_ptr); 1977 gk20a_mem_end(g, mem);
1978 1978
1979 return err; 1979 return err;
1980} 1980}