summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2018-01-02 15:17:02 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-01-11 20:37:50 -0500
commite7102cf90bb78795a25864d4bc5299189fbfcc53 (patch)
tree08437bdcf2880e797546f4ba06e7f089c2c11f7c
parent6b90684ceec6c32aed7491a059b3972b1f1be5f4 (diff)
gpu: nvgpu: gv11b: disable fifo_intr_0_runlist_event
runlist event interrupt is not needed to be enabled as s/w polls for preemption completion for preempts issued in RUNLIST_PREEMPT. Even though it is not enabled, intr will get set in fifo_intr_0 status register whenever RUNLIST_PRREMPT is successfully completed. Since intr is disabled, fifo intr will not be triggered but it will be handled during handling of other fifo interrupts whenever fifo intr is triggered. Bug 2039371 Change-Id: I0817c2b6e9f3f14958ca7c738392bc67875be5d5 Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1630283 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/gv11b/fifo_gv11b.c42
1 files changed, 12 insertions, 30 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
index a2ea7d1e..2fb1ee70 100644
--- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
@@ -662,24 +662,6 @@ static u32 gv11b_fifo_get_runlists_mask(struct gk20a *g, u32 act_eng_bitmask,
662 return runlists_mask; 662 return runlists_mask;
663} 663}
664 664
665static void gv11b_fifo_runlist_event_intr_disable(struct gk20a *g)
666{
667 u32 reg_val;
668
669 reg_val = gk20a_readl(g, fifo_intr_en_0_r());
670 reg_val &= fifo_intr_0_runlist_event_pending_f();
671 gk20a_writel(g, fifo_intr_en_0_r(), reg_val);
672}
673
674static void gv11b_fifo_runlist_event_intr_enable(struct gk20a *g)
675{
676 u32 reg_val;
677
678 reg_val = gk20a_readl(g, fifo_intr_en_0_r());
679 reg_val |= fifo_intr_0_runlist_event_pending_f();
680 gk20a_writel(g, fifo_intr_en_0_r(), reg_val);
681}
682
683static void gv11b_fifo_issue_runlist_preempt(struct gk20a *g, 665static void gv11b_fifo_issue_runlist_preempt(struct gk20a *g,
684 u32 runlists_mask) 666 u32 runlists_mask)
685{ 667{
@@ -784,23 +766,24 @@ static int __locked_fifo_preempt_runlists(struct gk20a *g, u32 runlists_mask)
784{ 766{
785 int ret; 767 int ret;
786 768
787 /*
788 * Disable runlist event interrupt as it will get
789 * triggered after runlist preempt finishes
790 */
791 gv11b_fifo_runlist_event_intr_disable(g);
792
793 /* issue runlist preempt */ 769 /* issue runlist preempt */
794 gv11b_fifo_issue_runlist_preempt(g, runlists_mask); 770 gv11b_fifo_issue_runlist_preempt(g, runlists_mask);
795 771
796 /* poll for runlist preempt done */ 772 /* poll for runlist preempt done */
797 ret = gv11b_fifo_poll_runlist_preempt_pending(g, runlists_mask); 773 ret = gv11b_fifo_poll_runlist_preempt_pending(g, runlists_mask);
798 774
799 /* Clear outstanding runlist event */ 775 /*
800 gk20a_fifo_handle_runlist_event(g); 776 * Even if runlist_event intr is not enabled in fifo_intr_en_0 , it gets
777 * set in fifo_intr_0 status reg. Current fifo stall interrupt handler
778 * is checking all set bits in fifo_intr_0 and handling runlist_event
779 * too while handling other fifo interrupts e.g. pbdma fifo intr or
780 * ctxsw timeout interrupt. It is better to clear this after runlist
781 * preempt is done. Clearing runlist_event interrupt makes no
782 * difference to pending runlist_preempt.
783 */
801 784
802 /* Enable runlist event interrupt*/ 785 if (!ret)
803 gv11b_fifo_runlist_event_intr_enable(g); 786 gk20a_fifo_handle_runlist_event(g);
804 787
805 return ret; 788 return ret;
806} 789}
@@ -1158,8 +1141,7 @@ static u32 gv11b_fifo_intr_0_en_mask(struct gk20a *g)
1158 1141
1159 intr_0_en_mask = g->ops.fifo.intr_0_error_mask(g); 1142 intr_0_en_mask = g->ops.fifo.intr_0_error_mask(g);
1160 1143
1161 intr_0_en_mask |= fifo_intr_0_runlist_event_pending_f() | 1144 intr_0_en_mask |= fifo_intr_0_pbdma_intr_pending_f() |
1162 fifo_intr_0_pbdma_intr_pending_f() |
1163 fifo_intr_0_ctxsw_timeout_pending_f(); 1145 fifo_intr_0_ctxsw_timeout_pending_f();
1164 1146
1165 return intr_0_en_mask; 1147 return intr_0_en_mask;