summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2016-06-01 04:53:58 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-06-01 16:04:02 -0400
commit8b05c705fb1cfd3d4f9196f1eadedf0c0b4eff69 (patch)
treef652a9c3454780c8237bf5abb80e78788ed895bf /drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
parent31fa6773ef124a4e779e0972e87d4fb681217f19 (diff)
gpu: nvgpu: fix TSG abort sequence
In gk20a_fifo_abort_tsg(), we loop through channels of TSG and call gk20a_channel_abort() for each channel This is incorrect since we disable and preempt each channel separately, whereas we should disable all channels at once and use TSG specific API to preempt TSG Fix this with below sequence : - gk20a_disable_tsg() to disable all channels - preempt tsg if required - for each channel in TSG - set has_timedout flag - call gk20a_channel_abort_clean_up() to clean up channel state Also, separate out common gk20a_channel_abort_clean_up() API which can be called from both channel and TSG abort routines In gk20a_channel_abort(), call gk20a_fifo_abort_tsg() if the channel is part of TSG Add new argument "preempt" to gk20a_fifo_abort_tsg() and preempt TSG if flag is set Bug 200205041 Change-Id: I4eff5394d26fbb53996f2d30b35140b75450f338 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/1157190 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/fifo_gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
index 986db4b1..5fb5f550 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
@@ -207,7 +207,7 @@ u32 gk20a_fifo_get_failing_engine_data(struct gk20a *g,
207 int *__id, bool *__is_tsg); 207 int *__id, bool *__is_tsg);
208bool gk20a_fifo_set_ctx_mmu_error_tsg(struct gk20a *g, 208bool gk20a_fifo_set_ctx_mmu_error_tsg(struct gk20a *g,
209 struct tsg_gk20a *tsg); 209 struct tsg_gk20a *tsg);
210void gk20a_fifo_abort_tsg(struct gk20a *g, u32 tsgid); 210void gk20a_fifo_abort_tsg(struct gk20a *g, u32 tsgid, bool preempt);
211bool gk20a_fifo_set_ctx_mmu_error_ch(struct gk20a *g, 211bool gk20a_fifo_set_ctx_mmu_error_ch(struct gk20a *g,
212 struct channel_gk20a *ch); 212 struct channel_gk20a *ch);
213 213