diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/fifo_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index 88ce6a83..2cc5e4cd 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | |||
@@ -2671,6 +2671,21 @@ void gk20a_fifo_set_runlist_state(struct gk20a *g, u32 runlists_mask, | |||
2671 | gk20a_dbg_fn("done"); | 2671 | gk20a_dbg_fn("done"); |
2672 | } | 2672 | } |
2673 | 2673 | ||
2674 | void gk20a_fifo_enable_tsg_sched(struct gk20a *g, struct tsg_gk20a *tsg) | ||
2675 | { | ||
2676 | gk20a_fifo_set_runlist_state(g, fifo_sched_disable_runlist_m( | ||
2677 | tsg->runlist_id), RUNLIST_ENABLED, | ||
2678 | !RUNLIST_INFO_MUTEX_LOCKED); | ||
2679 | |||
2680 | } | ||
2681 | |||
2682 | void gk20a_fifo_disable_tsg_sched(struct gk20a *g, struct tsg_gk20a *tsg) | ||
2683 | { | ||
2684 | gk20a_fifo_set_runlist_state(g, fifo_sched_disable_runlist_m( | ||
2685 | tsg->runlist_id), RUNLIST_DISABLED, | ||
2686 | !RUNLIST_INFO_MUTEX_LOCKED); | ||
2687 | } | ||
2688 | |||
2674 | int gk20a_fifo_enable_engine_activity(struct gk20a *g, | 2689 | int gk20a_fifo_enable_engine_activity(struct gk20a *g, |
2675 | struct fifo_engine_info_gk20a *eng_info) | 2690 | struct fifo_engine_info_gk20a *eng_info) |
2676 | { | 2691 | { |
@@ -3413,6 +3428,27 @@ const char *gk20a_decode_pbdma_chan_eng_ctx_status(u32 index) | |||
3413 | return pbdma_chan_eng_ctx_status_str[index]; | 3428 | return pbdma_chan_eng_ctx_status_str[index]; |
3414 | } | 3429 | } |
3415 | 3430 | ||
3431 | bool gk20a_fifo_channel_status_is_next(struct gk20a *g, u32 chid) | ||
3432 | { | ||
3433 | u32 channel = gk20a_readl(g, ccsr_channel_r(chid)); | ||
3434 | |||
3435 | return ccsr_channel_next_v(channel) == ccsr_channel_next_true_v(); | ||
3436 | } | ||
3437 | |||
3438 | bool gk20a_fifo_channel_status_is_ctx_reload(struct gk20a *g, u32 chid) | ||
3439 | { | ||
3440 | u32 channel = gk20a_readl(g, ccsr_channel_r(chid)); | ||
3441 | u32 status = ccsr_channel_status_v(channel); | ||
3442 | |||
3443 | return (status == ccsr_channel_status_pending_ctx_reload_v() || | ||
3444 | status == ccsr_channel_status_pending_acq_ctx_reload_v() || | ||
3445 | status == ccsr_channel_status_on_pbdma_ctx_reload_v() || | ||
3446 | status == ccsr_channel_status_on_pbdma_and_eng_ctx_reload_v() || | ||
3447 | status == ccsr_channel_status_on_eng_ctx_reload_v() || | ||
3448 | status == ccsr_channel_status_on_eng_pending_ctx_reload_v() || | ||
3449 | status == ccsr_channel_status_on_eng_pending_acq_ctx_reload_v()); | ||
3450 | } | ||
3451 | |||
3416 | void gk20a_dump_channel_status_ramfc(struct gk20a *g, | 3452 | void gk20a_dump_channel_status_ramfc(struct gk20a *g, |
3417 | struct gk20a_debug_output *o, | 3453 | struct gk20a_debug_output *o, |
3418 | u32 chid, | 3454 | u32 chid, |