summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2017-03-21 14:22:57 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-03-23 12:34:13 -0400
commit40d2f609032a5b492decd0da4c5f50e00f765f37 (patch)
treeac3d783272ba0d00d7f00decbc3e9dff7fdf3a6b /drivers
parentd409d7ebc136470906b861f3bebb7da63e1557e6 (diff)
gpu: nvgpu: gv11b: implement init_pbdma_intr_desc fifo ops
Init device_fatal, channel_fatal and restartable fifo intr pbdma s/w variables for pbdma_intr_0 interrupt masks. pbdma_intr_0 field changes for gv11b:- bit 8(lbreq) does not exists in hw. bit 28 (syncpoint_illegal)is removed in hw. bit 20 is reused for clear_faulted_error in hw. bit 24 (eng_reset) and bit 25 (semaphore) always existed in hw but never handled in s/w. These are added as channel fatal. JIRA GPUT19X-47 Change-Id: I13673430408f1cf7ef762075a29b94196f79a349 Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: http://git-master/r/1325401 Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gv11b/fifo_gv11b.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
index b671628a..7e310984 100644
--- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
@@ -624,6 +624,53 @@ static int gv11b_fifo_preempt_ch_tsg(struct gk20a *g, u32 id,
624 return ret; 624 return ret;
625} 625}
626 626
627static void gv11b_fifo_init_pbdma_intr_descs(struct fifo_gk20a *f)
628{
629 /*
630 * These are all errors which indicate something really wrong
631 * going on in the device
632 */
633 f->intr.pbdma.device_fatal_0 =
634 pbdma_intr_0_memreq_pending_f() |
635 pbdma_intr_0_memack_timeout_pending_f() |
636 pbdma_intr_0_memack_extra_pending_f() |
637 pbdma_intr_0_memdat_timeout_pending_f() |
638 pbdma_intr_0_memdat_extra_pending_f() |
639 pbdma_intr_0_memflush_pending_f() |
640 pbdma_intr_0_memop_pending_f() |
641 pbdma_intr_0_lbconnect_pending_f() |
642 pbdma_intr_0_lback_timeout_pending_f() |
643 pbdma_intr_0_lback_extra_pending_f() |
644 pbdma_intr_0_lbdat_timeout_pending_f() |
645 pbdma_intr_0_lbdat_extra_pending_f() |
646 pbdma_intr_0_pri_pending_f();
647
648 /*
649 * These are data parsing, framing errors or others which can be
650 * recovered from with intervention... or just resetting the
651 * channel
652 */
653 f->intr.pbdma.channel_fatal_0 =
654 pbdma_intr_0_gpfifo_pending_f() |
655 pbdma_intr_0_gpptr_pending_f() |
656 pbdma_intr_0_gpentry_pending_f() |
657 pbdma_intr_0_gpcrc_pending_f() |
658 pbdma_intr_0_pbptr_pending_f() |
659 pbdma_intr_0_pbentry_pending_f() |
660 pbdma_intr_0_pbcrc_pending_f() |
661 pbdma_intr_0_method_pending_f() |
662 pbdma_intr_0_methodcrc_pending_f() |
663 pbdma_intr_0_pbseg_pending_f() |
664 pbdma_intr_0_clear_faulted_error_pending_f() |
665 pbdma_intr_0_eng_reset_pending_f() |
666 pbdma_intr_0_semaphore_pending_f() |
667 pbdma_intr_0_signature_pending_f();
668
669 /* Can be used for sw-methods, or represents a recoverable timeout. */
670 f->intr.pbdma.restartable_0 =
671 pbdma_intr_0_device_pending_f();
672}
673
627void gv11b_init_fifo(struct gpu_ops *gops) 674void gv11b_init_fifo(struct gpu_ops *gops)
628{ 675{
629 gp10b_init_fifo(gops); 676 gp10b_init_fifo(gops);
@@ -651,4 +698,5 @@ void gv11b_init_fifo(struct gpu_ops *gops)
651 gops->fifo.preempt_tsg = gv11b_fifo_preempt_tsg; 698 gops->fifo.preempt_tsg = gv11b_fifo_preempt_tsg;
652 gops->fifo.is_preempt_pending = gv11b_fifo_is_preempt_pending; 699 gops->fifo.is_preempt_pending = gv11b_fifo_is_preempt_pending;
653 gops->fifo.preempt_ch_tsg = gv11b_fifo_preempt_ch_tsg; 700 gops->fifo.preempt_ch_tsg = gv11b_fifo_preempt_ch_tsg;
701 gops->fifo.init_pbdma_intr_descs = gv11b_fifo_init_pbdma_intr_descs;
654} 702}