summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c
diff options
context:
space:
mode:
authorDeepak Bhosale <dbhosale@nvidia.com>2018-05-30 16:12:24 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-06-21 16:56:50 -0400
commite4e2c1882865163ad53eeaf96acf83802ffbec71 (patch)
treee433b02a198e6c943397da13c792ba75d0c285a2 /drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c
parent90fc8d653fba60a6f7b96e7d91ff02361a3a4890 (diff)
gpu: nvgpu: suspend/resume support for vGPU
- Added suspend/resume power management callbacks for vGPU - Added suspend/resume commands for communication between vGPU and RM server - Added suspend/resume message parameters for IVC messages between vGPU and RM server JIRA EVLR-2305 JIRA EVLR-2306 Change-Id: I83a314b4e125a53117d16c5ea72dbc5d8ef96ef7 Signed-off-by: Deepak Bhosale <dbhosale@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1735153 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Richard Zhao <rizhao@nvidia.com> Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Nirav Patel <nipatel@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c')
-rw-r--r--drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c b/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c
index a7612e54..25024e7d 100644
--- a/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c
+++ b/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c
@@ -147,7 +147,9 @@ int vgpu_pm_prepare_poweroff(struct device *dev)
147 if (!g->power_on) 147 if (!g->power_on)
148 return 0; 148 return 0;
149 149
150 ret = gk20a_channel_suspend(g); 150 if (g->ops.fifo.channel_suspend)
151 ret = g->ops.fifo.channel_suspend(g);
152
151 if (ret) 153 if (ret)
152 return ret; 154 return ret;
153 155
@@ -473,3 +475,35 @@ bool vgpu_is_reduced_bar1(struct gk20a *g)
473 475
474 return resource_size(l->bar1_mem) == (resource_size_t)f->userd.size; 476 return resource_size(l->bar1_mem) == (resource_size_t)f->userd.size;
475} 477}
478
479int vgpu_tegra_suspend(struct device *dev)
480{
481 struct tegra_vgpu_cmd_msg msg = {};
482 struct gk20a *g = get_gk20a(dev);
483 int err = 0;
484
485 msg.cmd = TEGRA_VGPU_CMD_SUSPEND;
486 msg.handle = vgpu_get_handle(g);
487 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
488 err = err ? err : msg.ret;
489 if (err)
490 nvgpu_err(g, "vGPU suspend failed\n");
491
492 return err;
493}
494
495int vgpu_tegra_resume(struct device *dev)
496{
497 struct tegra_vgpu_cmd_msg msg = {};
498 struct gk20a *g = get_gk20a(dev);
499 int err = 0;
500
501 msg.cmd = TEGRA_VGPU_CMD_RESUME;
502 msg.handle = vgpu_get_handle(g);
503 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
504 err = err ? err : msg.ret;
505 if (err)
506 nvgpu_err(g, "vGPU resume failed\n");
507
508 return err;
509}