From e4e2c1882865163ad53eeaf96acf83802ffbec71 Mon Sep 17 00:00:00 2001 From: Deepak Bhosale Date: Wed, 30 May 2018 13:12:24 -0700 Subject: 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 Reviewed-on: https://git-master.nvidia.com/r/1735153 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Richard Zhao Reviewed-by: svc-mobile-coverity Reviewed-by: Terje Bergstrom GVS: Gerrit_Virtual_Submit Reviewed-by: Nirav Patel Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/os/linux/module.c | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'drivers/gpu/nvgpu/os/linux/module.c') diff --git a/drivers/gpu/nvgpu/os/linux/module.c b/drivers/gpu/nvgpu/os/linux/module.c index af71cc81..4516490b 100644 --- a/drivers/gpu/nvgpu/os/linux/module.c +++ b/drivers/gpu/nvgpu/os/linux/module.c @@ -967,9 +967,15 @@ static int gk20a_pm_suspend(struct device *dev) int idle_usage_count = 0; if (!g->power_on) { + if (platform->suspend) + ret = platform->suspend(dev); + if (ret) + return ret; + if (!pm_runtime_enabled(dev)) - gk20a_pm_railgate(dev); - return 0; + ret = gk20a_pm_railgate(dev); + + return ret; } if (nvgpu_atomic_read(&g->usage_count) > idle_usage_count) @@ -980,25 +986,41 @@ static int gk20a_pm_suspend(struct device *dev) return ret; if (platform->suspend) - platform->suspend(dev); + ret = platform->suspend(dev); + if (ret) + return ret; g->suspended = true; - return 0; + return ret; } static int gk20a_pm_resume(struct device *dev) { + struct gk20a_platform *platform = dev_get_drvdata(dev); struct gk20a *g = get_gk20a(dev); int ret = 0; if (!g->suspended) { + if (platform->resume) + ret = platform->resume(dev); + if (ret) + return ret; + if (!pm_runtime_enabled(dev)) - gk20a_pm_unrailgate(dev); - return 0; + ret = gk20a_pm_unrailgate(dev); + + return ret; } + if (platform->resume) + ret = platform->resume(dev); + if (ret) + return ret; + ret = gk20a_pm_runtime_resume(dev); + if (ret) + return ret; g->suspended = false; -- cgit v1.2.2