diff options
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/gv11b/gr_gv11b.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c index 0f331293..8094ea43 100644 --- a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c | |||
@@ -2977,6 +2977,22 @@ static void gv11b_gr_resume_all_sms(struct gk20a *g) | |||
2977 | dbgr_control0, dbgr_status0); | 2977 | dbgr_control0, dbgr_status0); |
2978 | } | 2978 | } |
2979 | 2979 | ||
2980 | static int gv11b_gr_resume_from_pause(struct gk20a *g) | ||
2981 | { | ||
2982 | int err = 0; | ||
2983 | |||
2984 | /* Clear the pause mask to tell the GPU we want to resume everyone */ | ||
2985 | gk20a_writel(g, gr_gpcs_tpcs_sms_dbgr_bpt_pause_mask_0_r(), 0); | ||
2986 | |||
2987 | /* explicitly re-enable forwarding of SM interrupts upon any resume */ | ||
2988 | gk20a_writel(g, gr_gpcs_tpcs_tpccs_tpc_exception_en_r(), | ||
2989 | gr_gpcs_tpcs_tpccs_tpc_exception_en_sm_enabled_f()); | ||
2990 | |||
2991 | g->ops.gr.resume_all_sms(g); | ||
2992 | |||
2993 | return err; | ||
2994 | } | ||
2995 | |||
2980 | void gv11b_init_gr(struct gpu_ops *gops) | 2996 | void gv11b_init_gr(struct gpu_ops *gops) |
2981 | { | 2997 | { |
2982 | gp10b_init_gr(gops); | 2998 | gp10b_init_gr(gops); |
@@ -3050,4 +3066,5 @@ void gv11b_init_gr(struct gpu_ops *gops) | |||
3050 | gops->gr.suspend_all_sms = gv11b_gr_suspend_all_sms; | 3066 | gops->gr.suspend_all_sms = gv11b_gr_suspend_all_sms; |
3051 | gops->gr.resume_single_sm = gv11b_gr_resume_single_sm; | 3067 | gops->gr.resume_single_sm = gv11b_gr_resume_single_sm; |
3052 | gops->gr.resume_all_sms = gv11b_gr_resume_all_sms; | 3068 | gops->gr.resume_all_sms = gv11b_gr_resume_all_sms; |
3069 | gops->gr.resume_from_pause = gv11b_gr_resume_from_pause; | ||
3053 | } | 3070 | } |