summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 33681c2a..b4d9c785 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -1948,29 +1948,14 @@ int gk20a_channel_suspend(struct gk20a *g)
1948 struct fifo_gk20a *f = &g->fifo; 1948 struct fifo_gk20a *f = &g->fifo;
1949 u32 chid; 1949 u32 chid;
1950 bool channels_in_use = false; 1950 bool channels_in_use = false;
1951 struct device *d = dev_from_gk20a(g);
1952 int err; 1951 int err;
1953 1952
1954 gk20a_dbg_fn(""); 1953 gk20a_dbg_fn("");
1955 1954
1956 /* idle the engine by submitting WFI on non-KEPLER_C channel */ 1955 /* wait for engine idle */
1957 for (chid = 0; chid < f->num_channels; chid++) { 1956 err = gk20a_fifo_wait_engine_idle(g);
1958 struct channel_gk20a *c = &f->channel[chid]; 1957 if (err)
1959 if (c->in_use && c->obj_class != KEPLER_C && !c->has_timedout) { 1958 return err;
1960 err = gk20a_channel_submit_wfi(c);
1961 if (err) {
1962 gk20a_err(d, "cannot idle channel %d\n",
1963 chid);
1964 return err;
1965 }
1966
1967 if (c->sync)
1968 c->sync->wait_cpu(c->sync,
1969 &c->last_submit.post_fence,
1970 500000);
1971 break;
1972 }
1973 }
1974 1959
1975 for (chid = 0; chid < f->num_channels; chid++) { 1960 for (chid = 0; chid < f->num_channels; chid++) {
1976 if (f->channel[chid].in_use) { 1961 if (f->channel[chid].in_use) {