From 7095a72e563b5d7969c5f09053e469906362428f Mon Sep 17 00:00:00 2001 From: Richard Zhao Date: Wed, 23 Dec 2015 15:15:45 -0800 Subject: gpu: nvgpu: fix tsg bugs - correct runlist entry type for tsg - consider tsg when preempt channel Bug 1617046 Change-Id: Ie067df17fb53ae91c49403637a5f35fc3710e0b3 Signed-off-by: Richard Zhao Reviewed-on: http://git-master/r/926571 GVS: Gerrit_Virtual_Submit Reviewed-by: Aingara Paramakuru Reviewed-by: Deepak Nibade Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 2 +- drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 26 +++++++++----------------- 2 files changed, 10 insertions(+), 18 deletions(-) (limited to 'drivers/gpu/nvgpu') diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index f34df520..0c28d0bb 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c @@ -487,7 +487,7 @@ void gk20a_channel_abort(struct channel_gk20a *ch, bool channel_preempt) ch->g->ops.fifo.disable_channel(ch); if (channel_preempt) - ch->g->ops.fifo.preempt_channel(ch->g, ch->hw_chid); + gk20a_fifo_preempt(ch->g, ch); /* ensure no fences are pending */ mutex_lock(&ch->sync_lock); diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index ce91fd49..6b5807aa 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c @@ -2138,26 +2138,18 @@ static int gk20a_fifo_runlist_wait_pending(struct gk20a *g, u32 runlist_id) static inline u32 gk20a_get_tsg_runlist_entry_0(struct tsg_gk20a *tsg) { - u32 runlist_entry_0 = 0; + u32 runlist_entry_0 = ram_rl_entry_id_f(tsg->tsgid) | + ram_rl_entry_type_tsg_f() | + ram_rl_entry_tsg_length_f(tsg->num_active_channels); if (tsg->timeslice_timeout) - runlist_entry_0 = ram_rl_entry_id_f(tsg->tsgid) | - ram_rl_entry_type_f(ram_rl_entry_type_tsg_f()) | - ram_rl_entry_timeslice_scale_f( - tsg->timeslice_scale) | - ram_rl_entry_timeslice_timeout_f( - tsg->timeslice_timeout) | - ram_rl_entry_tsg_length_f( - tsg->num_active_channels); + runlist_entry_0 |= + ram_rl_entry_timeslice_scale_f(tsg->timeslice_scale) | + ram_rl_entry_timeslice_timeout_f(tsg->timeslice_timeout); else - runlist_entry_0 = ram_rl_entry_id_f(tsg->tsgid) | - ram_rl_entry_type_f(ram_rl_entry_type_tsg_f()) | - ram_rl_entry_timeslice_scale_f( - ram_rl_entry_timeslice_scale_3_f()) | - ram_rl_entry_timeslice_timeout_f( - ram_rl_entry_timeslice_timeout_128_f()) | - ram_rl_entry_tsg_length_f( - tsg->num_active_channels); + runlist_entry_0 |= + ram_rl_entry_timeslice_scale_3_f() | + ram_rl_entry_timeslice_timeout_128_f(); return runlist_entry_0; } -- cgit v1.2.2