diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 56d1d505..116fd88f 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c | |||
@@ -5313,6 +5313,30 @@ int gr_gk20a_handle_sm_exception(struct gk20a *g, u32 gpc, u32 tpc, | |||
5313 | return -EFAULT; | 5313 | return -EFAULT; |
5314 | } | 5314 | } |
5315 | 5315 | ||
5316 | if (global_esr & gr_gpc0_tpc0_sm_hww_global_esr_bpt_int_pending_f()) { | ||
5317 | if (gk20a_is_channel_marked_as_tsg(fault_ch)) { | ||
5318 | struct tsg_gk20a *tsg = &g->fifo.tsg[fault_ch->tsgid]; | ||
5319 | |||
5320 | gk20a_tsg_event_id_post_event(tsg, | ||
5321 | NVGPU_IOCTL_CHANNEL_EVENT_ID_BPT_INT); | ||
5322 | } else { | ||
5323 | gk20a_channel_event_id_post_event(fault_ch, | ||
5324 | NVGPU_IOCTL_CHANNEL_EVENT_ID_BPT_INT); | ||
5325 | } | ||
5326 | } | ||
5327 | |||
5328 | if (global_esr & gr_gpc0_tpc0_sm_hww_global_esr_bpt_pause_pending_f()) { | ||
5329 | if (gk20a_is_channel_marked_as_tsg(fault_ch)) { | ||
5330 | struct tsg_gk20a *tsg = &g->fifo.tsg[fault_ch->tsgid]; | ||
5331 | |||
5332 | gk20a_tsg_event_id_post_event(tsg, | ||
5333 | NVGPU_IOCTL_CHANNEL_EVENT_ID_BPT_PAUSE); | ||
5334 | } else { | ||
5335 | gk20a_channel_event_id_post_event(fault_ch, | ||
5336 | NVGPU_IOCTL_CHANNEL_EVENT_ID_BPT_PAUSE); | ||
5337 | } | ||
5338 | } | ||
5339 | |||
5316 | gk20a_dbg(gpu_dbg_intr | gpu_dbg_gpu_dbg, | 5340 | gk20a_dbg(gpu_dbg_intr | gpu_dbg_gpu_dbg, |
5317 | "sm hww global %08x warp %08x", global_esr, warp_esr); | 5341 | "sm hww global %08x warp %08x", global_esr, warp_esr); |
5318 | 5342 | ||
@@ -5705,7 +5729,7 @@ int gk20a_gr_nonstall_isr(struct gk20a *g) | |||
5705 | gk20a_writel(g, gr_intr_nonstall_r(), | 5729 | gk20a_writel(g, gr_intr_nonstall_r(), |
5706 | gr_intr_nonstall_trap_pending_f()); | 5730 | gr_intr_nonstall_trap_pending_f()); |
5707 | /* Wakeup all the waiting channels */ | 5731 | /* Wakeup all the waiting channels */ |
5708 | gk20a_channel_semaphore_wakeup(g); | 5732 | gk20a_channel_semaphore_wakeup(g, true); |
5709 | } | 5733 | } |
5710 | 5734 | ||
5711 | return 0; | 5735 | return 0; |