summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gv11b
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b')
-rw-r--r--drivers/gpu/nvgpu/gv11b/fifo_gv11b.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
index 4c3b1186..a3cb9292 100644
--- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
@@ -260,9 +260,20 @@ void gv11b_userd_gp_put(struct gk20a *g, struct channel_gk20a *c)
260 260
261void channel_gv11b_unbind(struct channel_gk20a *ch) 261void channel_gv11b_unbind(struct channel_gk20a *ch)
262{ 262{
263 struct gk20a *g = ch->g;
264
263 gk20a_dbg_fn(""); 265 gk20a_dbg_fn("");
264 266
265 gk20a_fifo_channel_unbind(ch); 267 if (nvgpu_atomic_cmpxchg(&ch->bound, true, false)) {
268 gk20a_writel(g, ccsr_channel_inst_r(ch->chid),
269 ccsr_channel_inst_ptr_f(0) |
270 ccsr_channel_inst_bind_false_f());
271
272 gk20a_writel(g, ccsr_channel_r(ch->chid),
273 ccsr_channel_enable_clr_true_f() |
274 ccsr_channel_pbdma_faulted_reset_f() |
275 ccsr_channel_eng_faulted_reset_f());
276 }
266} 277}
267 278
268u32 gv11b_fifo_get_num_fifos(struct gk20a *g) 279u32 gv11b_fifo_get_num_fifos(struct gk20a *g)