summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu
diff options
context:
space:
mode:
authorPeter Daifuku <pdaifuku@nvidia.com>2017-06-21 19:44:55 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-06-27 18:44:11 -0400
commitf7e37e6847896992077fe8d434ea14a751318175 (patch)
treea169c5648668c121ecb1b48d680843d4369cfa10 /drivers/gpu/nvgpu/vgpu
parentcadd5120d33e9ed5b70c620c7a54b2c9e338c1e4 (diff)
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 <pdaifuku@nvidia.com> Reviewed-on: https://git-master/r/1506747 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu')
-rw-r--r--drivers/gpu/nvgpu/vgpu/dbg_vgpu.c33
1 files changed, 33 insertions, 0 deletions
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(
178 vgpu_sendrecv_prof_cmd(dbg_s, TEGRA_VGPU_PROF_RELEASE); 178 vgpu_sendrecv_prof_cmd(dbg_s, TEGRA_VGPU_PROF_RELEASE);
179} 179}
180 180
181static int vgpu_sendrecv_perfbuf_cmd(struct gk20a *g, u64 offset, u32 size)
182{
183 struct mm_gk20a *mm = &g->mm;
184 struct vm_gk20a *vm = mm->perfbuf.vm;
185 struct tegra_vgpu_cmd_msg msg;
186 struct tegra_vgpu_perfbuf_mgt_params *p =
187 &msg.params.perfbuf_management;
188 int err;
189
190 msg.cmd = TEGRA_VGPU_CMD_PERFBUF_MGT;
191 msg.handle = vgpu_get_handle(g);
192
193 p->vm_handle = vm->handle;
194 p->offset = offset;
195 p->size = size;
196
197 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
198 err = err ? err : msg.ret;
199 return err;
200}
201
202static int vgpu_perfbuffer_enable(struct gk20a *g, u64 offset, u32 size)
203{
204 return vgpu_sendrecv_perfbuf_cmd(g, offset, size);
205}
206
207static int vgpu_perfbuffer_disable(struct gk20a *g)
208{
209 return vgpu_sendrecv_perfbuf_cmd(g, 0, 0);
210}
211
181void vgpu_init_dbg_session_ops(struct gpu_ops *gops) 212void vgpu_init_dbg_session_ops(struct gpu_ops *gops)
182{ 213{
183 gops->dbg_session_ops.exec_reg_ops = vgpu_exec_regops; 214 gops->dbg_session_ops.exec_reg_ops = vgpu_exec_regops;
@@ -188,4 +219,6 @@ void vgpu_init_dbg_session_ops(struct gpu_ops *gops)
188 vgpu_check_and_set_context_reservation; 219 vgpu_check_and_set_context_reservation;
189 gops->dbg_session_ops.release_profiler_reservation = 220 gops->dbg_session_ops.release_profiler_reservation =
190 vgpu_release_profiler_reservation; 221 vgpu_release_profiler_reservation;
222 gops->dbg_session_ops.perfbuffer_enable = vgpu_perfbuffer_enable;
223 gops->dbg_session_ops.perfbuffer_disable = vgpu_perfbuffer_disable;
191} 224}