summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c26
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;