diff options
author | Lakshmanan M <lm@nvidia.com> | 2016-07-28 07:23:31 -0400 |
---|---|---|
committer | Deepak Nibade <dnibade@nvidia.com> | 2016-12-27 04:56:18 -0500 |
commit | cae5d380d8b465f4d1389ae80d6cec1458951e29 (patch) | |
tree | 702e29a4ea43698a0ca4007565bb06051052ec5f /drivers/gpu/nvgpu/gp10b/gr_gp10b.c | |
parent | 436109f46d49a24b69bab7c85b112f192ab002c0 (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.c | 24 |
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; |