diff options
author | Arto Merilainen <amerilainen@nvidia.com> | 2014-04-15 03:58:59 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:09:09 -0400 |
commit | 53622e893133211a3b8212c3c59eb52b08e141b1 (patch) | |
tree | dcbf33bf184917706c12b42c53eac3da9facce3b /drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |
parent | 5515f947a385b04001ed73edb46d6e7a27e6b335 (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/channel_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 2 |
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 | } |