summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/os/linux/module.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/os/linux/module.c')
-rw-r--r--drivers/gpu/nvgpu/os/linux/module.c34
1 files changed, 28 insertions, 6 deletions
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)
967 int idle_usage_count = 0; 967 int idle_usage_count = 0;
968 968
969 if (!g->power_on) { 969 if (!g->power_on) {
970 if (platform->suspend)
971 ret = platform->suspend(dev);
972 if (ret)
973 return ret;
974
970 if (!pm_runtime_enabled(dev)) 975 if (!pm_runtime_enabled(dev))
971 gk20a_pm_railgate(dev); 976 ret = gk20a_pm_railgate(dev);
972 return 0; 977
978 return ret;
973 } 979 }
974 980
975 if (nvgpu_atomic_read(&g->usage_count) > idle_usage_count) 981 if (nvgpu_atomic_read(&g->usage_count) > idle_usage_count)
@@ -980,25 +986,41 @@ static int gk20a_pm_suspend(struct device *dev)
980 return ret; 986 return ret;
981 987
982 if (platform->suspend) 988 if (platform->suspend)
983 platform->suspend(dev); 989 ret = platform->suspend(dev);
990 if (ret)
991 return ret;
984 992
985 g->suspended = true; 993 g->suspended = true;
986 994
987 return 0; 995 return ret;
988} 996}
989 997
990static int gk20a_pm_resume(struct device *dev) 998static int gk20a_pm_resume(struct device *dev)
991{ 999{
1000 struct gk20a_platform *platform = dev_get_drvdata(dev);
992 struct gk20a *g = get_gk20a(dev); 1001 struct gk20a *g = get_gk20a(dev);
993 int ret = 0; 1002 int ret = 0;
994 1003
995 if (!g->suspended) { 1004 if (!g->suspended) {
1005 if (platform->resume)
1006 ret = platform->resume(dev);
1007 if (ret)
1008 return ret;
1009
996 if (!pm_runtime_enabled(dev)) 1010 if (!pm_runtime_enabled(dev))
997 gk20a_pm_unrailgate(dev); 1011 ret = gk20a_pm_unrailgate(dev);
998 return 0; 1012
1013 return ret;
999 } 1014 }
1000 1015
1016 if (platform->resume)
1017 ret = platform->resume(dev);
1018 if (ret)
1019 return ret;
1020
1001 ret = gk20a_pm_runtime_resume(dev); 1021 ret = gk20a_pm_runtime_resume(dev);
1022 if (ret)
1023 return ret;
1002 1024
1003 g->suspended = false; 1025 g->suspended = false;
1004 1026