From f7e37e6847896992077fe8d434ea14a751318175 Mon Sep 17 00:00:00 2001 From: Peter Daifuku Date: Wed, 21 Jun 2017 16:44:55 -0700 Subject: gpu: nvgpu: vgpu: perfbuffer support Add vgpu support for ModeE perfbuffers - VM allocation is handled by the kernel, with final mapping handled by the RM server - Enabling/disabling the perfbuffer is handled by the RM server Bug 1880196 JIRA EVLR-1074 Change-Id: Ifbeb5ede6b07e2e112b930c602c22b66a58ac920 Signed-off-by: Peter Daifuku Reviewed-on: https://git-master/r/1506747 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/vgpu/dbg_vgpu.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'drivers/gpu/nvgpu/vgpu') diff --git a/drivers/gpu/nvgpu/vgpu/dbg_vgpu.c b/drivers/gpu/nvgpu/vgpu/dbg_vgpu.c index b9cbcead..72faf76c 100644 --- a/drivers/gpu/nvgpu/vgpu/dbg_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/dbg_vgpu.c @@ -178,6 +178,37 @@ static void vgpu_release_profiler_reservation( vgpu_sendrecv_prof_cmd(dbg_s, TEGRA_VGPU_PROF_RELEASE); } +static int vgpu_sendrecv_perfbuf_cmd(struct gk20a *g, u64 offset, u32 size) +{ + struct mm_gk20a *mm = &g->mm; + struct vm_gk20a *vm = mm->perfbuf.vm; + struct tegra_vgpu_cmd_msg msg; + struct tegra_vgpu_perfbuf_mgt_params *p = + &msg.params.perfbuf_management; + int err; + + msg.cmd = TEGRA_VGPU_CMD_PERFBUF_MGT; + msg.handle = vgpu_get_handle(g); + + p->vm_handle = vm->handle; + p->offset = offset; + p->size = size; + + err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg)); + err = err ? err : msg.ret; + return err; +} + +static int vgpu_perfbuffer_enable(struct gk20a *g, u64 offset, u32 size) +{ + return vgpu_sendrecv_perfbuf_cmd(g, offset, size); +} + +static int vgpu_perfbuffer_disable(struct gk20a *g) +{ + return vgpu_sendrecv_perfbuf_cmd(g, 0, 0); +} + void vgpu_init_dbg_session_ops(struct gpu_ops *gops) { gops->dbg_session_ops.exec_reg_ops = vgpu_exec_regops; @@ -188,4 +219,6 @@ void vgpu_init_dbg_session_ops(struct gpu_ops *gops) vgpu_check_and_set_context_reservation; gops->dbg_session_ops.release_profiler_reservation = vgpu_release_profiler_reservation; + gops->dbg_session_ops.perfbuffer_enable = vgpu_perfbuffer_enable; + gops->dbg_session_ops.perfbuffer_disable = vgpu_perfbuffer_disable; } -- cgit v1.2.2