diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-09-13 08:41:52 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-09-15 15:48:20 -0400 |
commit | 460951ed092aad787bacd0ebb0646b799d3463a1 (patch) | |
tree | b7fae8084b76106d77a8af6efea470e595175f17 /drivers/gpu/nvgpu/gk20a/fifo_gk20a.h | |
parent | 7d6d0405311337456f50d6fa032963c18d2c9f9f (diff) |
gpu: nvgpu: fix TSG enable sequence
Due to a h/w bug in Maxwell and Pascal we first need to enable all channels with
NEXT and CTX_RELOAD set in a TSG, and then rest of the channels should be
enabled
Add this sequence to gk20a_tsg_enable()
Add new APIs to enable/disable scheduling of TSG runlist
gk20a_fifo_enable_tsg_sched()
gk20a_fifo_disble_tsg_sched()
Add new APIs to check if channel has NEXT or CTX_RELOAD set
gk20a_fifo_channel_status_is_next()
gk20a_fifo_channel_status_is_ctx_reload()
Bug 1739362
Change-Id: I4891cbd7f22ebc1e0bf32c52801002cdc259dbe1
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1560636
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Seshendra Gadagottu <sgadagottu@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.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h index d5b686f0..70c70931 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h | |||
@@ -248,6 +248,9 @@ int gk20a_fifo_disable_engine_activity(struct gk20a *g, | |||
248 | bool wait_for_idle); | 248 | bool wait_for_idle); |
249 | int gk20a_fifo_disable_all_engine_activity(struct gk20a *g, | 249 | int gk20a_fifo_disable_all_engine_activity(struct gk20a *g, |
250 | bool wait_for_idle); | 250 | bool wait_for_idle); |
251 | void gk20a_fifo_enable_tsg_sched(struct gk20a *g, struct tsg_gk20a *tsg); | ||
252 | void gk20a_fifo_disable_tsg_sched(struct gk20a *g, struct tsg_gk20a *tsg); | ||
253 | |||
251 | u32 gk20a_fifo_engines_on_ch(struct gk20a *g, u32 chid); | 254 | u32 gk20a_fifo_engines_on_ch(struct gk20a *g, u32 chid); |
252 | 255 | ||
253 | int gk20a_fifo_reschedule_runlist(struct gk20a *g, u32 runlist_id); | 256 | int gk20a_fifo_reschedule_runlist(struct gk20a *g, u32 runlist_id); |
@@ -362,6 +365,9 @@ const char *gk20a_decode_pbdma_chan_eng_ctx_status(u32 index); | |||
362 | void gk20a_fifo_enable_channel(struct channel_gk20a *ch); | 365 | void gk20a_fifo_enable_channel(struct channel_gk20a *ch); |
363 | void gk20a_fifo_disable_channel(struct channel_gk20a *ch); | 366 | void gk20a_fifo_disable_channel(struct channel_gk20a *ch); |
364 | 367 | ||
368 | bool gk20a_fifo_channel_status_is_next(struct gk20a *g, u32 chid); | ||
369 | bool gk20a_fifo_channel_status_is_ctx_reload(struct gk20a *g, u32 chid); | ||
370 | |||
365 | struct channel_gk20a *gk20a_refch_from_inst_ptr(struct gk20a *g, u64 inst_ptr); | 371 | struct channel_gk20a *gk20a_refch_from_inst_ptr(struct gk20a *g, u64 inst_ptr); |
366 | void gk20a_fifo_channel_unbind(struct channel_gk20a *ch_gk20a); | 372 | void gk20a_fifo_channel_unbind(struct channel_gk20a *ch_gk20a); |
367 | 373 | ||