summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
authorseshendra Gadagottu <sgadagottu@nvidia.com>2017-01-24 18:38:02 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-05-10 17:16:06 -0400
commit2baab4e49e8bb2d5c25759660bc1ae2382d9cb1b (patch)
tree268411c22d20b9245676a192e85b63f55e005f1c /drivers/gpu/nvgpu/gk20a
parent8b981f3c64897128fd2a94c03a819bbca5edd4da (diff)
gpu: nvgpu: changes related to preemption
Added function pointers to check chip specific valid gfx class and compute class. Also added function pointer to update ctx header with preemption buffer pointers. Bug 200292090 Change-Id: I8119ee082e2abb67186a8ac07088f8db7f410ba1 Signed-off-by: seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: http://git-master/r/1293502 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h4
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c18
2 files changed, 22 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index c8d06b4f..96ca69a3 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -194,6 +194,8 @@ struct gpu_ops {
194 void (*set_circular_buffer_size)(struct gk20a *g, u32 data); 194 void (*set_circular_buffer_size)(struct gk20a *g, u32 data);
195 void (*enable_hww_exceptions)(struct gk20a *g); 195 void (*enable_hww_exceptions)(struct gk20a *g);
196 bool (*is_valid_class)(struct gk20a *g, u32 class_num); 196 bool (*is_valid_class)(struct gk20a *g, u32 class_num);
197 bool (*is_valid_gfx_class)(struct gk20a *g, u32 class_num);
198 bool (*is_valid_compute_class)(struct gk20a *g, u32 class_num);
197 void (*get_sm_dsm_perf_regs)(struct gk20a *g, 199 void (*get_sm_dsm_perf_regs)(struct gk20a *g,
198 u32 *num_sm_dsm_perf_regs, 200 u32 *num_sm_dsm_perf_regs,
199 u32 **sm_dsm_perf_regs, 201 u32 **sm_dsm_perf_regs,
@@ -354,6 +356,8 @@ struct gpu_ops {
354 struct nvgpu_mem *mem, u64 gpu_va); 356 struct nvgpu_mem *mem, u64 gpu_va);
355 void (*write_pm_ptr)(struct gk20a *g, 357 void (*write_pm_ptr)(struct gk20a *g,
356 struct nvgpu_mem *mem, u64 gpu_va); 358 struct nvgpu_mem *mem, u64 gpu_va);
359 void (*write_preemption_ptr)(struct gk20a *g,
360 struct nvgpu_mem *mem, u64 gpu_va);
357 void (*init_elcg_mode)(struct gk20a *g, u32 mode, u32 engine); 361 void (*init_elcg_mode)(struct gk20a *g, u32 mode, u32 engine);
358 void (*load_tpc_mask)(struct gk20a *g); 362 void (*load_tpc_mask)(struct gk20a *g);
359 int (*inval_icache)(struct gk20a *g, struct channel_gk20a *ch); 363 int (*inval_icache)(struct gk20a *g, struct channel_gk20a *ch);
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 3140c285..77a947de 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -3113,6 +3113,22 @@ static bool gr_gk20a_is_valid_class(struct gk20a *g, u32 class_num)
3113 return valid; 3113 return valid;
3114} 3114}
3115 3115
3116static bool gr_gk20a_is_valid_gfx_class(struct gk20a *g, u32 class_num)
3117{
3118 if (class_num == KEPLER_C)
3119 return true;
3120 else
3121 return false;
3122}
3123
3124static bool gr_gk20a_is_valid_compute_class(struct gk20a *g, u32 class_num)
3125{
3126 if (class_num == KEPLER_COMPUTE_A)
3127 return true;
3128 else
3129 return false;
3130}
3131
3116int gk20a_alloc_obj_ctx(struct channel_gk20a *c, 3132int gk20a_alloc_obj_ctx(struct channel_gk20a *c,
3117 struct nvgpu_alloc_obj_ctx_args *args) 3133 struct nvgpu_alloc_obj_ctx_args *args)
3118{ 3134{
@@ -9462,6 +9478,8 @@ void gk20a_init_gr_ops(struct gpu_ops *gops)
9462 gk20a_gr_set_alpha_circular_buffer_size; 9478 gk20a_gr_set_alpha_circular_buffer_size;
9463 gops->gr.enable_hww_exceptions = gr_gk20a_enable_hww_exceptions; 9479 gops->gr.enable_hww_exceptions = gr_gk20a_enable_hww_exceptions;
9464 gops->gr.is_valid_class = gr_gk20a_is_valid_class; 9480 gops->gr.is_valid_class = gr_gk20a_is_valid_class;
9481 gops->gr.is_valid_gfx_class = gr_gk20a_is_valid_gfx_class;
9482 gops->gr.is_valid_compute_class = gr_gk20a_is_valid_compute_class;
9465 gops->gr.get_sm_dsm_perf_regs = gr_gk20a_get_sm_dsm_perf_regs; 9483 gops->gr.get_sm_dsm_perf_regs = gr_gk20a_get_sm_dsm_perf_regs;
9466 gops->gr.get_sm_dsm_perf_ctrl_regs = gr_gk20a_get_sm_dsm_perf_ctrl_regs; 9484 gops->gr.get_sm_dsm_perf_ctrl_regs = gr_gk20a_get_sm_dsm_perf_ctrl_regs;
9467 gops->gr.init_fs_state = gr_gk20a_init_fs_state; 9485 gops->gr.init_fs_state = gr_gk20a_init_fs_state;