summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2017-03-21 14:17:48 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-03-23 12:34:18 -0400
commitdf94d474a8200fc61969e2fc35d1b2a8d7fa5b8c (patch)
treed86e44d6263d48579346293aaeff7f5b2f826899 /drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
parent4492c62ffe9398bd4457f6f1c2773e40afe909fb (diff)
gpu: nvgpu: add 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 for each GPU version separately pbdma_intr_0 field differences for each GPU version:- -gk20a : bit 28 does not exists in hw -gm20b : bit 8(lbreq), 20(xbarconnect) and 28 do not exist in hw -gp10b : bit 8(lbreq), 20(xbarconnect) do not exist in hw. bit 28, (syncpoint_illegal) added in hw but is not being handled. -gk20a/gm20b/gp10b bit 24 eng_reset and bit 25 semaphore always existed in hw but never handled JIRA GPUT19X-47 Change-Id: I209191f57c5ea5b15081b7dc2411801d3537017c Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: http://git-master/r/1325402 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/fifo_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
index 58020d41..b4589eaa 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
@@ -838,10 +838,12 @@ int gk20a_init_fifo_reset_enable_hw(struct gk20a *g)
838 return 0; 838 return 0;
839} 839}
840 840
841static void gk20a_init_fifo_pbdma_intr_descs(struct fifo_gk20a *f) 841static void gk20a_fifo_init_pbdma_intr_descs(struct fifo_gk20a *f)
842{ 842{
843 /* These are all errors which indicate something really wrong 843 /*
844 * going on in the device. */ 844 * These are all errors which indicate something really wrong
845 * going on in the device
846 */
845 f->intr.pbdma.device_fatal_0 = 847 f->intr.pbdma.device_fatal_0 =
846 pbdma_intr_0_memreq_pending_f() | 848 pbdma_intr_0_memreq_pending_f() |
847 pbdma_intr_0_memack_timeout_pending_f() | 849 pbdma_intr_0_memack_timeout_pending_f() |
@@ -858,9 +860,11 @@ static void gk20a_init_fifo_pbdma_intr_descs(struct fifo_gk20a *f)
858 pbdma_intr_0_xbarconnect_pending_f() | 860 pbdma_intr_0_xbarconnect_pending_f() |
859 pbdma_intr_0_pri_pending_f(); 861 pbdma_intr_0_pri_pending_f();
860 862
861 /* These are data parsing, framing errors or others which can be 863 /*
864 * These are data parsing, framing errors or others which can be
862 * recovered from with intervention... or just resetting the 865 * recovered from with intervention... or just resetting the
863 * channel. */ 866 * channel
867 */
864 f->intr.pbdma.channel_fatal_0 = 868 f->intr.pbdma.channel_fatal_0 =
865 pbdma_intr_0_gpfifo_pending_f() | 869 pbdma_intr_0_gpfifo_pending_f() |
866 pbdma_intr_0_gpptr_pending_f() | 870 pbdma_intr_0_gpptr_pending_f() |
@@ -874,8 +878,7 @@ static void gk20a_init_fifo_pbdma_intr_descs(struct fifo_gk20a *f)
874 pbdma_intr_0_pbseg_pending_f() | 878 pbdma_intr_0_pbseg_pending_f() |
875 pbdma_intr_0_signature_pending_f(); 879 pbdma_intr_0_signature_pending_f();
876 880
877 /* Can be used for sw-methods, or represents 881 /* Can be used for sw-methods, or represents a recoverable timeout. */
878 * a recoverable timeout. */
879 f->intr.pbdma.restartable_0 = 882 f->intr.pbdma.restartable_0 =
880 pbdma_intr_0_device_pending_f(); 883 pbdma_intr_0_device_pending_f();
881} 884}
@@ -898,7 +901,8 @@ static int gk20a_init_fifo_setup_sw(struct gk20a *g)
898 901
899 nvgpu_mutex_init(&f->intr.isr.mutex); 902 nvgpu_mutex_init(&f->intr.isr.mutex);
900 nvgpu_mutex_init(&f->gr_reset_mutex); 903 nvgpu_mutex_init(&f->gr_reset_mutex);
901 gk20a_init_fifo_pbdma_intr_descs(f); /* just filling in data/tables */ 904
905 g->ops.fifo.init_pbdma_intr_descs(f); /* just filling in data/tables */
902 906
903 f->num_channels = g->ops.fifo.get_num_fifos(g); 907 f->num_channels = g->ops.fifo.get_num_fifos(g);
904 f->runlist_entry_size = g->ops.fifo.runlist_entry_size(); 908 f->runlist_entry_size = g->ops.fifo.runlist_entry_size();
@@ -3824,4 +3828,5 @@ void gk20a_init_fifo(struct gpu_ops *gops)
3824 gops->fifo.dump_channel_status_ramfc = gk20a_dump_channel_status_ramfc; 3828 gops->fifo.dump_channel_status_ramfc = gk20a_dump_channel_status_ramfc;
3825 gops->fifo.intr_0_error_mask = gk20a_fifo_intr_0_error_mask; 3829 gops->fifo.intr_0_error_mask = gk20a_fifo_intr_0_error_mask;
3826 gops->fifo.is_preempt_pending = gk20a_fifo_is_preempt_pending; 3830 gops->fifo.is_preempt_pending = gk20a_fifo_is_preempt_pending;
3831 gops->fifo.init_pbdma_intr_descs = gk20a_fifo_init_pbdma_intr_descs;
3827} 3832}