summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/fifo_vgpu.c')
-rw-r--r--drivers/gpu/nvgpu/vgpu/fifo_vgpu.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
index fb19db4a..0895b757 100644
--- a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
@@ -560,6 +560,28 @@ static int vgpu_channel_set_priority(struct channel_gk20a *ch, u32 priority)
560 return err ? err : msg.ret; 560 return err ? err : msg.ret;
561} 561}
562 562
563static int vgpu_fifo_tsg_set_runlist_interleave(struct gk20a *g,
564 u32 tsgid,
565 u32 runlist_id,
566 u32 new_level)
567{
568 struct gk20a_platform *platform = gk20a_get_platform(g->dev);
569 struct tegra_vgpu_cmd_msg msg = {0};
570 struct tegra_vgpu_tsg_runlist_interleave_params *p =
571 &msg.params.tsg_interleave;
572 int err;
573
574 gk20a_dbg_fn("");
575
576 msg.cmd = TEGRA_VGPU_CMD_TSG_SET_RUNLIST_INTERLEAVE;
577 msg.handle = platform->virt_handle;
578 p->tsg_id = tsgid;
579 p->level = new_level;
580 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
581 WARN_ON(err || msg.ret);
582 return err ? err : msg.ret;
583}
584
563static int vgpu_fifo_set_runlist_interleave(struct gk20a *g, 585static int vgpu_fifo_set_runlist_interleave(struct gk20a *g,
564 u32 id, 586 u32 id,
565 bool is_tsg, 587 bool is_tsg,
@@ -575,9 +597,9 @@ static int vgpu_fifo_set_runlist_interleave(struct gk20a *g,
575 597
576 gk20a_dbg_fn(""); 598 gk20a_dbg_fn("");
577 599
578 /* FIXME: add support for TSGs */
579 if (is_tsg) 600 if (is_tsg)
580 return -ENOSYS; 601 return vgpu_fifo_tsg_set_runlist_interleave(g, id,
602 runlist_id, new_level);
581 603
582 ch = &g->fifo.channel[id]; 604 ch = &g->fifo.channel[id];
583 msg.cmd = TEGRA_VGPU_CMD_CHANNEL_SET_RUNLIST_INTERLEAVE; 605 msg.cmd = TEGRA_VGPU_CMD_CHANNEL_SET_RUNLIST_INTERLEAVE;