summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
authorArto Merilainen <amerilainen@nvidia.com>2014-04-15 03:58:59 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:09:09 -0400
commit53622e893133211a3b8212c3c59eb52b08e141b1 (patch)
treedcbf33bf184917706c12b42c53eac3da9facce3b /drivers/gpu/nvgpu/gk20a
parent5515f947a385b04001ed73edb46d6e7a27e6b335 (diff)
gpu: nvgpu: Power on platform deps for wfi
Currently gk20a_channel_idle() drops pm_runtime references to gk20a and then drops platform dependencies. As we usually delay powering down gk20a, we may end up to case where the platform dependencies are turned off at the moment we start powering down gk20a. Power off sequence may use platform dependencies for informing completion of the last work, wait-for-idle, and therefore we may simply drop the information about job completion. This patch adds missing calls to power up platform dependencies for the time we submit the last work. Bug 1484824 Change-Id: I058febc717a1cb1cf96964ce20fb807bc876be6c Signed-off-by: Arto Merilainen <amerilainen@nvidia.com> Reviewed-on: http://git-master/r/396286 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Deepak Nibade <dnibade@nvidia.com> Tested-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 4cce7260..f90bc1a3 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -1840,6 +1840,7 @@ int gk20a_channel_suspend(struct gk20a *g)
1840 for (chid = 0; chid < f->num_channels; chid++) { 1840 for (chid = 0; chid < f->num_channels; chid++) {
1841 struct channel_gk20a *c = &f->channel[chid]; 1841 struct channel_gk20a *c = &f->channel[chid];
1842 if (c->in_use && c->obj_class != KEPLER_C) { 1842 if (c->in_use && c->obj_class != KEPLER_C) {
1843 gk20a_platform_channel_busy(g->dev);
1843 err = gk20a_channel_submit_wfi(c); 1844 err = gk20a_channel_submit_wfi(c);
1844 if (err) { 1845 if (err) {
1845 gk20a_err(d, "cannot idle channel %d\n", 1846 gk20a_err(d, "cannot idle channel %d\n",
@@ -1849,6 +1850,7 @@ int gk20a_channel_suspend(struct gk20a *g)
1849 1850
1850 c->sync->wait_cpu(c->sync, &c->last_submit_fence, 1851 c->sync->wait_cpu(c->sync, &c->last_submit_fence,
1851 500000); 1852 500000);
1853 gk20a_platform_channel_idle(g->dev);
1852 break; 1854 break;
1853 } 1855 }
1854 } 1856 }