summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
diff options
context:
space:
mode:
authorLakshmanan M <lm@nvidia.com>2016-07-28 07:23:31 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:56:18 -0500
commitcae5d380d8b465f4d1389ae80d6cec1458951e29 (patch)
tree702e29a4ea43698a0ca4007565bb06051052ec5f /drivers/gpu/nvgpu/gp10b/gr_gp10b.c
parent436109f46d49a24b69bab7c85b112f192ab002c0 (diff)
gpu: nvgpu: Add preemption mode support for gp10x
Added preemption mode (WFI, GFXP, CTA and CILP) support for gp10x family gr class (PASCAL_B and PASCAL_COMPUTE_B). Bug 200221149 Change-Id: Ia8b781c5baedba660db5997f190a0b363286ed7f Signed-off-by: Lakshmanan M <lm@nvidia.com> Reviewed-on: http://git-master/r/1193209 Reviewed-by: Deepak Nibade <dnibade@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b/gr_gp10b.c')
-rw-r--r--drivers/gpu/nvgpu/gp10b/gr_gp10b.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
index 374242bf..ee73fed1 100644
--- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
@@ -992,9 +992,15 @@ static int gr_gp10b_alloc_gr_ctx(struct gk20a *g,
992 compute_preempt_mode = NVGPU_COMPUTE_PREEMPTION_MODE_CILP; 992 compute_preempt_mode = NVGPU_COMPUTE_PREEMPTION_MODE_CILP;
993 993
994 if (graphics_preempt_mode || compute_preempt_mode) { 994 if (graphics_preempt_mode || compute_preempt_mode) {
995 err = gr_gp10b_set_ctxsw_preemption_mode(g, *gr_ctx, vm, 995 if (g->ops.gr.set_ctxsw_preemption_mode) {
996 err = g->ops.gr.set_ctxsw_preemption_mode(g, *gr_ctx, vm,
996 class, graphics_preempt_mode, compute_preempt_mode); 997 class, graphics_preempt_mode, compute_preempt_mode);
997 if (err) 998 if (err) {
999 gk20a_err(dev_from_gk20a(g),
1000 "set_ctxsw_preemption_mode failed");
1001 goto fail_free_gk20a_ctx;
1002 }
1003 } else
998 goto fail_free_gk20a_ctx; 1004 goto fail_free_gk20a_ctx;
999 } 1005 }
1000 1006
@@ -2067,10 +2073,15 @@ static int gr_gp10b_set_preemption_mode(struct channel_gk20a *ch,
2067 vm = ch->vm; 2073 vm = ch->vm;
2068 } 2074 }
2069 2075
2070 err = gr_gp10b_set_ctxsw_preemption_mode(g, gr_ctx, vm, class, 2076 if (g->ops.gr.set_ctxsw_preemption_mode) {
2071 graphics_preempt_mode, compute_preempt_mode); 2077 err = g->ops.gr.set_ctxsw_preemption_mode(g, gr_ctx, vm, class,
2072 if (err) 2078 graphics_preempt_mode, compute_preempt_mode);
2073 return err; 2079 if (err) {
2080 gk20a_err(dev_from_gk20a(g),
2081 "set_ctxsw_preemption_mode failed");
2082 return err;
2083 }
2084 }
2074 2085
2075 if (gk20a_mem_begin(g, mem)) 2086 if (gk20a_mem_begin(g, mem))
2076 return -ENOMEM; 2087 return -ENOMEM;
@@ -2225,6 +2236,7 @@ void gp10b_init_gr(struct gpu_ops *gops)
2225 gops->gr.get_lrf_tex_ltc_dram_override = get_ecc_override_val; 2236 gops->gr.get_lrf_tex_ltc_dram_override = get_ecc_override_val;
2226 gops->gr.suspend_contexts = gr_gp10b_suspend_contexts; 2237 gops->gr.suspend_contexts = gr_gp10b_suspend_contexts;
2227 gops->gr.set_preemption_mode = gr_gp10b_set_preemption_mode; 2238 gops->gr.set_preemption_mode = gr_gp10b_set_preemption_mode;
2239 gops->gr.set_ctxsw_preemption_mode = gr_gp10b_set_ctxsw_preemption_mode;
2228 gops->gr.get_preemption_mode_flags = gr_gp10b_get_preemption_mode_flags; 2240 gops->gr.get_preemption_mode_flags = gr_gp10b_get_preemption_mode_flags;
2229 gops->gr.fuse_override = gp10b_gr_fuse_override; 2241 gops->gr.fuse_override = gp10b_gr_fuse_override;
2230 gops->gr.load_smid_config = gr_gp10b_load_smid_config; 2242 gops->gr.load_smid_config = gr_gp10b_load_smid_config;