summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2018-06-27 01:57:02 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-07-19 16:54:26 -0400
commitb1d0d8ece83ba0aa7b1e7ea9062eedc5cd9e4e33 (patch)
tree5a88d345e23e05d3a3ca9018cedcf6b12958a20b /drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
parentd859c5f4a03b975dc493f72a35016e83adad279a (diff)
Revert "Revert: GV11B runlist preemption patches"
This reverts commit 0b02c8589dcc507865a8fd398431c45fbda2ba9c. Originally change was reverted as it was making ap_compute test on embedded-qnx-hv e3550-t194 fail. With fixes related to replacing tsg preempt with runlist preempt during teardown, preempt timeout set to 100 ms (earlier this was set to 1000ms for t194 and 3000ms for legacy chips) and not issuing preempt timeout recovery if preempt fails, helped resolve the issue. Bug 200426402 Change-Id: If9a68d028a155075444cc1bdf411057e3388d48e Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1762563 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.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
index cd54baf1..57cb0019 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
@@ -55,9 +55,7 @@
55#define FECS_METHOD_WFI_RESTORE 0x80000 55#define FECS_METHOD_WFI_RESTORE 0x80000
56#define FECS_MAILBOX_0_ACK_RESTORE 0x4 56#define FECS_MAILBOX_0_ACK_RESTORE 0x4
57 57
58static int gk20a_fifo_update_runlist_locked(struct gk20a *g, u32 runlist_id, 58
59 u32 chid, bool add,
60 bool wait_for_finish);
61static u32 gk20a_fifo_engines_on_id(struct gk20a *g, u32 id, bool is_tsg); 59static u32 gk20a_fifo_engines_on_id(struct gk20a *g, u32 id, bool is_tsg);
62 60
63static const char *const pbdma_intr_fault_type_desc[] = { 61static const char *const pbdma_intr_fault_type_desc[] = {
@@ -2708,7 +2706,7 @@ void gk20a_fifo_issue_preempt(struct gk20a *g, u32 id, bool is_tsg)
2708} 2706}
2709 2707
2710int gk20a_fifo_is_preempt_pending(struct gk20a *g, u32 id, 2708int gk20a_fifo_is_preempt_pending(struct gk20a *g, u32 id,
2711 unsigned int id_type, unsigned int timeout_rc_type) 2709 unsigned int id_type)
2712{ 2710{
2713 struct nvgpu_timeout timeout; 2711 struct nvgpu_timeout timeout;
2714 u32 delay = GR_IDLE_CHECK_DEFAULT; 2712 u32 delay = GR_IDLE_CHECK_DEFAULT;
@@ -2781,8 +2779,8 @@ int __locked_fifo_preempt(struct gk20a *g, u32 id, bool is_tsg)
2781 id_type = is_tsg ? ID_TYPE_TSG : ID_TYPE_CHANNEL; 2779 id_type = is_tsg ? ID_TYPE_TSG : ID_TYPE_CHANNEL;
2782 2780
2783 /* wait for preempt */ 2781 /* wait for preempt */
2784 ret = g->ops.fifo.is_preempt_pending(g, id, id_type, 2782 ret = g->ops.fifo.is_preempt_pending(g, id, id_type);
2785 PREEMPT_TIMEOUT_RC); 2783
2786 return ret; 2784 return ret;
2787} 2785}
2788 2786
@@ -3279,7 +3277,7 @@ void gk20a_fifo_runlist_hw_submit(struct gk20a *g, u32 runlist_id,
3279 fifo_eng_runlist_length_f(count)); 3277 fifo_eng_runlist_length_f(count));
3280} 3278}
3281 3279
3282static int gk20a_fifo_update_runlist_locked(struct gk20a *g, u32 runlist_id, 3280int gk20a_fifo_update_runlist_locked(struct gk20a *g, u32 runlist_id,
3283 u32 chid, bool add, 3281 u32 chid, bool add,
3284 bool wait_for_finish) 3282 bool wait_for_finish)
3285{ 3283{
@@ -3452,8 +3450,7 @@ static int __locked_fifo_reschedule_preempt_next(struct channel_gk20a *ch,
3452 gk20a_readl(g, fifo_preempt_r())); 3450 gk20a_readl(g, fifo_preempt_r()));
3453#endif 3451#endif
3454 if (wait_preempt) { 3452 if (wait_preempt) {
3455 g->ops.fifo.is_preempt_pending( 3453 g->ops.fifo.is_preempt_pending(g, preempt_id, preempt_type);
3456 g, preempt_id, preempt_type, PREEMPT_TIMEOUT_RC);
3457 } 3454 }
3458#ifdef TRACEPOINTS_ENABLED 3455#ifdef TRACEPOINTS_ENABLED
3459 trace_gk20a_reschedule_preempted_next(ch->chid); 3456 trace_gk20a_reschedule_preempted_next(ch->chid);