summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2014-12-09 03:04:05 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 18:06:45 -0400
commit5df3d09e16c9d2f413cea53d16bc8ca42ae42d6e (patch)
tree0ed55cf8bdf0d265742d396c160f8dd0f1ac9d85 /drivers/gpu/nvgpu/gm20b/gr_gm20b.c
parent4ccb162da7a2414c344aecc9cdf85bee9c284caf (diff)
gpu: nvgpu: gm20b: Enable CTA preemption
CTA preemption needs to be enabled by setting a value in context. Set it for gm20b. Bug 200063473 Bug 1517461 Change-Id: I080cd71b348d08f834fd23ebbe7443dba79224db Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/661299
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/gr_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/gr_gm20b.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
index cba51cd6..5f544819 100644
--- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
@@ -775,6 +775,46 @@ static u32 gr_gm20b_pagepool_default_size(struct gk20a *g)
775 return gr_scc_pagepool_total_pages_hwmax_value_v(); 775 return gr_scc_pagepool_total_pages_hwmax_value_v();
776} 776}
777 777
778int gr_gm20b_alloc_gr_ctx(struct gk20a *g,
779 struct gr_ctx_desc **gr_ctx, struct vm_gk20a *vm,
780 u32 class,
781 u32 flags)
782{
783 int err;
784
785 gk20a_dbg_fn("");
786
787 err = gr_gk20a_alloc_gr_ctx(g, gr_ctx, vm, class, flags);
788 if (err)
789 return err;
790
791 if (class == MAXWELL_COMPUTE_B)
792 (*gr_ctx)->preempt_mode = NVGPU_GR_PREEMPTION_MODE_CTA;
793
794 gk20a_dbg_fn("done");
795
796 return 0;
797}
798
799static void gr_gm20b_update_ctxsw_preemption_mode(struct gk20a *g,
800 struct channel_ctx_gk20a *ch_ctx,
801 void *ctx_ptr)
802{
803 struct gr_ctx_desc *gr_ctx = ch_ctx->gr_ctx;
804 u32 cta_preempt_option =
805 ctxsw_prog_main_image_preemption_options_control_cta_enabled_f();
806
807 gk20a_dbg_fn("");
808
809 if (gr_ctx->preempt_mode == NVGPU_GR_PREEMPTION_MODE_CTA) {
810 gk20a_dbg_info("CTA: %x", cta_preempt_option);
811 gk20a_mem_wr32(ctx_ptr + ctxsw_prog_main_image_preemption_options_o(), 0,
812 cta_preempt_option);
813 }
814
815 gk20a_dbg_fn("done");
816}
817
778void gm20b_init_gr(struct gpu_ops *gops) 818void gm20b_init_gr(struct gpu_ops *gops)
779{ 819{
780 gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu; 820 gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu;
@@ -814,6 +854,8 @@ void gm20b_init_gr(struct gpu_ops *gops)
814 gops->gr.add_zbc_depth = gr_gk20a_add_zbc_depth; 854 gops->gr.add_zbc_depth = gr_gk20a_add_zbc_depth;
815 gops->gr.pagepool_default_size = gr_gm20b_pagepool_default_size; 855 gops->gr.pagepool_default_size = gr_gm20b_pagepool_default_size;
816 gops->gr.init_ctx_state = gr_gk20a_init_ctx_state; 856 gops->gr.init_ctx_state = gr_gk20a_init_ctx_state;
817 gops->gr.alloc_gr_ctx = gr_gk20a_alloc_gr_ctx; 857 gops->gr.alloc_gr_ctx = gr_gm20b_alloc_gr_ctx;
818 gops->gr.free_gr_ctx = gr_gk20a_free_gr_ctx; 858 gops->gr.free_gr_ctx = gr_gk20a_free_gr_ctx;
859 gops->gr.update_ctxsw_preemption_mode =
860 gr_gm20b_update_ctxsw_preemption_mode;
819} 861}