diff options
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; |