summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2020-03-03 05:28:42 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2020-03-16 23:11:20 -0400
commit505251d6969d8305629d122d0afbef5e520ddd5b (patch)
tree5b107391d056dc01d8f8a0fbb7afd115e20d0c05
parentbb2c8ef511763d9f61f7e3b4bbfa7a27b9d5c2b6 (diff)
gpu: nvgpu: make debugger register access ELPG protected
Some of the APIs that access debugger register are not protected from ELPG. This might trigger PRI access timeouts for corresponding registers if GR engine is power gated. Add gr_gk20a_elpg_protected_call() to protect against ELPG. Bug 2820066 Change-Id: I467ea28aaea1c0e36c2d6aabce6a2daea6ee9911 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2306383 (cherry picked from commit 0c0eb25ee798db3a8dcd8cab7db06312a220240e) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2313210 Reviewed-by: automaticguardword <automaticguardword@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c b/drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c
index 8ad304bd..6fa15421 100644
--- a/drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c
+++ b/drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c
@@ -660,7 +660,8 @@ static int nvgpu_gpu_ioctl_trigger_suspend(struct gk20a *g)
660 return err; 660 return err;
661 661
662 nvgpu_mutex_acquire(&g->dbg_sessions_lock); 662 nvgpu_mutex_acquire(&g->dbg_sessions_lock);
663 err = g->ops.gr.trigger_suspend(g); 663 err = gr_gk20a_elpg_protected_call(g,
664 g->ops.gr.trigger_suspend(g));
664 nvgpu_mutex_release(&g->dbg_sessions_lock); 665 nvgpu_mutex_release(&g->dbg_sessions_lock);
665 666
666 gk20a_idle(g); 667 gk20a_idle(g);
@@ -695,7 +696,8 @@ static int nvgpu_gpu_ioctl_wait_for_pause(struct gk20a *g,
695 goto out_free; 696 goto out_free;
696 697
697 nvgpu_mutex_acquire(&g->dbg_sessions_lock); 698 nvgpu_mutex_acquire(&g->dbg_sessions_lock);
698 g->ops.gr.wait_for_pause(g, w_state); 699 (void)gr_gk20a_elpg_protected_call(g,
700 g->ops.gr.wait_for_pause(g, w_state));
699 701
700 for (sm_id = 0; sm_id < g->gr.no_of_sm; sm_id++) { 702 for (sm_id = 0; sm_id < g->gr.no_of_sm; sm_id++) {
701 ioctl_w_state[sm_id].valid_warps[0] = 703 ioctl_w_state[sm_id].valid_warps[0] =
@@ -738,7 +740,8 @@ static int nvgpu_gpu_ioctl_resume_from_pause(struct gk20a *g)
738 return err; 740 return err;
739 741
740 nvgpu_mutex_acquire(&g->dbg_sessions_lock); 742 nvgpu_mutex_acquire(&g->dbg_sessions_lock);
741 err = g->ops.gr.resume_from_pause(g); 743 err = gr_gk20a_elpg_protected_call(g,
744 g->ops.gr.resume_from_pause(g));
742 nvgpu_mutex_release(&g->dbg_sessions_lock); 745 nvgpu_mutex_release(&g->dbg_sessions_lock);
743 746
744 gk20a_idle(g); 747 gk20a_idle(g);
@@ -754,7 +757,8 @@ static int nvgpu_gpu_ioctl_clear_sm_errors(struct gk20a *g)
754 if (err) 757 if (err)
755 return err; 758 return err;
756 759
757 err = g->ops.gr.clear_sm_errors(g); 760 err = gr_gk20a_elpg_protected_call(g,
761 g->ops.gr.clear_sm_errors(g));
758 762
759 gk20a_idle(g); 763 gk20a_idle(g);
760 764