summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
diff options
context:
space:
mode:
authorRichard Zhao <rizhao@nvidia.com>2016-03-31 14:16:23 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-05-31 13:47:22 -0400
commitd707c5a444e024e1184213a75f44a73dbb1707d2 (patch)
tree09711370df9d9078e4f604e60983877bbf30b9de /drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
parenta71ce831fbbca3ba8602e0b07ecd630c4a39f376 (diff)
gpu: nvgpu: add tsg support for vgpu
- make tsg_gk20a.c call HAL for enable/disable channels - add preempt_tsg HAL callbacks - add tsg bind/unbind channel HAL callbacks - add according tsg callbacks for vgpu Bug 1702773 JIRA VFND-1003 Change-Id: I2cba74b3ebd3920ef09219a168e6433d9574dbe8 Signed-off-by: Richard Zhao <rizhao@nvidia.com> Reviewed-on: http://git-master/r/1144932 (cherry picked from commit c3787de7d38651d46969348f5acae2ba86b31ec7) Reviewed-on: http://git-master/r/1126942 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/fifo_vgpu.c')
-rw-r--r--drivers/gpu/nvgpu/vgpu/fifo_vgpu.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
index 8fcc7cc1..fb19db4a 100644
--- a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
@@ -410,6 +410,30 @@ static int vgpu_fifo_preempt_channel(struct gk20a *g, u32 hw_chid)
410 return err; 410 return err;
411} 411}
412 412
413static int vgpu_fifo_preempt_tsg(struct gk20a *g, u32 tsgid)
414{
415 struct gk20a_platform *platform = gk20a_get_platform(g->dev);
416 struct tegra_vgpu_cmd_msg msg;
417 struct tegra_vgpu_tsg_preempt_params *p =
418 &msg.params.tsg_preempt;
419 int err;
420
421 gk20a_dbg_fn("");
422
423 msg.cmd = TEGRA_VGPU_CMD_TSG_PREEMPT;
424 msg.handle = platform->virt_handle;
425 p->tsg_id = tsgid;
426 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
427 err = err ? err : msg.ret;
428
429 if (err) {
430 gk20a_err(dev_from_gk20a(g),
431 "preempt tsg %u failed\n", tsgid);
432 }
433
434 return err;
435}
436
413static int vgpu_submit_runlist(u64 handle, u8 runlist_id, u16 *runlist, 437static int vgpu_submit_runlist(u64 handle, u8 runlist_id, u16 *runlist,
414 u32 num_entries) 438 u32 num_entries)
415{ 439{
@@ -680,6 +704,7 @@ void vgpu_init_fifo_ops(struct gpu_ops *gops)
680 gops->fifo.free_inst = vgpu_channel_free_inst; 704 gops->fifo.free_inst = vgpu_channel_free_inst;
681 gops->fifo.setup_ramfc = vgpu_channel_setup_ramfc; 705 gops->fifo.setup_ramfc = vgpu_channel_setup_ramfc;
682 gops->fifo.preempt_channel = vgpu_fifo_preempt_channel; 706 gops->fifo.preempt_channel = vgpu_fifo_preempt_channel;
707 gops->fifo.preempt_tsg = vgpu_fifo_preempt_tsg;
683 gops->fifo.update_runlist = vgpu_fifo_update_runlist; 708 gops->fifo.update_runlist = vgpu_fifo_update_runlist;
684 gops->fifo.wait_engine_idle = vgpu_fifo_wait_engine_idle; 709 gops->fifo.wait_engine_idle = vgpu_fifo_wait_engine_idle;
685 gops->fifo.channel_set_priority = vgpu_channel_set_priority; 710 gops->fifo.channel_set_priority = vgpu_channel_set_priority;