From 60d0ba2d37b4f2b67ecf0be4d6566af5a289ccb9 Mon Sep 17 00:00:00 2001 From: Seema Khowala Date: Fri, 7 Apr 2017 12:39:10 -0700 Subject: gpu: nvgpu: gv11b: fix *get_runlists_mask* if ch/tsg id is unknown and bit mask for the engines that need to be recovered is not set, runlist mask should correspond to max number of supported runlists JIRA GPUT19X-7 Change-Id: I08e67af0846784a7918510d68de34e9162a42bf6 Signed-off-by: Seema Khowala Reviewed-on: http://git-master/r/1458155 Reviewed-by: svccoveritychecker GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gv11b/fifo_gv11b.c | 45 +++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 19 deletions(-) (limited to 'drivers/gpu/nvgpu/gv11b/fifo_gv11b.c') diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c index 6883d867..d3411d32 100644 --- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c @@ -543,35 +543,42 @@ u32 gv11b_fifo_get_runlists_mask(struct gk20a *g, u32 act_eng_bitmask, if (id_type != ID_TYPE_UNKNOWN) { if (id_type == ID_TYPE_TSG) - runlists_mask = fifo_sched_disable_runlist_m( + runlists_mask |= fifo_sched_disable_runlist_m( f->tsg[id].runlist_id); else - runlists_mask = fifo_sched_disable_runlist_m( + runlists_mask |= fifo_sched_disable_runlist_m( f->channel[id].runlist_id); - } else { - if (rc_type == RC_TYPE_MMU_FAULT && mmfault) { - if (mmfault->faulted_pbdma != FIFO_INVAL_PBDMA_ID) - pbdma_bitmask = BIT(mmfault->faulted_pbdma); + } - for (id = 0; id < f->max_runlists; id++) { + if (rc_type == RC_TYPE_MMU_FAULT && mmfault) { + if (mmfault->faulted_pbdma != FIFO_INVAL_PBDMA_ID) + pbdma_bitmask = BIT(mmfault->faulted_pbdma); - runlist = &f->runlist_info[id]; + for (id = 0; id < f->max_runlists; id++) { - if (runlist->eng_bitmask & act_eng_bitmask) - runlists_mask |= - fifo_sched_disable_runlist_m(id); + runlist = &f->runlist_info[id]; - if (runlist->pbdma_bitmask & pbdma_bitmask) - runlists_mask |= - fifo_sched_disable_runlist_m(id); - } - } else { - /* ID is unknown */ - for (id = 0; id < f->max_runlists; id++) { + if (runlist->eng_bitmask & act_eng_bitmask) + runlists_mask |= + fifo_sched_disable_runlist_m(id); + + if (runlist->pbdma_bitmask & pbdma_bitmask) + runlists_mask |= + fifo_sched_disable_runlist_m(id); + } + } + + if (id_type == ID_TYPE_UNKNOWN) { + for (id = 0; id < f->max_runlists; id++) { + if (act_eng_bitmask) { + /* eng ids are known */ runlist = &f->runlist_info[id]; if (runlist->eng_bitmask & act_eng_bitmask) runlists_mask |= - fifo_sched_disable_runlist_m(id); + fifo_sched_disable_runlist_m(id); + } else { + runlists_mask |= + fifo_sched_disable_runlist_m(id); } } } -- cgit v1.2.2