diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gv11b/fb_gv11b.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/fb_gv11b.c b/drivers/gpu/nvgpu/gv11b/fb_gv11b.c index 6d1fbca9..f9532d66 100644 --- a/drivers/gpu/nvgpu/gv11b/fb_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/fb_gv11b.c | |||
@@ -966,6 +966,9 @@ static void gv11b_fb_copy_from_hw_fault_buf(struct gk20a *g, | |||
966 | static void gv11b_fb_handle_mmu_fault_common(struct gk20a *g, | 966 | static void gv11b_fb_handle_mmu_fault_common(struct gk20a *g, |
967 | struct mmu_fault_info *mmfault) | 967 | struct mmu_fault_info *mmfault) |
968 | { | 968 | { |
969 | unsigned int id_type; | ||
970 | u32 act_eng_bitmask = 0; | ||
971 | |||
969 | if (!mmfault->valid) | 972 | if (!mmfault->valid) |
970 | return; | 973 | return; |
971 | 974 | ||
@@ -977,13 +980,23 @@ static void gv11b_fb_handle_mmu_fault_common(struct gk20a *g, | |||
977 | * instance block, the fault cannot be isolated to a | 980 | * instance block, the fault cannot be isolated to a |
978 | * single context so we need to reset the entire runlist | 981 | * single context so we need to reset the entire runlist |
979 | */ | 982 | */ |
980 | nvgpu_log(g, gpu_dbg_intr, "UNBOUND INST"); | 983 | id_type = ID_TYPE_UNKNOWN; |
984 | nvgpu_log(g, gpu_dbg_intr, "UNBOUND INST BLOCK MMU FAULT"); | ||
985 | |||
986 | } else if (mmfault->refch) { | ||
987 | if (gk20a_is_channel_marked_as_tsg(mmfault->refch)) | ||
988 | id_type = ID_TYPE_TSG; | ||
989 | else | ||
990 | id_type = ID_TYPE_CHANNEL; | ||
991 | } else { | ||
992 | id_type = ID_TYPE_UNKNOWN; | ||
981 | } | 993 | } |
982 | 994 | ||
983 | if (mmfault->refch) { | 995 | if (mmfault->faulted_engine != FIFO_INVAL_ENGINE_ID) |
984 | gk20a_channel_put(mmfault->refch); | 996 | act_eng_bitmask = BIT(mmfault->faulted_engine); |
985 | mmfault->refch = NULL; | 997 | |
986 | } | 998 | g->ops.fifo.teardown_ch_tsg(g, act_eng_bitmask, mmfault->chid, |
999 | id_type, RC_TYPE_MMU_FAULT, mmfault); | ||
987 | } | 1000 | } |
988 | 1001 | ||
989 | static void gv11b_fb_handle_mmu_nonreplay_replay_fault(struct gk20a *g, | 1002 | static void gv11b_fb_handle_mmu_nonreplay_replay_fault(struct gk20a *g, |