diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 23 |
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) { |