diff options
author | Richard Zhao <rizhao@nvidia.com> | 2016-03-31 14:16:23 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-05-31 13:47:22 -0400 |
commit | d707c5a444e024e1184213a75f44a73dbb1707d2 (patch) | |
tree | 09711370df9d9078e4f604e60983877bbf30b9de /drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | |
parent | a71ce831fbbca3ba8602e0b07ecd630c4a39f376 (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.c | 25 |
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 | ||
413 | static 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 | |||
413 | static int vgpu_submit_runlist(u64 handle, u8 runlist_id, u16 *runlist, | 437 | static 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; |