diff options
author | Seema Khowala <seemaj@nvidia.com> | 2017-03-21 14:17:48 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-03-23 12:34:18 -0400 |
commit | df94d474a8200fc61969e2fc35d1b2a8d7fa5b8c (patch) | |
tree | d86e44d6263d48579346293aaeff7f5b2f826899 /drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | |
parent | 4492c62ffe9398bd4457f6f1c2773e40afe909fb (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.c | 21 |
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 | ||
841 | static void gk20a_init_fifo_pbdma_intr_descs(struct fifo_gk20a *f) | 841 | static 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 | } |