diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b')
-rw-r--r-- | drivers/gpu/nvgpu/gv11b/fifo_gv11b.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c index 97ab7aab..feed2002 100644 --- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c | |||
@@ -1049,19 +1049,25 @@ void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask, | |||
1049 | #endif | 1049 | #endif |
1050 | 1050 | ||
1051 | if (tsg) { | 1051 | if (tsg) { |
1052 | if (!g->fifo.deferred_reset_pending && | 1052 | if (g->fifo.deferred_reset_pending) { |
1053 | rc_type == RC_TYPE_MMU_FAULT) | 1053 | gk20a_disable_tsg(tsg); |
1054 | gk20a_fifo_set_ctx_mmu_error_tsg(g, tsg); | 1054 | } else { |
1055 | if (rc_type == RC_TYPE_MMU_FAULT) | ||
1056 | gk20a_fifo_set_ctx_mmu_error_tsg(g, tsg); | ||
1055 | 1057 | ||
1056 | gk20a_fifo_abort_tsg(g, tsg->tsgid, false); | 1058 | gk20a_fifo_abort_tsg(g, tsg->tsgid, false); |
1059 | } | ||
1057 | if (refch) | 1060 | if (refch) |
1058 | gk20a_channel_put(refch); | 1061 | gk20a_channel_put(refch); |
1059 | } else if (refch) { | 1062 | } else if (refch) { |
1060 | if (!g->fifo.deferred_reset_pending && | 1063 | if (g->fifo.deferred_reset_pending) { |
1061 | rc_type == RC_TYPE_MMU_FAULT) | 1064 | g->ops.fifo.disable_channel(refch); |
1065 | } else { | ||
1066 | if (rc_type == RC_TYPE_MMU_FAULT) | ||
1062 | gk20a_fifo_set_ctx_mmu_error_ch(g, refch); | 1067 | gk20a_fifo_set_ctx_mmu_error_ch(g, refch); |
1063 | 1068 | ||
1064 | gk20a_channel_abort(refch, false); | 1069 | gk20a_channel_abort(refch, false); |
1070 | } | ||
1065 | gk20a_channel_put(refch); | 1071 | gk20a_channel_put(refch); |
1066 | } else { | 1072 | } else { |
1067 | nvgpu_err(g, "id unknown, abort runlist"); | 1073 | nvgpu_err(g, "id unknown, abort runlist"); |