summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu/vgpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/vgpu.c')
-rw-r--r--drivers/gpu/nvgpu/vgpu/vgpu.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/vgpu.c b/drivers/gpu/nvgpu/vgpu/vgpu.c
index 0d5dd27b..399b7c67 100644
--- a/drivers/gpu/nvgpu/vgpu/vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/vgpu.c
@@ -312,6 +312,29 @@ static int vgpu_init_gpu_characteristics(struct gk20a *g)
312 return 0; 312 return 0;
313} 313}
314 314
315static int vgpu_read_ptimer(struct gk20a *g, u64 *value)
316{
317 struct gk20a_platform *platform = gk20a_get_platform(g->dev);
318 struct tegra_vgpu_cmd_msg msg = {0};
319 struct tegra_vgpu_read_ptimer_params *p = &msg.params.read_ptimer;
320 int err;
321
322 gk20a_dbg_fn("");
323
324 msg.cmd = TEGRA_VGPU_CMD_READ_PTIMER;
325 msg.handle = platform->virt_handle;
326
327 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
328 err = err ? err : msg.ret;
329 if (!err)
330 *value = p->time;
331 else
332 gk20a_err(dev_from_gk20a(g),
333 "vgpu read ptimer failed, err=%d", err);
334
335 return err;
336}
337
315void vgpu_init_hal_common(struct gk20a *g) 338void vgpu_init_hal_common(struct gk20a *g)
316{ 339{
317 struct gpu_ops *gops = &g->ops; 340 struct gpu_ops *gops = &g->ops;
@@ -324,6 +347,7 @@ void vgpu_init_hal_common(struct gk20a *g)
324 vgpu_init_fecs_trace_ops(gops); 347 vgpu_init_fecs_trace_ops(gops);
325 vgpu_init_tsg_ops(gops); 348 vgpu_init_tsg_ops(gops);
326 gops->chip_init_gpu_characteristics = vgpu_init_gpu_characteristics; 349 gops->chip_init_gpu_characteristics = vgpu_init_gpu_characteristics;
350 gops->read_ptimer = vgpu_read_ptimer;
327} 351}
328 352
329static int vgpu_init_hal(struct gk20a *g) 353static int vgpu_init_hal(struct gk20a *g)